diff --git a/frontend-dist/css/385.20c34d33.css b/frontend-dist/css/385.20c34d33.css new file mode 100644 index 00000000..ebecf837 --- /dev/null +++ b/frontend-dist/css/385.20c34d33.css @@ -0,0 +1 @@ +:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);bottom:0;left:0;margin:0;position:absolute;right:0;top:0;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;align-items:center;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);border-radius:var(--el-tag-border-radius);border-style:solid;border-width:1px;box-sizing:border-box;color:var(--el-tag-text-color);display:inline-flex;font-size:var(--el-tag-font-size);height:24px;justify-content:center;line-height:1;padding:0 9px;vertical-align:middle;white-space:nowrap;--el-icon-size:14px}.el-tag,.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{background-color:var(--el-tag-hover-color);color:var(--el-color-white)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{border-radius:50%;cursor:pointer;display:flex;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{background-color:transparent;border:none;border-radius:50%;margin-left:6px;outline:none;overflow:hidden;padding:0}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag--dark{--el-tag-text-color:var(--el-color-white)}.el-tag--dark,.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info,.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{height:32px;padding:0 11px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{height:20px;padding:0 7px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-scrollbar{--el-scrollbar-opacity:0.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:0.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;overflow:hidden;position:relative}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));border-radius:inherit;cursor:pointer;display:block;height:0;opacity:var(--el-scrollbar-opacity,.3);position:relative;transition:var(--el-transition-duration) background-color;width:0}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{border-radius:4px;bottom:2px;position:absolute;right:2px;z-index:1}.el-scrollbar__bar.is-vertical{top:2px;width:6px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);border-radius:var(--el-popper-border-radius);font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;padding:5px 11px;position:absolute;visibility:visible;word-break:normal;z-index:2000}.el-popper.is-dark{color:var(--el-bg-color)}.el-popper.is-dark,.el-popper.is-dark>.el-popper__arrow:before{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{right:0}.el-popper.is-light,.el-popper.is-light>.el-popper__arrow:before{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{right:0}.el-popper.is-pure{padding:0}.el-popper__arrow,.el-popper__arrow:before{height:10px;position:absolute;width:10px;z-index:-1}.el-popper__arrow:before{background:var(--el-text-color-primary);box-sizing:border-box;content:" ";transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-left-color:transparent!important;border-top-color:transparent!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);align-items:center;display:inline-flex;font-size:14px;height:32px;line-height:20px;position:relative;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{color:var(--el-text-color-primary);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;height:20px;transition:var(--el-transition-duration-fast);vertical-align:middle}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{display:inline-block;font-size:14px;line-height:1}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{height:0;margin:0;opacity:0;position:absolute;width:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{align-items:center;background:var(--el-switch-off-color);border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));border-radius:10px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:20px;min-width:40px;outline:none;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{align-items:center;display:flex;height:16px;justify-content:center;overflow:hidden;padding:0 4px 0 18px;transition:all var(--el-transition-duration);width:100%}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{color:var(--el-color-white);font-size:12px;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-switch__core .el-switch__action{align-items:center;background-color:var(--el-color-white);border-radius:var(--el-border-radius-circle);color:var(--el-switch-off-color);display:flex;height:16px;justify-content:center;left:1px;position:absolute;transition:all var(--el-transition-duration);width:16px}.el-switch.is-checked .el-switch__core{background-color:var(--el-switch-on-color);border-color:var(--el-switch-border-color,var(--el-switch-on-color))}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;height:40px;line-height:24px}.el-switch--large .el-switch__label{font-size:14px;height:24px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;height:24px;min-width:50px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{height:20px;width:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;height:24px;line-height:16px}.el-switch--small .el-switch__label{font-size:12px;height:16px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;height:16px;min-width:30px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{height:12px;width:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-select-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty,.el-select-dropdown__loading{color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0;text-align:center}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:6px 0}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{box-sizing:border-box;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);height:34px;line-height:34px;overflow:hidden;padding:0 32px 0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{background-color:unset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;mask:url("data:image/svg+xml;utf8,%3Csvg class=%27icon%27 width=%27200%27 height=%27200%27 viewBox=%270 0 1024 1024%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath fill=%27currentColor%27 d=%27M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z%27%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class=%27icon%27 width=%27200%27 height=%27200%27 viewBox=%270 0 1024 1024%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath fill=%27currentColor%27 d=%27M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z%27%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{list-style:none;margin:0;padding:0;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);font-size:12px;line-height:34px;overflow:hidden;padding:0 20px;text-overflow:ellipsis;white-space:nowrap}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;display:inline-block;position:relative;vertical-align:middle;width:var(--el-select-width)}.el-select__wrapper{align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:14px;gap:6px;line-height:24px;min-height:32px;padding:4px 12px;position:relative;text-align:left;transform:translateZ(0);transition:var(--el-transition-duration)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select__wrapper.is-disabled,.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;gap:6px}.el-select__caret{color:var(--el-select-input-color);cursor:pointer;font-size:var(--el-select-input-font-size);transform:rotate(0deg);transition:var(--el-transition-duration)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px;min-width:0;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{border-color:transparent;cursor:pointer}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.el-select__tags-text{line-height:normal}.el-select__placeholder,.el-select__tags-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select__placeholder{color:var(--el-input-text-color,var(--el-text-color-regular));position:absolute;top:50%;transform:translateY(-50%);width:100%;z-index:-1}.el-select__placeholder.is-transparent{color:var(--el-text-color-placeholder);-webkit-user-select:none;user-select:none}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper,.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;position:absolute;z-index:-1}.el-select__input{appearance:none;background-color:transparent;border:none;color:var(--el-select-multiple-input-color);font-family:inherit;font-size:inherit;height:24px;outline:none;padding:0;width:100%}.el-select__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-select--large .el-select__wrapper{font-size:14px;gap:6px;line-height:24px;min-height:40px;padding:8px 16px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{font-size:12px;gap:4px;line-height:20px;min-height:24px;padding:2px 8px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:translate(-45%,-60%) rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:50%;position:absolute;top:50%;transform:translate(-45%,-60%) rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0} \ No newline at end of file diff --git a/frontend-dist/css/385.20c34d33.css.gz b/frontend-dist/css/385.20c34d33.css.gz new file mode 100644 index 00000000..34738abb Binary files /dev/null and b/frontend-dist/css/385.20c34d33.css.gz differ diff --git a/frontend-dist/css/428.8044ed41.css b/frontend-dist/css/428.8044ed41.css deleted file mode 100644 index a0f90892..00000000 --- a/frontend-dist/css/428.8044ed41.css +++ /dev/null @@ -1 +0,0 @@ -:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:0.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-overlay.is-drawer{overflow:hidden}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);--el-drawer-dragger-size:8px;background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:var(--el-text-color-primary);display:flex;margin-bottom:32px;overflow:hidden;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:16px;line-height:inherit;margin:0}.el-drawer__footer{overflow:hidden;padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.is-dragging{transition:none}.el-drawer__dragger{-webkit-user-select:none;user-select:none}.el-drawer__dragger,.el-drawer__dragger:before{background-color:transparent;position:absolute;transition:all .2s}.el-drawer__dragger:before{content:""}.el-drawer__dragger:hover:before{background-color:var(--el-color-primary)}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.ltr>.el-drawer__dragger,.el-drawer.rtl>.el-drawer__dragger{bottom:0;cursor:ew-resize;height:100%;top:0;width:var(--el-drawer-dragger-size)}.el-drawer.ltr>.el-drawer__dragger:before,.el-drawer.rtl>.el-drawer__dragger:before{bottom:0;top:0;width:3px}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger,.el-drawer.ttb>.el-drawer__dragger{cursor:ns-resize;height:var(--el-drawer-dragger-size);left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger:before,.el-drawer.ttb>.el-drawer__dragger:before{height:3px;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.ltr>.el-drawer__dragger{right:0}.el-drawer.ltr>.el-drawer__dragger:before{right:-2px}.el-drawer.rtl{right:0}.el-drawer.rtl>.el-drawer__dragger{left:0}.el-drawer.rtl>.el-drawer__dragger:before{left:-2px}.el-drawer.ttb{top:0}.el-drawer.ttb>.el-drawer__dragger{bottom:0}.el-drawer.ttb>.el-drawer__dragger:before{bottom:-2px}.el-drawer.btt{bottom:0}.el-drawer.btt>.el-drawer__dragger{top:0}.el-drawer.btt>.el-drawer__dragger:before{top:-2px}.el-modal-drawer.is-penetrable{pointer-events:none}.el-modal-drawer.is-penetrable .el-drawer{pointer-events:auto}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:transparent!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translateX(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translateX(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);background:var(--el-fill-color-blank);color:var(--el-tree-text-color);cursor:default;font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{height:100%;min-height:60px;position:relative;text-align:center;width:100%}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;left:0;position:absolute;right:0}.el-tree-node{outline:none;white-space:nowrap}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);align-items:center;cursor:pointer;display:flex;height:var(--el-tree-node-content-height)}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{color:var(--el-tree-expand-icon-color);cursor:pointer;font-size:12px;transform:rotate(0deg);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{color:var(--el-tree-expand-icon-color);font-size:var(--el-font-size-base);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:transparent;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border:1px solid var(--el-popover-border-color);border-radius:var(--el-popover-border-radius);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;color:var(--el-text-color-regular);font-size:var(--el-popover-font-size);line-height:1.4;min-width:150px;overflow-wrap:break-word;padding:var(--el-popover-padding);z-index:var(--el-index-popper)}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.directory-tree-picker[data-v-62eab69a],.drawer-trigger-wrapper[data-v-62eab69a],.popover-trigger-wrapper[data-v-62eab69a]{display:inline-block}.tree-container[data-v-62eab69a]{min-height:200px;max-height:400px;overflow-y:auto;padding:8px}.directory-tree[data-v-62eab69a]{background:transparent;--el-tree-node-hover-bg-color:var(--el-fill-color-light)}.directory-tree[data-v-62eab69a] .el-tree-node__content{height:44px;padding:0 8px;border-radius:8px;transition:all .2s ease}.directory-tree[data-v-62eab69a] .el-tree-node__content:hover{background-color:var(--el-fill-color-light)}.directory-tree[data-v-62eab69a] .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.tree-node[data-v-62eab69a]{display:flex;align-items:center;gap:8px;padding:4px 0;width:100%;min-height:36px}.tree-node.is-current[data-v-62eab69a]{color:var(--el-color-primary);font-weight:500}.folder-icon[data-v-62eab69a]{color:var(--el-color-warning);font-size:16px;flex-shrink:0}.node-label[data-v-62eab69a]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-tree[data-v-62eab69a] .el-tree-node__content{height:48px;padding:0 12px}.mobile-tree .tree-node[data-v-62eab69a]{min-height:40px}.error-state[data-v-62eab69a]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 20px;text-align:center}.error-icon[data-v-62eab69a]{font-size:32px;color:var(--el-color-danger)}.error-text[data-v-62eab69a]{color:var(--el-text-color-secondary);font-size:14px}.tree-container[data-v-62eab69a] .el-loading-mask{border-radius:8px}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);display:flex;flex-direction:column;overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{flex:1;overflow:auto;padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.directory-tree-popover{padding:0!important;border-radius:12px!important;box-shadow:var(--el-box-shadow-light)!important}.el-zoom-in-top-enter-active.directory-tree-popover,.el-zoom-in-top-leave-active.directory-tree-popover{transition:transform .15s ease-out,opacity .15s ease-out!important}.directory-tree-drawer{border-radius:16px 16px 0 0!important}.directory-tree-drawer .el-drawer__header{margin-bottom:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter)}.directory-tree-drawer .el-drawer__body{padding:0} \ No newline at end of file diff --git a/frontend-dist/css/428.8044ed41.css.gz b/frontend-dist/css/428.8044ed41.css.gz deleted file mode 100644 index cda74bee..00000000 Binary files a/frontend-dist/css/428.8044ed41.css.gz and /dev/null differ diff --git a/frontend-dist/css/451.7e03bef9.css b/frontend-dist/css/451.7e03bef9.css new file mode 100644 index 00000000..7426d779 --- /dev/null +++ b/frontend-dist/css/451.7e03bef9.css @@ -0,0 +1 @@ +:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:0.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.el-overlay.is-drawer{overflow:hidden}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);--el-drawer-dragger-size:8px;background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:var(--el-text-color-primary);display:flex;margin-bottom:32px;overflow:hidden;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:16px;line-height:inherit;margin:0}.el-drawer__footer{overflow:hidden;padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.is-dragging{transition:none}.el-drawer__dragger{-webkit-user-select:none;user-select:none}.el-drawer__dragger,.el-drawer__dragger:before{background-color:transparent;position:absolute;transition:all .2s}.el-drawer__dragger:before{content:""}.el-drawer__dragger:hover:before{background-color:var(--el-color-primary)}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.ltr>.el-drawer__dragger,.el-drawer.rtl>.el-drawer__dragger{bottom:0;cursor:ew-resize;height:100%;top:0;width:var(--el-drawer-dragger-size)}.el-drawer.ltr>.el-drawer__dragger:before,.el-drawer.rtl>.el-drawer__dragger:before{bottom:0;top:0;width:3px}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger,.el-drawer.ttb>.el-drawer__dragger{cursor:ns-resize;height:var(--el-drawer-dragger-size);left:0;right:0;width:100%}.el-drawer.btt>.el-drawer__dragger:before,.el-drawer.ttb>.el-drawer__dragger:before{height:3px;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.ltr>.el-drawer__dragger{right:0}.el-drawer.ltr>.el-drawer__dragger:before{right:-2px}.el-drawer.rtl{right:0}.el-drawer.rtl>.el-drawer__dragger{left:0}.el-drawer.rtl>.el-drawer__dragger:before{left:-2px}.el-drawer.ttb{top:0}.el-drawer.ttb>.el-drawer__dragger{bottom:0}.el-drawer.ttb>.el-drawer__dragger:before{bottom:-2px}.el-drawer.btt{bottom:0}.el-drawer.btt>.el-drawer__dragger{top:0}.el-drawer.btt>.el-drawer__dragger:before{top:-2px}.el-modal-drawer.is-penetrable{pointer-events:none}.el-modal-drawer.is-penetrable .el-drawer{pointer-events:auto}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:transparent!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translateX(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translateX(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child:last-child{border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group--horizontal{display:inline-block;vertical-align:middle}.el-button-group--horizontal:after,.el-button-group--horizontal:before{content:"";display:table}.el-button-group--horizontal:after{clear:both}.el-button-group--horizontal>.el-button{float:left;position:relative}.el-button-group--horizontal>.el-button:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.el-button-group--horizontal>.el-button:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.el-button-group--horizontal>.el-button:not(:last-child){margin-right:-1px}.el-button-group--horizontal .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal>.el-dropdown>.el-button{border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0}.el-button-group--vertical{align-items:stretch;display:inline-flex;flex-direction:column}.el-button-group--vertical>.el-button{margin-top:-1px}.el-button-group--vertical>.el-button:first-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-button-group--vertical>.el-button:last-child{border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical>.el-dropdown{margin-top:-1px}.el-button-group--vertical>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical .el-button--primary:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);line-height:1;position:relative;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper,.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:0}.el-dropdown .el-dropdown__caret-button{align-items:center;border-left:none;display:inline-flex;justify-content:center;padding-left:0;padding-right:0;width:32px}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{background:var(--el-overlay-color-lighter);bottom:-1px;content:"";display:block;left:0;position:absolute;top:-1px;width:1px}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;left:0;list-style:none;margin:0;padding:5px 0;position:relative;top:0;z-index:var(--el-dropdown-menu-index)}.el-dropdown-menu__item{align-items:center;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:var(--el-font-size-base);line-height:22px;list-style:none;margin:0;outline:none;padding:5px 16px;white-space:nowrap}.el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{font-size:14px;line-height:22px;padding:7px 20px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{font-size:12px;line-height:20px;padding:2px 12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);background:var(--el-fill-color-blank);color:var(--el-tree-text-color);cursor:default;font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{height:100%;min-height:60px;position:relative;text-align:center;width:100%}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;left:0;position:absolute;right:0}.el-tree-node{outline:none;white-space:nowrap}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);align-items:center;cursor:pointer;display:flex;height:var(--el-tree-node-content-height)}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{color:var(--el-tree-expand-icon-color);cursor:pointer;font-size:12px;transform:rotate(0deg);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{color:var(--el-tree-expand-icon-color);font-size:var(--el-font-size-base);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:transparent;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border:1px solid var(--el-popover-border-color);border-radius:var(--el-popover-border-radius);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;color:var(--el-text-color-regular);font-size:var(--el-popover-font-size);line-height:1.4;min-width:150px;overflow-wrap:break-word;padding:var(--el-popover-padding);z-index:var(--el-index-popper)}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.directory-tree-picker[data-v-62eab69a],.drawer-trigger-wrapper[data-v-62eab69a],.popover-trigger-wrapper[data-v-62eab69a]{display:inline-block}.tree-container[data-v-62eab69a]{min-height:200px;max-height:400px;overflow-y:auto;padding:8px}.directory-tree[data-v-62eab69a]{background:transparent;--el-tree-node-hover-bg-color:var(--el-fill-color-light)}.directory-tree[data-v-62eab69a] .el-tree-node__content{height:44px;padding:0 8px;border-radius:8px;transition:all .2s ease}.directory-tree[data-v-62eab69a] .el-tree-node__content:hover{background-color:var(--el-fill-color-light)}.directory-tree[data-v-62eab69a] .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.tree-node[data-v-62eab69a]{display:flex;align-items:center;gap:8px;padding:4px 0;width:100%;min-height:36px}.tree-node.is-current[data-v-62eab69a]{color:var(--el-color-primary);font-weight:500}.folder-icon[data-v-62eab69a]{color:var(--el-color-warning);font-size:16px;flex-shrink:0}.node-label[data-v-62eab69a]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-tree[data-v-62eab69a] .el-tree-node__content{height:48px;padding:0 12px}.mobile-tree .tree-node[data-v-62eab69a]{min-height:40px}.error-state[data-v-62eab69a]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 20px;text-align:center}.error-icon[data-v-62eab69a]{font-size:32px;color:var(--el-color-danger)}.error-text[data-v-62eab69a]{color:var(--el-text-color-secondary);font-size:14px}.tree-container[data-v-62eab69a] .el-loading-mask{border-radius:8px}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);display:flex;flex-direction:column;overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{flex:1;overflow:auto;padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.directory-tree-popover{padding:0!important;border-radius:12px!important;box-shadow:var(--el-box-shadow-light)!important}.el-zoom-in-top-enter-active.directory-tree-popover,.el-zoom-in-top-leave-active.directory-tree-popover{transition:transform .15s ease-out,opacity .15s ease-out!important}.directory-tree-drawer{border-radius:16px 16px 0 0!important}.directory-tree-drawer .el-drawer__header{margin-bottom:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter)}.directory-tree-drawer .el-drawer__body{padding:0} \ No newline at end of file diff --git a/frontend-dist/css/451.7e03bef9.css.gz b/frontend-dist/css/451.7e03bef9.css.gz new file mode 100644 index 00000000..051488a0 Binary files /dev/null and b/frontend-dist/css/451.7e03bef9.css.gz differ diff --git a/frontend-dist/css/740.a94dbb46.css b/frontend-dist/css/740.a94dbb46.css deleted file mode 100644 index 9a7c72a8..00000000 --- a/frontend-dist/css/740.a94dbb46.css +++ /dev/null @@ -1 +0,0 @@ -.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);border-radius:var(--el-popper-border-radius);font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;padding:5px 11px;position:absolute;visibility:visible;word-break:normal;z-index:2000}.el-popper.is-dark{color:var(--el-bg-color)}.el-popper.is-dark,.el-popper.is-dark>.el-popper__arrow:before{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{right:0}.el-popper.is-light,.el-popper.is-light>.el-popper__arrow:before{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{right:0}.el-popper.is-pure{padding:0}.el-popper__arrow,.el-popper__arrow:before{height:10px;position:absolute;width:10px;z-index:-1}.el-popper__arrow:before{background:var(--el-text-color-primary);box-sizing:border-box;content:" ";transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-left-color:transparent!important;border-top-color:transparent!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child:last-child{border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group--horizontal{display:inline-block;vertical-align:middle}.el-button-group--horizontal:after,.el-button-group--horizontal:before{content:"";display:table}.el-button-group--horizontal:after{clear:both}.el-button-group--horizontal>.el-button{float:left;position:relative}.el-button-group--horizontal>.el-button:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.el-button-group--horizontal>.el-button:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.el-button-group--horizontal>.el-button:not(:last-child){margin-right:-1px}.el-button-group--horizontal .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal>.el-dropdown>.el-button{border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0}.el-button-group--vertical{align-items:stretch;display:inline-flex;flex-direction:column}.el-button-group--vertical>.el-button{margin-top:-1px}.el-button-group--vertical>.el-button:first-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-button-group--vertical>.el-button:last-child{border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical>.el-dropdown{margin-top:-1px}.el-button-group--vertical>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical .el-button--primary:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:not(:first-child):not(:last-child){border-bottom-color:var(--el-button-divide-border-color);border-top-color:var(--el-button-divide-border-color)}.el-scrollbar{--el-scrollbar-opacity:0.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:0.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;overflow:hidden;position:relative}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));border-radius:inherit;cursor:pointer;display:block;height:0;opacity:var(--el-scrollbar-opacity,.3);position:relative;transition:var(--el-transition-duration) background-color;width:0}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{border-radius:4px;bottom:2px;position:absolute;right:2px;z-index:1}.el-scrollbar__bar.is-vertical{top:2px;width:6px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);line-height:1;position:relative;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper,.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:0}.el-dropdown .el-dropdown__caret-button{align-items:center;border-left:none;display:inline-flex;justify-content:center;padding-left:0;padding-right:0;width:32px}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{background:var(--el-overlay-color-lighter);bottom:-1px;content:"";display:block;left:0;position:absolute;top:-1px;width:1px}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;left:0;list-style:none;margin:0;padding:5px 0;position:relative;top:0;z-index:var(--el-dropdown-menu-index)}.el-dropdown-menu__item{align-items:center;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:var(--el-font-size-base);line-height:22px;list-style:none;margin:0;outline:none;padding:5px 16px;white-space:nowrap}.el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{font-size:14px;line-height:22px;padding:7px 20px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{font-size:12px;line-height:20px;padding:2px 12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);bottom:0;left:0;margin:0;position:absolute;right:0;top:0;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;align-items:center;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);border-radius:var(--el-tag-border-radius);border-style:solid;border-width:1px;box-sizing:border-box;color:var(--el-tag-text-color);display:inline-flex;font-size:var(--el-tag-font-size);height:24px;justify-content:center;line-height:1;padding:0 9px;vertical-align:middle;white-space:nowrap;--el-icon-size:14px}.el-tag,.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{background-color:var(--el-tag-hover-color);color:var(--el-color-white)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{border-radius:50%;cursor:pointer;display:flex;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{background-color:transparent;border:none;border-radius:50%;margin-left:6px;outline:none;overflow:hidden;padding:0}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag--dark{--el-tag-text-color:var(--el-color-white)}.el-tag--dark,.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info,.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{height:32px;padding:0 11px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{height:20px;padding:0 7px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);align-items:center;display:inline-flex;font-size:14px;height:32px;line-height:20px;position:relative;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{color:var(--el-text-color-primary);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;height:20px;transition:var(--el-transition-duration-fast);vertical-align:middle}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{display:inline-block;font-size:14px;line-height:1}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{height:0;margin:0;opacity:0;position:absolute;width:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{align-items:center;background:var(--el-switch-off-color);border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));border-radius:10px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:20px;min-width:40px;outline:none;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{align-items:center;display:flex;height:16px;justify-content:center;overflow:hidden;padding:0 4px 0 18px;transition:all var(--el-transition-duration);width:100%}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{color:var(--el-color-white);font-size:12px;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-switch__core .el-switch__action{align-items:center;background-color:var(--el-color-white);border-radius:var(--el-border-radius-circle);color:var(--el-switch-off-color);display:flex;height:16px;justify-content:center;left:1px;position:absolute;transition:all var(--el-transition-duration);width:16px}.el-switch.is-checked .el-switch__core{background-color:var(--el-switch-on-color);border-color:var(--el-switch-border-color,var(--el-switch-on-color))}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;height:40px;line-height:24px}.el-switch--large .el-switch__label{font-size:14px;height:24px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;height:24px;min-width:50px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{height:20px;width:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;height:24px;line-height:16px}.el-switch--small .el-switch__label{font-size:12px;height:16px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;height:16px;min-width:30px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{height:12px;width:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-select-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty,.el-select-dropdown__loading{color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0;text-align:center}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:6px 0}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{box-sizing:border-box;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);height:34px;line-height:34px;overflow:hidden;padding:0 32px 0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{background-color:unset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;mask:url("data:image/svg+xml;utf8,%3Csvg class=%27icon%27 width=%27200%27 height=%27200%27 viewBox=%270 0 1024 1024%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath fill=%27currentColor%27 d=%27M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z%27%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class=%27icon%27 width=%27200%27 height=%27200%27 viewBox=%270 0 1024 1024%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath fill=%27currentColor%27 d=%27M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z%27%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{list-style:none;margin:0;padding:0;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);font-size:12px;line-height:34px;overflow:hidden;padding:0 20px;text-overflow:ellipsis;white-space:nowrap}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;display:inline-block;position:relative;vertical-align:middle;width:var(--el-select-width)}.el-select__wrapper{align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:14px;gap:6px;line-height:24px;min-height:32px;padding:4px 12px;position:relative;text-align:left;transform:translateZ(0);transition:var(--el-transition-duration)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select__wrapper.is-disabled,.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;gap:6px}.el-select__caret{color:var(--el-select-input-color);cursor:pointer;font-size:var(--el-select-input-font-size);transform:rotate(0deg);transition:var(--el-transition-duration)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px;min-width:0;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{border-color:transparent;cursor:pointer}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.el-select__tags-text{line-height:normal}.el-select__placeholder,.el-select__tags-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select__placeholder{color:var(--el-input-text-color,var(--el-text-color-regular));position:absolute;top:50%;transform:translateY(-50%);width:100%;z-index:-1}.el-select__placeholder.is-transparent{color:var(--el-text-color-placeholder);-webkit-user-select:none;user-select:none}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper,.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;position:absolute;z-index:-1}.el-select__input{appearance:none;background-color:transparent;border:none;color:var(--el-select-multiple-input-color);font-family:inherit;font-size:inherit;height:24px;outline:none;padding:0;width:100%}.el-select__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-select--large .el-select__wrapper{font-size:14px;gap:6px;line-height:24px;min-height:40px;padding:8px 16px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{font-size:12px;gap:4px;line-height:20px;min-height:24px;padding:2px 8px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:translate(-45%,-60%) rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:50%;position:absolute;top:50%;transform:translate(-45%,-60%) rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0} \ No newline at end of file diff --git a/frontend-dist/css/740.a94dbb46.css.gz b/frontend-dist/css/740.a94dbb46.css.gz deleted file mode 100644 index 257345c0..00000000 Binary files a/frontend-dist/css/740.a94dbb46.css.gz and /dev/null differ diff --git a/frontend-dist/css/770.37d2e9e0.css b/frontend-dist/css/770.37d2e9e0.css deleted file mode 100644 index 4864747d..00000000 --- a/frontend-dist/css/770.37d2e9e0.css +++ /dev/null @@ -1 +0,0 @@ -.move-dialog-content[data-v-7aaa437c]{padding:0 10px}.move-path-input-container[data-v-7aaa437c]{display:flex;align-items:center;gap:10px}.move-path-input[data-v-7aaa437c]{flex:1}.directory-picker-trigger[data-v-7aaa437c]{flex-shrink:0}.move-dialog-hint[data-v-7aaa437c]{margin-top:12px;font-size:12px;color:var(--el-text-color-secondary)}.move-drawer-content[data-v-7aaa437c]{padding:16px}.move-path-section[data-v-7aaa437c]{margin-bottom:16px}.move-path-label[data-v-7aaa437c]{font-size:14px;font-weight:500;margin-bottom:8px;color:var(--el-text-color-primary)}.move-path-input-row[data-v-7aaa437c]{display:flex;align-items:center;gap:10px}.embedded-tree-section[data-v-7aaa437c]{margin-top:16px;border:1px solid var(--el-border-color-lighter);border-radius:8px;overflow:hidden}.tree-section-header[data-v-7aaa437c]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-lighter)}.tree-section-title[data-v-7aaa437c]{font-size:14px;font-weight:500}.tree-container[data-v-7aaa437c]{min-height:200px;max-height:300px;overflow-y:auto;padding:8px}.directory-tree[data-v-7aaa437c]{background:transparent}.directory-tree[data-v-7aaa437c] .el-tree-node__content{height:44px;padding:0 8px;border-radius:8px}.tree-node[data-v-7aaa437c]{display:flex;align-items:center;gap:8px;padding:4px 0;width:100%}.tree-node.is-current[data-v-7aaa437c]{color:var(--el-color-primary);font-weight:500}.folder-icon[data-v-7aaa437c]{color:var(--el-color-warning);font-size:16px}.node-label[data-v-7aaa437c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.error-state[data-v-7aaa437c]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 20px;text-align:center}.error-icon[data-v-7aaa437c]{font-size:32px;color:var(--el-color-danger)}.error-text[data-v-7aaa437c]{color:var(--el-text-color-secondary);font-size:14px}.drawer-footer[data-v-7aaa437c]{display:flex;gap:12px;padding:0 16px 16px}.footer-btn[data-v-7aaa437c]{flex:1}.move-dialog .el-dialog__body{padding:20px}.move-drawer{border-radius:16px 16px 0 0!important}.move-drawer .el-drawer__header{margin-bottom:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter)}.move-drawer .el-drawer__body,.move-drawer .el-drawer__footer{padding:0}.mobile-drawer-overlay[data-v-768efd1f]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);z-index:2000;backdrop-filter:blur(4px)}.mobile-drawer[data-v-768efd1f]{position:absolute;top:22vh;left:8px;bottom:8px;width:280px;max-width:calc(85vw - 16px);background:var(--el-bg-color);border-radius:16px;box-shadow:0 8px 32px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);display:flex;flex-direction:column;overflow:hidden}html.dark .mobile-drawer[data-v-768efd1f]{background:rgba(40,40,45,.98);box-shadow:0 8px 32px rgba(0,0,0,.4),0 2px 8px rgba(0,0,0,.3)}.mobile-drawer-header[data-v-768efd1f]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:linear-gradient(135deg,rgba(56,189,248,.12),rgba(14,165,233,.08));border-bottom:1px solid var(--el-border-color-lighter)}.mobile-drawer-title[data-v-768efd1f]{font-size:15px;font-weight:600;color:#38bdf8;display:flex;align-items:center;gap:8px}.mobile-drawer-title[data-v-768efd1f]:before{content:"";display:inline-block;width:4px;height:16px;background:linear-gradient(180deg,#38bdf8,rgba(14,165,233,.5));border-radius:2px}.mobile-drawer-close[data-v-768efd1f]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--el-text-color-secondary);cursor:pointer;border-radius:8px;transition:all .2s ease;background:transparent}.mobile-drawer-close[data-v-768efd1f]:active{background:var(--el-fill-color);color:var(--el-text-color-primary)}.mobile-drawer-content[data-v-768efd1f]{flex:1;overflow-y:auto;padding:8px}.mobile-drawer-item[data-v-768efd1f]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:2px 0;cursor:pointer;transition:all .2s ease;color:var(--el-text-color-primary);border-radius:10px;font-size:14px}.mobile-drawer-item[data-v-768efd1f]:active{background:var(--el-fill-color-light);transform:scale(.98)}.mobile-drawer-item.active[data-v-768efd1f]{background:linear-gradient(135deg,rgba(56,189,248,.2),rgba(14,165,233,.12));color:#38bdf8;font-weight:600}.mobile-drawer-item-icon[data-v-768efd1f]{font-size:18px;width:24px;text-align:center;opacity:.7}.mobile-drawer-item.active .mobile-drawer-item-icon[data-v-768efd1f]{opacity:1;color:#38bdf8}.mobile-drawer-back[data-v-768efd1f]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:8px 8px;border-radius:10px;background:var(--el-fill-color-lighter);cursor:pointer;transition:all .2s ease;color:var(--el-text-color-secondary);font-size:14px}.mobile-drawer-back[data-v-768efd1f]:active{background:var(--el-fill-color);color:var(--el-text-color-primary);transform:scale(.98)}.drawer-slide-enter-active[data-v-768efd1f]{transition:opacity .3s ease}.drawer-slide-leave-active[data-v-768efd1f]{transition:opacity .2s ease}.drawer-slide-enter-active .mobile-drawer[data-v-768efd1f]{animation:slideInLeft-768efd1f .3s ease-out}.drawer-slide-leave-active .mobile-drawer[data-v-768efd1f]{animation:slideOutLeft-768efd1f .2s ease-in}.drawer-slide-enter-from[data-v-768efd1f],.drawer-slide-leave-to[data-v-768efd1f]{opacity:0}@keyframes slideInLeft-768efd1f{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slideOutLeft-768efd1f{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.bottom-sheet-overlay[data-v-62bb601c]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:9999;display:flex;align-items:flex-end;justify-content:center}.bottom-sheet[data-v-62bb601c]{width:100%;max-width:100%;background:var(--bottom-sheet-bg,hsla(0,0%,100%,.95));backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:20px 20px 0 0;max-height:70vh;overflow:hidden;box-shadow:0 -4px 30px rgba(0,0,0,.15);border-top:1px solid var(--bottom-sheet-border,rgba(0,0,0,.05))}html.dark .bottom-sheet[data-v-62bb601c]{--bottom-sheet-bg:rgba(40,44,52,.95);--bottom-sheet-border:hsla(0,0%,100%,.1);box-shadow:0 -4px 30px rgba(0,0,0,.4)}.bottom-sheet-header[data-v-62bb601c]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px 20px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.bottom-sheet-handle[data-v-62bb601c]{width:40px;height:4px;background:var(--el-border-color);border-radius:2px}.bottom-sheet-title[data-v-62bb601c]{font-size:16px;font-weight:600;color:var(--el-text-color-primary);text-align:center;max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.dark .bottom-sheet-title[data-v-62bb601c]{color:#f0f0f0}.bottom-sheet-content[data-v-62bb601c]{padding:12px 16px;padding-bottom:calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px}.bottom-sheet-item[data-v-62bb601c]{display:flex;align-items:center;gap:16px;padding:16px 20px;border-radius:14px;cursor:pointer;transition:all .2s ease;background:var(--bottom-sheet-item-bg,rgba(0,0,0,.04));color:var(--el-text-color-primary)}html.dark .bottom-sheet-item[data-v-62bb601c]{--bottom-sheet-item-bg:hsla(0,0%,100%,.08)}.bottom-sheet-item[data-v-62bb601c]:active{transform:scale(.98);background:var(--bottom-sheet-item-active-bg,rgba(0,0,0,.08))}html.dark .bottom-sheet-item[data-v-62bb601c]:active{--bottom-sheet-item-active-bg:hsla(0,0%,100%,.15)}.bottom-sheet-icon[data-v-62bb601c]{font-size:20px;width:28px;text-align:center;color:#38bdf8}.bottom-sheet-danger .bottom-sheet-icon[data-v-62bb601c],.bottom-sheet-danger[data-v-62bb601c]{color:var(--el-color-danger)}.bottom-sheet-enter-active[data-v-62bb601c]{transition:all .3s ease-out}.bottom-sheet-leave-active[data-v-62bb601c]{transition:all .2s ease-in}.bottom-sheet-enter-active .bottom-sheet[data-v-62bb601c]{animation:slideUp-62bb601c .3s ease-out}.bottom-sheet-leave-active .bottom-sheet[data-v-62bb601c]{animation:slideDown-62bb601c .2s ease-in}.bottom-sheet-enter-from[data-v-62bb601c],.bottom-sheet-leave-to[data-v-62bb601c]{opacity:0}.bottom-sheet-enter-from .bottom-sheet[data-v-62bb601c],.bottom-sheet-leave-to .bottom-sheet[data-v-62bb601c]{transform:translateY(100%)}@keyframes slideUp-62bb601c{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown-62bb601c{0%{transform:translateY(0)}to{transform:translateY(100%)}}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-bottom:after{bottom:auto;top:0}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translateX(100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translateX(-100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(-100%);transform-origin:0 0}}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color)}.el-alert--primary.is-light,.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.batch-tag-container[data-v-ec3adcfc]{padding:0}.tab-content[data-v-ec3adcfc]{padding:20px}.tab-description[data-v-ec3adcfc]{margin:0 0 15px 0;color:#606266;font-size:14px}.input-section[data-v-ec3adcfc]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-ec3adcfc]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-ec3adcfc]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-ec3adcfc]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.common-tags-section[data-v-ec3adcfc],.tags-to-add-section[data-v-ec3adcfc]{margin-bottom:20px}.common-tags-section h4[data-v-ec3adcfc],.tags-to-add-section h4[data-v-ec3adcfc]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-ec3adcfc]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-ec3adcfc]{cursor:default}.empty-message[data-v-ec3adcfc]{color:#909399;font-size:13px;padding:10px 0}.action-buttons[data-v-ec3adcfc]{margin-top:20px;display:flex;justify-content:flex-end}.tag-management-container[data-v-689f94e2]{padding:10px 0}.input-section[data-v-689f94e2]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-689f94e2]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-689f94e2]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-689f94e2]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.current-tags-section[data-v-689f94e2],.popular-tags-section[data-v-689f94e2]{margin-bottom:20px}.current-tags-section h4[data-v-689f94e2],.popular-tags-section h4[data-v-689f94e2]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-689f94e2]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-689f94e2]{cursor:default}.tag-item.clickable[data-v-689f94e2]{cursor:pointer;transition:transform .2s}.tag-item.clickable[data-v-689f94e2]:hover{transform:translateY(-2px)}.empty-message[data-v-689f94e2]{color:#909399;font-size:13px;padding:10px 0}.dialog-footer[data-v-689f94e2]{display:flex;justify-content:flex-end}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start;text-align:left}.el-form-item--label-right .el-form-item__label{justify-content:flex-end;text-align:right}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;padding-right:0;text-align:left;width:fit-content}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.detail-actions[data-v-3f80812c]{display:flex;justify-content:right;margin-bottom:10px;flex-wrap:wrap;gap:8px}.detail-action[data-v-3f80812c]{margin-left:0!important}.video-preview[data-v-3f80812c]{max-height:300px;cursor:pointer;-o-object-fit:contain;object-fit:contain}.audio-preview[data-v-3f80812c],.video-preview[data-v-3f80812c]{width:100%;max-width:400px;border-radius:8px}.image-preview[data-v-3f80812c]{width:auto;height:auto;max-width:100%;max-height:300px;border-radius:8px;cursor:pointer}.image-preview[data-v-3f80812c] img{max-width:100%;max-height:300px;-o-object-fit:contain;object-fit:contain}.file-icon-detail[data-v-3f80812c]{font-size:64px;color:var(--el-text-color-secondary)}.preview-section[data-v-3f80812c]{display:flex;justify-content:center;margin-bottom:15px;padding:12px;background:var(--el-fill-color-light);border-radius:8px;min-height:60px}.preview-content[data-v-3f80812c]{display:flex;justify-content:center;align-items:center;width:100%}[data-v-3f80812c] .el-descriptions__content{word-break:break-all;word-wrap:break-word}[data-v-3f80812c] .el-descriptions__content .el-tag,[data-v-3f80812c] .el-descriptions__content .el-tag+span{vertical-align:middle}[data-v-3f80812c] .el-descriptions__label{width:120px!important;min-width:100px!important;max-width:120px!important}[data-v-3f80812c] .el-descriptions__body table{table-layout:fixed}@media (max-width:768px){.detail-actions[data-v-3f80812c]{justify-content:center}}.batch-floating-bar[data-v-7445695a]{position:fixed;left:50%;bottom:max(84px,calc(72px + env(safe-area-inset-bottom)));transform:translateX(-50%);z-index:1200;display:flex;align-items:center;gap:7px;max-width:min(720px,calc(100vw - 48px));padding:8px;border:1px solid var(--admin-batch-toolbar-border);border-radius:999px;background:var(--admin-batch-toolbar-bg);box-shadow:var(--admin-batch-toolbar-shadow);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}.batch-selection-summary[data-v-7445695a]{display:flex;align-items:center;flex:0 0 auto;padding:0 2px}.batch-selection-count[data-v-7445695a]{min-width:20px;height:28px;display:inline-flex;align-items:center;justify-content:center;padding:0 4px;color:var(--admin-container-color);font-size:15px;font-weight:650;line-height:1}.batch-toolbar-divider[data-v-7445695a]{width:1px;height:20px;flex:0 0 auto;border-radius:999px;background:var(--admin-batch-toolbar-border);opacity:.78}.batch-floating-actions[data-v-7445695a]{display:flex;align-items:center;gap:6px}.batch-floating-btn[data-v-7445695a]{width:38px;height:38px;min-width:38px;margin-left:0!important;padding:0;border:none;border-radius:50%;color:var(--admin-batch-clear-color);background:var(--admin-batch-action-bg);box-shadow:var(--admin-batch-action-shadow);transition:transform .22s ease,box-shadow .22s ease,background-color .22s ease,color .22s ease}.batch-floating-btn[data-v-7445695a]:hover{transform:translateY(-2px);background:var(--admin-batch-action-hover-bg);box-shadow:var(--admin-batch-action-hover-shadow)}.batch-floating-btn.copy[data-v-7445695a]{color:var(--admin-batch-copy-color)}.batch-floating-btn.danger[data-v-7445695a]{color:var(--admin-batch-delete-color)}.batch-floating-btn.download[data-v-7445695a]{color:var(--admin-batch-download-color)}.batch-floating-btn.move[data-v-7445695a]{color:var(--admin-batch-move-color)}.batch-floating-btn.tag[data-v-7445695a]{color:var(--admin-batch-tag-color)}.batch-floating-btn.ban[data-v-7445695a]{color:var(--admin-batch-ban-color)}.batch-floating-btn.white[data-v-7445695a]{color:var(--admin-batch-white-color)}.batch-floating-btn.ghost[data-v-7445695a]{color:var(--admin-batch-clear-color)}.batch-floating-icon[data-v-7445695a]{width:16px;margin-right:0}.batch-toolbar-enter-active[data-v-7445695a],.batch-toolbar-leave-active[data-v-7445695a]{transition:opacity .24s ease,transform .28s cubic-bezier(.22,1,.36,1)}.batch-toolbar-enter-from[data-v-7445695a],.batch-toolbar-leave-to[data-v-7445695a]{opacity:0;transform:translateX(-50%) translateY(16px) scale(.98)}.batch-toolbar-enter-to[data-v-7445695a],.batch-toolbar-leave-from[data-v-7445695a]{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}@media (max-width:768px){.batch-floating-bar[data-v-7445695a]{left:50%;right:auto;bottom:max(76px,calc(64px + env(safe-area-inset-bottom)));transform:translateX(-50%);width:-moz-max-content;width:max-content;max-width:calc(100vw - 24px);gap:5px;padding:7px;border-radius:999px}.batch-selection-summary[data-v-7445695a]{padding:0 1px}.batch-selection-count[data-v-7445695a]{min-width:18px;height:24px;padding:0 3px;font-size:13px}.batch-toolbar-divider[data-v-7445695a]{height:18px}.batch-floating-actions[data-v-7445695a]{flex:1;min-width:0;gap:5px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;padding:1px}.batch-floating-actions[data-v-7445695a]::-webkit-scrollbar{display:none}.batch-floating-btn[data-v-7445695a]{width:34px;height:34px;min-width:34px;padding:0;border-radius:50%}.batch-floating-icon[data-v-7445695a]{margin-right:0;width:14px}.batch-toolbar-enter-from[data-v-7445695a],.batch-toolbar-leave-to[data-v-7445695a]{transform:translateX(-50%) translateY(16px) scale(.98)}.batch-toolbar-enter-to[data-v-7445695a],.batch-toolbar-leave-from[data-v-7445695a]{transform:translateX(-50%) translateY(0) scale(1)}}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{overflow:auto;width:var(--el-aside-width,300px)}.el-aside,.el-footer{box-sizing:border-box;flex-shrink:0}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-header,.el-main{box-sizing:border-box}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination .btn-next,.el-pagination .btn-prev{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination .btn-next *,.el-pagination .btn-prev *{pointer-events:none}.el-pagination .btn-next:focus,.el-pagination .btn-prev:focus{outline:none}.el-pagination .btn-next:hover,.el-pagination .btn-prev:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-next.is-active,.el-pagination .btn-prev.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-next.is-active.is-disabled,.el-pagination .btn-prev.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-next.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-prev:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination .btn-next:focus-visible,.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.list-item[data-v-78d34f50]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:65px;padding:12px 20px;align-items:center;transition:background .2s ease;border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-item[data-v-78d34f50]:last-child{border-bottom:none}.list-item[data-v-78d34f50]:hover{background:var(--el-fill-color-light)}.list-col[data-v-78d34f50]{display:flex;align-items:center}.list-col-checkbox[data-v-78d34f50]{justify-content:center;min-width:40px}.list-col-preview[data-v-78d34f50]{justify-content:center;cursor:pointer}.list-col-name[data-v-78d34f50]{cursor:pointer;overflow:hidden;padding-right:16px;min-width:0}.list-col-name[data-v-78d34f50]:hover{color:#38bdf8}.filename-ellipsis[data-v-78d34f50]{display:flex;max-width:100%;overflow:hidden;align-items:center}.filename-start[data-v-78d34f50]{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filename-end[data-v-78d34f50]{flex-shrink:0;white-space:nowrap}.list-col-channel-name[data-v-78d34f50],.list-col-channel[data-v-78d34f50],.list-col-date[data-v-78d34f50],.list-col-size[data-v-78d34f50]{font-size:13px;color:var(--el-text-color-secondary)}.list-col-address[data-v-78d34f50]{font-size:13px}.address-box[data-v-78d34f50],.channel-name-box[data-v-78d34f50]{background:var(--el-fill-color-light);border:1px solid var(--el-border-color-lighter);border-radius:4px;padding:4px 8px;font-size:12px;color:var(--el-text-color-secondary);max-width:100%;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none}.address-box[data-v-78d34f50]{width:85px;font-family:Consolas,Monaco,monospace}.channel-name-box[data-v-78d34f50]{width:70px}.address-box[data-v-78d34f50]::-webkit-scrollbar,.channel-name-box[data-v-78d34f50]::-webkit-scrollbar{display:none}.list-col-tags[data-v-78d34f50]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden}.custom-checkbox[data-v-78d34f50]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-78d34f50]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-78d34f50]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-78d34f50]{font-size:10px;color:#fff}.color-tag[data-v-78d34f50]{padding:2px 8px;border-radius:10px;font-size:11px;color:#fff;white-space:nowrap;max-width:60px;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.2)}.color-tag-more[data-v-78d34f50]{min-width:30px;text-align:center}.list-empty[data-v-78d34f50]{color:var(--el-text-color-placeholder)}.list-col-actions[data-v-78d34f50]{display:flex;gap:8px;justify-content:flex-end}.list-preview-img[data-v-78d34f50]{width:40px;height:40px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.list-folder-icon[data-v-78d34f50]{font-size:28px;color:var(--el-color-primary)}.list-file-icon[data-v-78d34f50]{font-size:24px;color:var(--el-text-color-secondary)}.list-action-btn[data-v-78d34f50]{width:32px;height:32px;border:none;border-radius:8px;background:var(--el-fill-color);color:var(--el-text-color-regular);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.list-action-btn[data-v-78d34f50]:hover{background:#38bdf8;color:#fff}.list-action-danger[data-v-78d34f50]:hover{background:var(--el-color-danger)}@media (max-width:768px){.list-item[data-v-78d34f50]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-78d34f50],.list-col-channel-name[data-v-78d34f50],.list-col-channel[data-v-78d34f50],.list-col-date[data-v-78d34f50],.list-col-size[data-v-78d34f50],.list-col-tags[data-v-78d34f50]{display:none}.list-col-actions[data-v-78d34f50]{gap:4px}.list-action-btn[data-v-78d34f50]{width:28px;height:28px}.list-col-checkbox[data-v-78d34f50]{width:24px;min-width:24px}}.img-card[data-v-e367e94e]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-e367e94e] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-e367e94e] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-e367e94e]:hover{transform:scale(1.05)}.image-preview[data-v-e367e94e],.video-preview[data-v-e367e94e]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .4s ease,opacity .3s ease;filter:var(--image-preview-filter)}.video-preview[data-v-e367e94e]{cursor:pointer}.img-card:hover .file-icon[data-v-e367e94e],.img-card:hover .image-preview[data-v-e367e94e],.img-card:hover .video-preview[data-v-e367e94e]{transform:scale(1.03)}.image-preview[data-v-e367e94e]:hover{opacity:.8}.file-short-info[data-v-e367e94e]{position:absolute;z-index:10;top:3px;left:3px;display:flex;gap:5px;align-items:start}.success-tag[data-v-e367e94e]{background-color:rgba(34,139,34,.6);border:1px solid rgba(34,139,34,.7);border-radius:6px}.fail-tag[data-v-e367e94e],.success-tag[data-v-e367e94e]{color:hsla(0,0%,100%,.95);padding:3px 8px;font-size:11px;font-weight:500;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.fail-tag[data-v-e367e94e]{background-color:rgba(220,53,69,.6);border:1px solid rgba(220,53,69,.7);border-radius:6px}.primary-tag[data-v-e367e94e]{background-color:rgba(250,82,194,.6);color:hsla(0,0%,100%,.95);border:1px solid rgba(250,82,194,.7);padding:3px 8px;border-radius:6px;font-size:11px;font-weight:500;display:flex;align-items:center;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.file-preview[data-v-e367e94e]{display:flex;justify-content:center;align-items:center;width:100%;height:100%}.file-icon[data-v-e367e94e]{opacity:.6;font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.audio-icon[data-v-e367e94e]{color:var(--el-color-primary);opacity:.8}.audio-card-preview[data-v-e367e94e]{cursor:pointer}.card-bottom-overlay[data-v-e367e94e]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-e367e94e]{display:flex;align-items:center;justify-content:center}.file-name[data-v-e367e94e]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-e367e94e]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-e367e94e]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-e367e94e],.action-bar-right[data-v-e367e94e]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-e367e94e]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-e367e94e]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-e367e94e]:active{transform:scale(.95)}.action-btn-danger[data-v-e367e94e]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-e367e94e]{display:none!important}}@keyframes skeleton-shimmer-e367e94e{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-wrapper[data-v-e367e94e]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-e367e94e 1.5s ease-in-out infinite}.error-wrapper[data-v-e367e94e]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--skeleton-bg-color);cursor:pointer;gap:8px}.error-icon[data-v-e367e94e]{font-size:32px;color:var(--el-color-warning);opacity:.7}.error-text[data-v-e367e94e]{font-size:12px;color:var(--el-text-color-secondary)}.img-card[data-v-5f22ef48]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-5f22ef48] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-5f22ef48] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-5f22ef48]:hover{transform:scale(1.05)}.folder-card[data-v-5f22ef48]{cursor:pointer}.folder-icon[data-v-5f22ef48]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;color:var(--el-color-primary)}.folder-icon-svg[data-v-5f22ef48]{font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.img-card:hover .folder-icon-svg[data-v-5f22ef48]{transform:scale(1.03)}.card-bottom-overlay[data-v-5f22ef48]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-5f22ef48]{display:flex;align-items:center;justify-content:center}.file-name[data-v-5f22ef48]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-5f22ef48]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-5f22ef48]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-5f22ef48],.action-bar-right[data-v-5f22ef48]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-5f22ef48]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-5f22ef48]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-5f22ef48]:active{transform:scale(.95)}.action-btn-danger[data-v-5f22ef48]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-5f22ef48]{display:none!important}}@keyframes skeleton-shimmer-5060702c{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeleton-pulse-5060702c{0%,to{opacity:.4}50%{opacity:.8}}.skeleton-card[data-v-5060702c]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative}.skeleton-image[data-v-5060702c]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-info[data-v-5060702c]{position:absolute;bottom:0;left:0;right:0;padding:15px;background:linear-gradient(transparent,rgba(0,0,0,.5))}.skeleton-text[data-v-5060702c]{height:14px;width:60%;margin:0 auto;border-radius:4px;background:linear-gradient(90deg,hsla(0,0%,100%,.1) 25%,hsla(0,0%,100%,.25) 50%,hsla(0,0%,100%,.1) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-list-item[data-v-5060702c]{animation:skeleton-pulse-5060702c 1.5s ease-in-out infinite}.skeleton-checkbox[data-v-5060702c]{width:18px;height:18px;border-radius:4px;background:var(--skeleton-bg-color)}.skeleton-preview[data-v-5060702c]{width:40px;height:40px;border-radius:6px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-text-long[data-v-5060702c]{width:80%}.skeleton-text-long[data-v-5060702c],.skeleton-text-short[data-v-5060702c]{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-text-short[data-v-5060702c]{width:60px}.skeleton-text-tiny[data-v-5060702c]{height:14px;width:40px;border-radius:4px}.skeleton-tag[data-v-5060702c],.skeleton-text-tiny[data-v-5060702c]{background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-tag[data-v-5060702c]{height:20px;width:50px;border-radius:10px}.skeleton-actions[data-v-5060702c]{height:28px;width:80px;border-radius:6px;background:var(--skeleton-bg-color)}.list-item[data-v-5060702c]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.list-col[data-v-5060702c]{display:flex;align-items:center}.list-col-checkbox[data-v-5060702c],.list-col-preview[data-v-5060702c]{justify-content:center}@media (max-width:768px){.list-item[data-v-5060702c]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-5060702c],.list-col-channel-name[data-v-5060702c],.list-col-channel[data-v-5060702c],.list-col-date[data-v-5060702c],.list-col-size[data-v-5060702c],.list-col-tags[data-v-5060702c]{display:none}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-checkbox-group{font-size:0;line-height:0}.filter-dropdown[data-v-c3aeeea0]{flex-shrink:0}.filter-trigger[data-v-c3aeeea0]{cursor:pointer;display:flex;align-items:center}.header-icon[data-v-c3aeeea0]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-c3aeeea0]:hover{color:var(--admin-purple);transform:scale(1.2)}.filter-badge[data-v-c3aeeea0] .el-badge__content{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;font-size:10px;height:16px;line-height:16px;padding:0 5px}.filter-dropdown-menu[data-v-c3aeeea0]{padding:8px 0;min-width:180px;max-height:400px;overflow-y:auto}.filter-section[data-v-c3aeeea0]{padding:8px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.filter-section[data-v-c3aeeea0]:last-of-type{border-bottom:none}.filter-title[data-v-c3aeeea0]{font-size:12px;font-weight:600;color:var(--el-text-color-secondary);margin-bottom:6px}.filter-options[data-v-c3aeeea0],.filter-options[data-v-c3aeeea0] .el-checkbox-group{display:flex;flex-direction:column;gap:2px}.filter-options[data-v-c3aeeea0] .el-checkbox{margin-right:0;height:26px;padding:0 6px;border-radius:4px;transition:all .2s ease}.filter-options[data-v-c3aeeea0] .el-checkbox:hover{background:var(--el-fill-color-light)}.filter-options[data-v-c3aeeea0] .el-checkbox__label{font-size:13px;color:var(--el-text-color-primary)}.filter-options[data-v-c3aeeea0] .el-checkbox__input.is-checked+.el-checkbox__label{color:#0ea5e9}.channel-group-title[data-v-c3aeeea0]{font-size:11px;font-weight:600;color:var(--el-text-color-secondary);text-transform:uppercase;letter-spacing:.5px;padding:4px 6px;margin-top:4px;margin-bottom:2px}.channel-divider[data-v-c3aeeea0]{height:1px;background:var(--el-border-color-lighter);margin:6px 0}.filter-options[data-v-c3aeeea0] .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#0ea5e9;border-color:#0ea5e9}.filter-actions[data-v-c3aeeea0]{padding:10px 12px 6px;display:flex;justify-content:center}.filter-actions .el-button[data-v-c3aeeea0]{width:100%;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);color:var(--el-text-color-regular);border-radius:6px;transition:all .2s ease}.filter-actions .el-button[data-v-c3aeeea0]:hover:not(:disabled){background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8;color:#fff}.filter-actions .el-button[data-v-c3aeeea0]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.filter-dropdown-menu[data-v-c3aeeea0]{min-width:160px;max-height:320px}.filter-section[data-v-c3aeeea0]{padding:6px 10px}.filter-title[data-v-c3aeeea0]{font-size:11px;margin-bottom:4px}.filter-options[data-v-c3aeeea0] .el-checkbox{height:24px;padding:0 4px}.filter-options[data-v-c3aeeea0] .el-checkbox__label{font-size:12px}.header-icon[data-v-c3aeeea0]{font-size:1.2em}}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.tabs[data-v-4e00471a]{display:flex;align-items:center;justify-content:center;gap:8px}.title[data-v-4e00471a]{display:flex;align-items:center;gap:8px;font-size:1.1em;font-weight:700;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);padding:5px 12px;border-radius:10px;background:linear-gradient(135deg,rgba(99,102,241,.08),rgba(139,92,246,.05));border:1px solid rgba(99,102,241,.15)}.title[data-v-4e00471a]:hover{background:linear-gradient(135deg,rgba(99,102,241,.15),rgba(139,92,246,.1));border-color:rgba(99,102,241,.25);transform:translateY(-1px)}.title .fa-images[data-v-4e00471a]{font-size:1em;color:var(--el-color-primary);background:linear-gradient(135deg,#6366f1,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.tabs-dropdown[data-v-4e00471a]{display:flex;align-items:center}.tabs-dropdown-link[data-v-4e00471a]{cursor:pointer;font-size:1.3em;transition:all .3s ease;color:var(--admin-container-color);padding:5px 8px;border-radius:8px;background:transparent}.tabs-dropdown-link.rotate-up[data-v-4e00471a],.tabs-dropdown-link[data-v-4e00471a]:hover{background:rgba(99,102,241,.1);color:var(--el-color-primary)}@media (max-width:768px){.tabs[data-v-4e00471a]{gap:6px}.title[data-v-4e00471a]{font-size:1em;padding:3px 8px;gap:5px}.tabs-dropdown-link[data-v-4e00471a]{font-size:1.1em;padding:3px 6px}.tabs-language-switcher[data-v-4e00471a]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-4e00471a]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px}.el-dropdown__popper.el-popper.tabs-dropdown-popper{border-radius:12px;border:none;background-color:var(--tabs-dropdown-popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--tabs-dropdown-popper-shadow)}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu{border:none;background:none}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item{border:none;background:none;font-size:16px;font-weight:700;transition:font-size .3s ease}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item:hover{font-size:18px}.container[data-v-437b7a30]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0}[data-v-437b7a30] .el-container,[data-v-437b7a30] .el-main{overflow:visible}[data-v-437b7a30] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.header-content[data-v-437b7a30]{display:flex;justify-content:space-between;align-items:center;padding:10px 24px;background:hsla(0,0%,100%,.72);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid hsla(0,0%,100%,.3);border-top:1px solid hsla(0,0%,100%,.5);box-shadow:0 4px 30px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.05),inset 0 1px 0 hsla(0,0%,100%,.4);transition:all .4s cubic-bezier(.4,0,.2,1);border-radius:16px;position:fixed;top:8px;left:50%;transform:translateX(-50%);width:calc(95% - 16px);z-index:2001;min-height:45px}html.dark .header-content[data-v-437b7a30]{background:rgba(30,30,30,.75);border:1px solid hsla(0,0%,100%,.08);border-top:1px solid hsla(0,0%,100%,.12);box-shadow:0 4px 30px rgba(0,0,0,.3),0 1px 3px rgba(0,0,0,.2),inset 0 1px 0 hsla(0,0%,100%,.05)}@media (max-width:768px){.header-content[data-v-437b7a30]{flex-direction:column;top:6px;width:calc(100% - 32px);border-radius:14px;padding:6px 12px;gap:4px}.header-icon[data-v-437b7a30]{font-size:.95em}.header-content .actions[data-v-437b7a30]{gap:10px}.search-card[data-v-437b7a30] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-437b7a30] .el-input__wrapper{padding:0 10px}.search-card[data-v-437b7a30] .el-input__inner:focus{width:65vw}}.header-content[data-v-437b7a30]:hover{background:hsla(0,0%,100%,.82);box-shadow:0 8px 40px rgba(0,0,0,.12),0 2px 6px rgba(0,0,0,.08),inset 0 1px 0 hsla(0,0%,100%,.5);transform:translateX(-50%) translateY(-1px)}html.dark .header-content[data-v-437b7a30]:hover{background:rgba(35,35,35,.85);box-shadow:0 8px 40px rgba(0,0,0,.4),0 2px 6px rgba(0,0,0,.3),inset 0 1px 0 hsla(0,0%,100%,.08)}.header-icon[data-v-437b7a30]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-437b7a30]:hover{color:var(--admin-purple);transform:scale(1.2)}.breadcrumb-container[data-v-437b7a30]{display:flex;align-items:center;justify-content:flex-start;gap:12px;padding:0 10px;margin-top:12px;margin-bottom:4px}.breadcrumb-select-button[data-v-437b7a30]{width:32px;height:32px;box-sizing:border-box;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--el-border-color-lighter);border-radius:6px;color:#38bdf8;background:var(--el-fill-color-light);box-shadow:var(--admin-dashboard-stats-shadow);cursor:pointer;transition:transform .2s ease,color .2s ease,background-color .2s ease,box-shadow .2s ease}.breadcrumb-select-button[data-v-437b7a30]:hover{color:var(--admin-purple);transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-select-icon[data-v-437b7a30]{font-size:14px}@media (max-width:768px){.breadcrumb-container[data-v-437b7a30]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-top:8px;margin-bottom:2px}.breadcrumb-select-button[data-v-437b7a30]{width:28px;height:28px;box-sizing:border-box;border-radius:8px}.breadcrumb-select-icon[data-v-437b7a30]{font-size:12px}}.stats-badge[data-v-437b7a30]{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;color:var(--el-text-color-secondary);background:var(--el-fill-color-light);padding:4px 10px;border-radius:12px;border:1px solid var(--el-border-color-lighter);transition:all .2s ease;white-space:nowrap;flex-shrink:0;margin-left:auto}.stats-badge[data-v-437b7a30]:hover{background:var(--el-fill-color);color:var(--admin-purple);border-color:var(--admin-purple)}.stats-badge-icon[data-v-437b7a30]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-437b7a30]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-437b7a30]{font-size:9px}}.header-content .actions[data-v-437b7a30]{display:flex;align-items:center;gap:15px}@media (max-width:768px){.header-content .actions[data-v-437b7a30]{margin-top:10px}}.header-content .actions i[data-v-437b7a30]{font-size:1.5em;cursor:pointer;transition:color .3s,transform .3s;color:var(--admin-container-color)}.header-content .actions i[data-v-437b7a30]:hover{color:var(--admin-purple);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-437b7a30]{color:var(--admin-container-color)}.header-content .actions .el-dropdown-link i[data-v-437b7a30]:hover{color:var(--admin-purple)}.header-content .actions .disabled[data-v-437b7a30]{color:#bbb;pointer-events:none}.header-content .actions .enabled[data-v-437b7a30]{color:var(--admin-purple)}.search-area[data-v-437b7a30]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-437b7a30]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-437b7a30]{display:flex;align-items:center}.search-card[data-v-437b7a30] .el-input__wrapper{border-radius:20px;background:var(--admin-dashboard-search-card-bg-color);box-shadow:var(--admin-dashboard-search-card-box-shadow);transition:background-color .3s}.search-card[data-v-437b7a30] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-437b7a30] .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;-moz-transition:all .3s ease;transition:all .3s ease}.search-card[data-v-437b7a30] .el-input__inner::placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;transition:all .3s ease}.search-card[data-v-437b7a30] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-437b7a30] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-437b7a30] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-437b7a30] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-437b7a30] .el-input__inner:focus{width:55vw}}.search-icon[data-v-437b7a30]{cursor:pointer;color:var(--admin-container-color);transition:all .3s ease;font-size:1.3em;opacity:0;transform:scale(.8);pointer-events:none}.search-card:focus-within .search-icon[data-v-437b7a30]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-437b7a30]:hover{color:var(--admin-purple);transform:scale(1.2)}.search-card[data-v-437b7a30] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-437b7a30]{display:flex;flex-direction:column;padding:20px 60px;min-height:calc(100vh - 80px);transition:padding-bottom .24s ease}.main-container.has-batch-toolbar[data-v-437b7a30]{padding-bottom:72px}@media (max-width:768px){.main-container[data-v-437b7a30]{margin-top:12vh}.main-container.has-batch-toolbar[data-v-437b7a30]{padding-bottom:86px}}.content[data-v-437b7a30]{display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(3,1fr);gap:20px;padding:10px;padding-bottom:0;flex-grow:1;min-height:80vh}.content.is-drag-selecting[data-v-437b7a30],.list-view.is-drag-selecting[data-v-437b7a30]{cursor:crosshair}.content.is-drag-selecting[data-v-437b7a30] .img-card:hover,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .file-icon,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .folder-icon-svg,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .image-preview,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .video-preview{transform:none}.content.is-drag-selecting[data-v-437b7a30] .image-preview:hover{opacity:1}.content.is-drag-selecting[data-v-437b7a30] .action-btn:hover{transform:none;background:hsla(0,0%,100%,.15)}.list-view.is-drag-selecting[data-v-437b7a30] .list-item:hover{background:transparent}.list-view.is-drag-selecting[data-v-437b7a30] .list-action-btn:hover{color:var(--el-text-color-regular);background:var(--el-fill-color)}.list-view.is-drag-selecting[data-v-437b7a30] .list-action-danger:hover{background:var(--el-fill-color)}.empty-state[data-v-437b7a30]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--admin-container-color);opacity:.6}.empty-icon[data-v-437b7a30]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-437b7a30]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-437b7a30]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-437b7a30]{padding:80px 20px}@media (max-width:768px){.content[data-v-437b7a30]{grid-template-columns:1fr;grid-template-rows:none}}.list-view[data-v-437b7a30]{display:flex;flex-direction:column;gap:0;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;overflow-x:auto;overflow-y:visible;box-shadow:var(--admin-dashboard-imgcard-shadow);margin-top:15px}.list-header[data-v-437b7a30]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;background:var(--admin-dashboard-stats-bg);font-weight:600;font-size:13px;color:var(--el-text-color-secondary);border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-col[data-v-437b7a30]{display:flex;align-items:center}.list-col-checkbox[data-v-437b7a30]{justify-content:center;min-width:40px}.custom-checkbox[data-v-437b7a30]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-437b7a30]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-437b7a30],.custom-checkbox.indeterminate[data-v-437b7a30]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-437b7a30]{font-size:10px;color:#fff}@media (max-width:768px){.list-header[data-v-437b7a30]{display:none}}.pagination-container[data-v-437b7a30]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-437b7a30]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-437b7a30] .el-pagination{--el-pagination-button-bg-color:var(--admin-dashboard-btn-bg-color);--el-pagination-hover-color:var(--admin-purple)}.pagination-container[data-v-437b7a30] .el-pager li{background:var(--admin-dashboard-btn-bg-color);border-radius:10px;margin:0 4px;min-width:36px;height:36px;line-height:36px;font-weight:500;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-437b7a30] .el-pager li:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-container[data-v-437b7a30] .el-pager li.is-active{background:linear-gradient(135deg,#0ea5e9,#38bdf8)!important;color:#fff!important;border-radius:10px;box-shadow:var(--admin-dashboard-btn-shadow),0 4px 12px rgba(56,189,248,.3),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-437b7a30] .el-pager li.is-active:hover{transform:translateY(-2px)!important;box-shadow:var(--admin-dashboard-btn-hover-shadow),0 6px 16px rgba(56,189,248,.4),inset 0 1px 0 hsla(0,0%,100%,.2)!important}.pagination-container[data-v-437b7a30] .btn-next,.pagination-container[data-v-437b7a30] .btn-prev{background:var(--admin-dashboard-btn-bg-color)!important;border-radius:10px!important;min-width:36px;height:36px;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-437b7a30] .btn-next:hover,.pagination-container[data-v-437b7a30] .btn-prev:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-right[data-v-437b7a30]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-total[data-v-437b7a30]{font-size:13px;color:var(--el-text-color-secondary);white-space:nowrap}.page-jump[data-v-437b7a30]{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--el-text-color-secondary)}.page-jump .jump-input[data-v-437b7a30]{width:50px}.page-jump .jump-input[data-v-437b7a30] .el-input__wrapper{background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);border-radius:8px;padding:0 8px;height:28px}.page-jump .jump-input[data-v-437b7a30] .el-input__inner{text-align:center;color:var(--el-text-color-primary);height:28px;line-height:28px}.page-jump .jump-btn[data-v-437b7a30]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;border-radius:8px;padding:0 12px;height:28px;font-size:12px;font-weight:600;color:#fff;box-shadow:0 2px 8px rgba(56,189,248,.3);transition:all .3s ease}.page-jump .jump-btn[data-v-437b7a30]:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(56,189,248,.4)}@media (max-width:768px){.pagination-container[data-v-437b7a30]{flex-direction:column;gap:12px;padding-bottom:15px}.pagination-center[data-v-437b7a30]{order:0}.pagination-right[data-v-437b7a30]{position:static;width:100%;justify-content:center;order:1}.page-jump .jump-input[data-v-437b7a30]{width:45px}}.refresh-btn[data-v-437b7a30]{cursor:pointer;background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);color:#38bdf8;border:none;border-radius:10px;width:36px;height:36px;min-width:36px;padding:0;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .3s cubic-bezier(.4,0,.2,1)}.refresh-btn[data-v-437b7a30]:hover{transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow);background:linear-gradient(135deg,#0ea5e9,#38bdf8);color:#fff}.load-more[data-v-437b7a30]{cursor:pointer;background:linear-gradient(135deg,#0ea5e9,#38bdf8);box-shadow:0 4px 15px rgba(56,189,248,.3);color:#fff;border:none;border-radius:10px;height:36px;padding:0 16px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.load-more[data-v-437b7a30]:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(56,189,248,.5)}[data-v-437b7a30] .btn-prev{left:8px}[data-v-437b7a30] .btn-next,[data-v-437b7a30] .btn-prev{border-radius:100%;position:fixed;top:50%;scale:1;color:var(--admin-dashboard-btn-color)}[data-v-437b7a30] .btn-next{right:8px}@media (min-width:768px){[data-v-437b7a30] .el-pagination.is-background .btn-next,[data-v-437b7a30] .el-pagination.is-background .btn-prev{background-color:var(--admin-dashboard-btn-bg-color);backdrop-filter:blur(10px);box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s ease}[data-v-437b7a30] .el-pagination.is-background .btn-next:hover,[data-v-437b7a30] .el-pagination.is-background .btn-prev:hover{transform:translateY(-10%);box-shadow:var(--admin-dashboard-btn-hover-shadow)}}.question-icon[data-v-437b7a30]{margin:0 3px}.breadcrumb[data-v-437b7a30]{height:32px;box-sizing:border-box;display:flex;align-items:center;padding:0 12px;background-color:var(--el-fill-color-light);border-radius:6px;font-size:.95em;box-shadow:var(--admin-dashboard-stats-shadow);transition:all .3s ease}.breadcrumb[data-v-437b7a30]:hover{transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-home-icon[data-v-437b7a30]{font-size:14px;color:#38bdf8;transition:color .2s ease}.breadcrumb-home-icon[data-v-437b7a30]:hover{color:var(--admin-purple)}[data-v-437b7a30] .el-breadcrumb__item{cursor:pointer}[data-v-437b7a30] .el-breadcrumb,[data-v-437b7a30] .el-breadcrumb__inner,[data-v-437b7a30] .el-breadcrumb__item,[data-v-437b7a30] .el-breadcrumb__separator{display:inline-flex;align-items:center;height:100%;line-height:32px}[data-v-437b7a30] .el-breadcrumb__inner:hover{color:var(--el-color-primary)}.mobile-directory-trigger[data-v-437b7a30]{display:none;align-items:center;height:28px;box-sizing:border-box;gap:6px;padding:0 10px;background:var(--el-fill-color-light);border-radius:8px;border:1px solid var(--el-border-color-lighter);cursor:pointer;transition:all .2s ease}.mobile-directory-trigger[data-v-437b7a30]:active{background:var(--el-fill-color)}.mobile-directory-icon[data-v-437b7a30]{font-size:12px;color:#38bdf8}.mobile-directory-path[data-v-437b7a30]{display:inline-flex;align-items:center;height:100%;font-size:12px;font-weight:500;line-height:1;color:var(--el-text-color-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-437b7a30]{font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-437b7a30]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-437b7a30]{display:flex}.desktop-only[data-v-437b7a30]{display:none!important}.breadcrumb-container[data-v-437b7a30]{padding:0;margin-left:0}}.drag-select-overlay[data-v-437b7a30]{position:fixed;background:rgba(24,144,255,.1);border:1px solid rgba(24,144,255,.6);pointer-events:none;z-index:9999;border-radius:2px} \ No newline at end of file diff --git a/frontend-dist/css/770.37d2e9e0.css.gz b/frontend-dist/css/770.37d2e9e0.css.gz deleted file mode 100644 index 3f1e1f86..00000000 Binary files a/frontend-dist/css/770.37d2e9e0.css.gz and /dev/null differ diff --git a/frontend-dist/css/833.95983fa6.css b/frontend-dist/css/833.95983fa6.css deleted file mode 100644 index 3ebaf3c1..00000000 --- a/frontend-dist/css/833.95983fa6.css +++ /dev/null @@ -1 +0,0 @@ -.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;user-select:none}.el-table__expand-icon{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:23px;line-height:12px;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out;width:min(23px,100%)}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-flex;flex-direction:column;height:14px;margin:0;outline:none;overflow:initial;padding:0;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out;vertical-align:middle;width:24px}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-block;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;text-align:center;width:20px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.tabs[data-v-4e00471a]{display:flex;align-items:center;justify-content:center;gap:8px}.title[data-v-4e00471a]{display:flex;align-items:center;gap:8px;font-size:1.1em;font-weight:700;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);padding:5px 12px;border-radius:10px;background:linear-gradient(135deg,rgba(99,102,241,.08),rgba(139,92,246,.05));border:1px solid rgba(99,102,241,.15)}.title[data-v-4e00471a]:hover{background:linear-gradient(135deg,rgba(99,102,241,.15),rgba(139,92,246,.1));border-color:rgba(99,102,241,.25);transform:translateY(-1px)}.title .fa-images[data-v-4e00471a]{font-size:1em;color:var(--el-color-primary);background:linear-gradient(135deg,#6366f1,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.tabs-dropdown[data-v-4e00471a]{display:flex;align-items:center}.tabs-dropdown-link[data-v-4e00471a]{cursor:pointer;font-size:1.3em;transition:all .3s ease;color:var(--admin-container-color);padding:5px 8px;border-radius:8px;background:transparent}.tabs-dropdown-link.rotate-up[data-v-4e00471a],.tabs-dropdown-link[data-v-4e00471a]:hover{background:rgba(99,102,241,.1);color:var(--el-color-primary)}@media (max-width:768px){.tabs[data-v-4e00471a]{gap:6px}.title[data-v-4e00471a]{font-size:1em;padding:3px 8px;gap:5px}.tabs-dropdown-link[data-v-4e00471a]{font-size:1.1em;padding:3px 6px}.tabs-language-switcher[data-v-4e00471a]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-4e00471a]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;outline:none;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;outline:none;padding:0 10px}.el-table-filter__list-item:focus,.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);margin:0;outline:none;padding:0 3px;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-dropdown__popper.el-popper.tabs-dropdown-popper{border-radius:12px;border:none;background-color:var(--tabs-dropdown-popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--tabs-dropdown-popper-shadow)}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu{border:none;background:none}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item{border:none;background:none;font-size:16px;font-weight:700;transition:font-size .3s ease}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item:hover{font-size:18px} \ No newline at end of file diff --git a/frontend-dist/css/833.95983fa6.css.gz b/frontend-dist/css/833.95983fa6.css.gz deleted file mode 100644 index 74901a97..00000000 Binary files a/frontend-dist/css/833.95983fa6.css.gz and /dev/null differ diff --git a/frontend-dist/css/915.52b943c1.css b/frontend-dist/css/915.52b943c1.css new file mode 100644 index 00000000..5536d9dd --- /dev/null +++ b/frontend-dist/css/915.52b943c1.css @@ -0,0 +1 @@ +.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;user-select:none}.el-table__expand-icon{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:23px;line-height:12px;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out;width:min(23px,100%)}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-flex;flex-direction:column;height:14px;margin:0;outline:none;overflow:initial;padding:0;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out;vertical-align:middle;width:24px}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);cursor:pointer;display:inline-block;margin:0;outline:none;padding:0;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;text-align:center;width:20px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;outline:none;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;outline:none;padding:0 10px}.el-table-filter__list-item:focus,.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__multiple{outline:none}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{appearance:none;background-color:transparent;border:none;border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);margin:0;outline:none;padding:0 3px;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.tabs[data-v-74e008d5]{display:flex;align-items:center;justify-content:center;gap:8px}.page-switcher[data-v-74e008d5]{position:relative;display:flex;align-items:center}.title[data-v-74e008d5]{display:flex;align-items:center;gap:8px;font-size:1.1em;font-weight:700;cursor:pointer;transition:background-color .24s ease,border-color .24s ease,transform .24s ease;color:var(--admin-container-color);padding:9px 14px;border-radius:10px;background-color:transparent;border:1px solid transparent;font-family:inherit}.page-switcher.is-open .title[data-v-74e008d5],.title[data-v-74e008d5]:hover{background-color:var(--tabs-switcher-hover-bg);border-color:var(--tabs-switcher-hover-border-color);transform:translateY(-1px)}.title .fa-images[data-v-74e008d5]{font-size:1em;color:var(--el-color-primary)}.page-switcher-trigger[data-v-74e008d5]{-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;white-space:nowrap}.page-switcher-title[data-v-74e008d5]{line-height:1}.page-switcher-arrow[data-v-74e008d5]{font-size:.75em;color:var(--el-color-primary);transition:transform .22s ease}.page-switcher.is-open .page-switcher-arrow[data-v-74e008d5]{transform:rotate(180deg)}.page-options[data-v-74e008d5]{position:absolute;top:calc(100% + 8px);left:0;z-index:1200;display:flex;flex-direction:column;align-items:stretch;gap:3px;min-width:168px;padding:6px;border:1px solid var(--tabs-switcher-border-color);border-radius:14px;background:var(--tabs-dropdown-popper-bg-color);box-shadow:var(--tabs-dropdown-popper-shadow);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);opacity:0;visibility:hidden;transform:translateY(-4px) scale(.98);transform-origin:top left;pointer-events:none;transition:opacity .18s ease,transform .22s ease,visibility .18s ease}.page-options[data-v-74e008d5]:before{content:"";position:absolute;left:0;right:0;top:-8px;height:8px}.page-switcher.is-open .page-options[data-v-74e008d5]{opacity:1;visibility:visible;transform:translateY(0) scale(1);pointer-events:auto}@media (hover:hover) and (pointer:fine){.page-switcher:hover .page-switcher-arrow[data-v-74e008d5]{transform:rotate(180deg)}.page-switcher:hover .page-options[data-v-74e008d5]{opacity:1;visibility:visible;transform:translateY(0) scale(1);pointer-events:auto}}.page-option[data-v-74e008d5]{display:inline-flex;align-items:center;gap:7px;width:100%;height:34px;padding:0 12px;border:none;border-radius:10px;color:var(--admin-container-color);background:transparent;font-size:14px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:background-color .18s ease,color .18s ease}.page-option.is-active[data-v-74e008d5],.page-option[data-v-74e008d5]:hover{color:var(--el-color-primary);background-color:var(--tabs-switcher-hover-bg)}.page-option-icon[data-v-74e008d5]{width:15px;color:var(--el-color-primary)}@media (max-width:768px){.tabs[data-v-74e008d5]{gap:6px}.title[data-v-74e008d5]{font-size:1em;padding:7px 10px;gap:5px}.page-switcher-title[data-v-74e008d5]{max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-options[data-v-74e008d5]{top:calc(100% + 6px);left:50%;width:min(220px,calc(100vw - 24px));min-width:0;max-width:calc(100vw - 24px);gap:3px;padding:6px;transform:translate(-50%,-4px) scale(.98);transform-origin:top center}.page-options[data-v-74e008d5]:before{top:-6px;height:6px}.page-switcher.is-open .page-options[data-v-74e008d5]{transform:translate(-50%) scale(1)}.page-option[data-v-74e008d5]{justify-content:flex-start;height:32px;padding:0 10px;font-size:12px;gap:6px}.tabs-language-switcher[data-v-74e008d5]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-74e008d5]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px} \ No newline at end of file diff --git a/frontend-dist/css/915.52b943c1.css.gz b/frontend-dist/css/915.52b943c1.css.gz new file mode 100644 index 00000000..93571e43 Binary files /dev/null and b/frontend-dist/css/915.52b943c1.css.gz differ diff --git a/frontend-dist/css/997.87fa4059.css b/frontend-dist/css/997.87fa4059.css new file mode 100644 index 00000000..860bf7eb --- /dev/null +++ b/frontend-dist/css/997.87fa4059.css @@ -0,0 +1 @@ +.move-dialog-content[data-v-7aaa437c]{padding:0 10px}.move-path-input-container[data-v-7aaa437c]{display:flex;align-items:center;gap:10px}.move-path-input[data-v-7aaa437c]{flex:1}.directory-picker-trigger[data-v-7aaa437c]{flex-shrink:0}.move-dialog-hint[data-v-7aaa437c]{margin-top:12px;font-size:12px;color:var(--el-text-color-secondary)}.move-drawer-content[data-v-7aaa437c]{padding:16px}.move-path-section[data-v-7aaa437c]{margin-bottom:16px}.move-path-label[data-v-7aaa437c]{font-size:14px;font-weight:500;margin-bottom:8px;color:var(--el-text-color-primary)}.move-path-input-row[data-v-7aaa437c]{display:flex;align-items:center;gap:10px}.embedded-tree-section[data-v-7aaa437c]{margin-top:16px;border:1px solid var(--el-border-color-lighter);border-radius:8px;overflow:hidden}.tree-section-header[data-v-7aaa437c]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-lighter)}.tree-section-title[data-v-7aaa437c]{font-size:14px;font-weight:500}.tree-container[data-v-7aaa437c]{min-height:200px;max-height:300px;overflow-y:auto;padding:8px}.directory-tree[data-v-7aaa437c]{background:transparent}.directory-tree[data-v-7aaa437c] .el-tree-node__content{height:44px;padding:0 8px;border-radius:8px}.tree-node[data-v-7aaa437c]{display:flex;align-items:center;gap:8px;padding:4px 0;width:100%}.tree-node.is-current[data-v-7aaa437c]{color:var(--el-color-primary);font-weight:500}.folder-icon[data-v-7aaa437c]{color:var(--el-color-warning);font-size:16px}.node-label[data-v-7aaa437c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.error-state[data-v-7aaa437c]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 20px;text-align:center}.error-icon[data-v-7aaa437c]{font-size:32px;color:var(--el-color-danger)}.error-text[data-v-7aaa437c]{color:var(--el-text-color-secondary);font-size:14px}.drawer-footer[data-v-7aaa437c]{display:flex;gap:12px;padding:0 16px 16px}.footer-btn[data-v-7aaa437c]{flex:1}.move-dialog .el-dialog__body{padding:20px}.move-drawer{border-radius:16px 16px 0 0!important}.move-drawer .el-drawer__header{margin-bottom:0;padding:16px 20px;border-bottom:1px solid var(--el-border-color-lighter)}.move-drawer .el-drawer__body,.move-drawer .el-drawer__footer{padding:0}.mobile-drawer-overlay[data-v-768efd1f]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);z-index:2000;backdrop-filter:blur(4px)}.mobile-drawer[data-v-768efd1f]{position:absolute;top:22vh;left:8px;bottom:8px;width:280px;max-width:calc(85vw - 16px);background:var(--el-bg-color);border-radius:16px;box-shadow:0 8px 32px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);display:flex;flex-direction:column;overflow:hidden}html.dark .mobile-drawer[data-v-768efd1f]{background:rgba(40,40,45,.98);box-shadow:0 8px 32px rgba(0,0,0,.4),0 2px 8px rgba(0,0,0,.3)}.mobile-drawer-header[data-v-768efd1f]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:linear-gradient(135deg,rgba(56,189,248,.12),rgba(14,165,233,.08));border-bottom:1px solid var(--el-border-color-lighter)}.mobile-drawer-title[data-v-768efd1f]{font-size:15px;font-weight:600;color:#38bdf8;display:flex;align-items:center;gap:8px}.mobile-drawer-title[data-v-768efd1f]:before{content:"";display:inline-block;width:4px;height:16px;background:linear-gradient(180deg,#38bdf8,rgba(14,165,233,.5));border-radius:2px}.mobile-drawer-close[data-v-768efd1f]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--el-text-color-secondary);cursor:pointer;border-radius:8px;transition:all .2s ease;background:transparent}.mobile-drawer-close[data-v-768efd1f]:active{background:var(--el-fill-color);color:var(--el-text-color-primary)}.mobile-drawer-content[data-v-768efd1f]{flex:1;overflow-y:auto;padding:8px}.mobile-drawer-item[data-v-768efd1f]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:2px 0;cursor:pointer;transition:all .2s ease;color:var(--el-text-color-primary);border-radius:10px;font-size:14px}.mobile-drawer-item[data-v-768efd1f]:active{background:var(--el-fill-color-light);transform:scale(.98)}.mobile-drawer-item.active[data-v-768efd1f]{background:linear-gradient(135deg,rgba(56,189,248,.2),rgba(14,165,233,.12));color:#38bdf8;font-weight:600}.mobile-drawer-item-icon[data-v-768efd1f]{font-size:18px;width:24px;text-align:center;opacity:.7}.mobile-drawer-item.active .mobile-drawer-item-icon[data-v-768efd1f]{opacity:1;color:#38bdf8}.mobile-drawer-back[data-v-768efd1f]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:8px 8px;border-radius:10px;background:var(--el-fill-color-lighter);cursor:pointer;transition:all .2s ease;color:var(--el-text-color-secondary);font-size:14px}.mobile-drawer-back[data-v-768efd1f]:active{background:var(--el-fill-color);color:var(--el-text-color-primary);transform:scale(.98)}.drawer-slide-enter-active[data-v-768efd1f]{transition:opacity .3s ease}.drawer-slide-leave-active[data-v-768efd1f]{transition:opacity .2s ease}.drawer-slide-enter-active .mobile-drawer[data-v-768efd1f]{animation:slideInLeft-768efd1f .3s ease-out}.drawer-slide-leave-active .mobile-drawer[data-v-768efd1f]{animation:slideOutLeft-768efd1f .2s ease-in}.drawer-slide-enter-from[data-v-768efd1f],.drawer-slide-leave-to[data-v-768efd1f]{opacity:0}@keyframes slideInLeft-768efd1f{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slideOutLeft-768efd1f{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.bottom-sheet-overlay[data-v-62bb601c]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:9999;display:flex;align-items:flex-end;justify-content:center}.bottom-sheet[data-v-62bb601c]{width:100%;max-width:100%;background:var(--bottom-sheet-bg,hsla(0,0%,100%,.95));backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:20px 20px 0 0;max-height:70vh;overflow:hidden;box-shadow:0 -4px 30px rgba(0,0,0,.15);border-top:1px solid var(--bottom-sheet-border,rgba(0,0,0,.05))}html.dark .bottom-sheet[data-v-62bb601c]{--bottom-sheet-bg:rgba(40,44,52,.95);--bottom-sheet-border:hsla(0,0%,100%,.1);box-shadow:0 -4px 30px rgba(0,0,0,.4)}.bottom-sheet-header[data-v-62bb601c]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px 20px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.bottom-sheet-handle[data-v-62bb601c]{width:40px;height:4px;background:var(--el-border-color);border-radius:2px}.bottom-sheet-title[data-v-62bb601c]{font-size:16px;font-weight:600;color:var(--el-text-color-primary);text-align:center;max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.dark .bottom-sheet-title[data-v-62bb601c]{color:#f0f0f0}.bottom-sheet-content[data-v-62bb601c]{padding:12px 16px;padding-bottom:calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px}.bottom-sheet-item[data-v-62bb601c]{display:flex;align-items:center;gap:16px;padding:16px 20px;border-radius:14px;cursor:pointer;transition:all .2s ease;background:var(--bottom-sheet-item-bg,rgba(0,0,0,.04));color:var(--el-text-color-primary)}html.dark .bottom-sheet-item[data-v-62bb601c]{--bottom-sheet-item-bg:hsla(0,0%,100%,.08)}.bottom-sheet-item[data-v-62bb601c]:active{transform:scale(.98);background:var(--bottom-sheet-item-active-bg,rgba(0,0,0,.08))}html.dark .bottom-sheet-item[data-v-62bb601c]:active{--bottom-sheet-item-active-bg:hsla(0,0%,100%,.15)}.bottom-sheet-icon[data-v-62bb601c]{font-size:20px;width:28px;text-align:center;color:#38bdf8}.bottom-sheet-danger .bottom-sheet-icon[data-v-62bb601c],.bottom-sheet-danger[data-v-62bb601c]{color:var(--el-color-danger)}.bottom-sheet-enter-active[data-v-62bb601c]{transition:all .3s ease-out}.bottom-sheet-leave-active[data-v-62bb601c]{transition:all .2s ease-in}.bottom-sheet-enter-active .bottom-sheet[data-v-62bb601c]{animation:slideUp-62bb601c .3s ease-out}.bottom-sheet-leave-active .bottom-sheet[data-v-62bb601c]{animation:slideDown-62bb601c .2s ease-in}.bottom-sheet-enter-from[data-v-62bb601c],.bottom-sheet-leave-to[data-v-62bb601c]{opacity:0}.bottom-sheet-enter-from .bottom-sheet[data-v-62bb601c],.bottom-sheet-leave-to .bottom-sheet[data-v-62bb601c]{transform:translateY(100%)}@keyframes slideUp-62bb601c{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown-62bb601c{0%{transform:translateY(0)}to{transform:translateY(100%)}}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-bottom:after{bottom:auto;top:0}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translateX(100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translateX(-100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(-100%);transform-origin:0 0}}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color)}.el-alert--primary.is-light,.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.batch-tag-container[data-v-ec3adcfc]{padding:0}.tab-content[data-v-ec3adcfc]{padding:20px}.tab-description[data-v-ec3adcfc]{margin:0 0 15px 0;color:#606266;font-size:14px}.input-section[data-v-ec3adcfc]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-ec3adcfc]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-ec3adcfc]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-ec3adcfc]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.common-tags-section[data-v-ec3adcfc],.tags-to-add-section[data-v-ec3adcfc]{margin-bottom:20px}.common-tags-section h4[data-v-ec3adcfc],.tags-to-add-section h4[data-v-ec3adcfc]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-ec3adcfc]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-ec3adcfc]{cursor:default}.empty-message[data-v-ec3adcfc]{color:#909399;font-size:13px;padding:10px 0}.action-buttons[data-v-ec3adcfc]{margin-top:20px;display:flex;justify-content:flex-end}.tag-management-container[data-v-689f94e2]{padding:10px 0}.input-section[data-v-689f94e2]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-689f94e2]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-689f94e2]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-689f94e2]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.current-tags-section[data-v-689f94e2],.popular-tags-section[data-v-689f94e2]{margin-bottom:20px}.current-tags-section h4[data-v-689f94e2],.popular-tags-section h4[data-v-689f94e2]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-689f94e2]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-689f94e2]{cursor:default}.tag-item.clickable[data-v-689f94e2]{cursor:pointer;transition:transform .2s}.tag-item.clickable[data-v-689f94e2]:hover{transform:translateY(-2px)}.empty-message[data-v-689f94e2]{color:#909399;font-size:13px;padding:10px 0}.dialog-footer[data-v-689f94e2]{display:flex;justify-content:flex-end}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start;text-align:left}.el-form-item--label-right .el-form-item__label{justify-content:flex-end;text-align:right}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;padding-right:0;text-align:left;width:fit-content}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.detail-actions[data-v-3f80812c]{display:flex;justify-content:right;margin-bottom:10px;flex-wrap:wrap;gap:8px}.detail-action[data-v-3f80812c]{margin-left:0!important}.video-preview[data-v-3f80812c]{max-height:300px;cursor:pointer;-o-object-fit:contain;object-fit:contain}.audio-preview[data-v-3f80812c],.video-preview[data-v-3f80812c]{width:100%;max-width:400px;border-radius:8px}.image-preview[data-v-3f80812c]{width:auto;height:auto;max-width:100%;max-height:300px;border-radius:8px;cursor:pointer}.image-preview[data-v-3f80812c] img{max-width:100%;max-height:300px;-o-object-fit:contain;object-fit:contain}.file-icon-detail[data-v-3f80812c]{font-size:64px;color:var(--el-text-color-secondary)}.preview-section[data-v-3f80812c]{display:flex;justify-content:center;margin-bottom:15px;padding:12px;background:var(--el-fill-color-light);border-radius:8px;min-height:60px}.preview-content[data-v-3f80812c]{display:flex;justify-content:center;align-items:center;width:100%}[data-v-3f80812c] .el-descriptions__content{word-break:break-all;word-wrap:break-word}[data-v-3f80812c] .el-descriptions__content .el-tag,[data-v-3f80812c] .el-descriptions__content .el-tag+span{vertical-align:middle}[data-v-3f80812c] .el-descriptions__label{width:120px!important;min-width:100px!important;max-width:120px!important}[data-v-3f80812c] .el-descriptions__body table{table-layout:fixed}@media (max-width:768px){.detail-actions[data-v-3f80812c]{justify-content:center}}.batch-floating-bar[data-v-4937e2f0]{position:fixed;left:50%;bottom:max(84px,calc(72px + env(safe-area-inset-bottom)));transform:translateX(-50%);z-index:1200;display:flex;align-items:center;gap:6px;max-width:min(720px,calc(100vw - 48px));padding:6px;border:1px solid var(--admin-batch-toolbar-border);border-radius:999px;background:var(--admin-batch-toolbar-bg);box-shadow:var(--admin-batch-toolbar-shadow);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.batch-selection-summary[data-v-4937e2f0]{display:flex;align-items:center;flex:0 0 auto;padding:0 2px}.batch-selection-count[data-v-4937e2f0]{min-width:18px;height:26px;display:inline-flex;align-items:center;justify-content:center;padding:0 4px;color:var(--admin-batch-clear-color);font-size:14px;font-weight:600;line-height:1}.batch-toolbar-divider[data-v-4937e2f0]{width:1px;height:16px;flex:0 0 auto;border-radius:999px;background:var(--admin-batch-toolbar-border);opacity:.58}.batch-floating-actions[data-v-4937e2f0]{display:flex;align-items:center;gap:4px}.batch-floating-btn[data-v-4937e2f0]{width:36px;height:36px;min-width:36px;margin-left:0!important;padding:0;border:none;border-radius:50%;color:var(--admin-batch-clear-color);background:var(--admin-batch-action-bg);box-shadow:var(--admin-batch-action-shadow);transition:transform .22s ease,box-shadow .22s ease,background-color .22s ease,color .22s ease}.batch-floating-btn[data-v-4937e2f0]:hover{transform:none;background:var(--admin-batch-action-hover-bg);box-shadow:var(--admin-batch-action-hover-shadow)}.batch-floating-btn.danger[data-v-4937e2f0]{color:var(--admin-batch-delete-color)}.batch-floating-btn.ban[data-v-4937e2f0],.batch-floating-btn.tag[data-v-4937e2f0],.batch-floating-btn.white[data-v-4937e2f0]{color:var(--admin-batch-tag-color)}.batch-floating-btn.ghost[data-v-4937e2f0]{color:var(--admin-batch-clear-color)}.batch-floating-icon[data-v-4937e2f0]{width:15px;margin-right:0}.batch-toolbar-enter-active[data-v-4937e2f0],.batch-toolbar-leave-active[data-v-4937e2f0]{transition:opacity .24s ease,transform .28s cubic-bezier(.22,1,.36,1)}.batch-toolbar-enter-from[data-v-4937e2f0],.batch-toolbar-leave-to[data-v-4937e2f0]{opacity:0;transform:translateX(-50%) translateY(12px) scale(.99)}.batch-toolbar-enter-to[data-v-4937e2f0],.batch-toolbar-leave-from[data-v-4937e2f0]{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}@media (max-width:768px){.batch-floating-bar[data-v-4937e2f0]{left:50%;right:auto;bottom:max(76px,calc(64px + env(safe-area-inset-bottom)));transform:translateX(-50%);width:-moz-max-content;width:max-content;max-width:calc(100vw - 24px);gap:4px;padding:5px;border-radius:999px}.batch-selection-summary[data-v-4937e2f0]{padding:0 1px}.batch-selection-count[data-v-4937e2f0]{min-width:16px;height:22px;padding:0 3px;font-size:12px}.batch-toolbar-divider[data-v-4937e2f0]{height:14px}.batch-floating-actions[data-v-4937e2f0]{flex:1;min-width:0;gap:3px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;padding:1px}.batch-floating-actions[data-v-4937e2f0]::-webkit-scrollbar{display:none}.batch-floating-btn[data-v-4937e2f0]{width:32px;height:32px;min-width:32px;padding:0;border-radius:50%}.batch-floating-icon[data-v-4937e2f0]{margin-right:0;width:13px}.batch-toolbar-enter-from[data-v-4937e2f0],.batch-toolbar-leave-to[data-v-4937e2f0]{transform:translateX(-50%) translateY(12px) scale(.99)}.batch-toolbar-enter-to[data-v-4937e2f0],.batch-toolbar-leave-from[data-v-4937e2f0]{transform:translateX(-50%) translateY(0) scale(1)}}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{overflow:auto;width:var(--el-aside-width,300px)}.el-aside,.el-footer{box-sizing:border-box;flex-shrink:0}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-header,.el-main{box-sizing:border-box}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination .btn-next,.el-pagination .btn-prev{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination .btn-next *,.el-pagination .btn-prev *{pointer-events:none}.el-pagination .btn-next:focus,.el-pagination .btn-prev:focus{outline:none}.el-pagination .btn-next:hover,.el-pagination .btn-prev:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-next.is-active,.el-pagination .btn-prev.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-next.is-active.is-disabled,.el-pagination .btn-prev.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-next.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-prev:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination .btn-next:focus-visible,.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.list-item[data-v-78d34f50]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:65px;padding:12px 20px;align-items:center;transition:background .2s ease;border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-item[data-v-78d34f50]:last-child{border-bottom:none}.list-item[data-v-78d34f50]:hover{background:var(--el-fill-color-light)}.list-col[data-v-78d34f50]{display:flex;align-items:center}.list-col-checkbox[data-v-78d34f50]{justify-content:center;min-width:40px}.list-col-preview[data-v-78d34f50]{justify-content:center;cursor:pointer}.list-col-name[data-v-78d34f50]{cursor:pointer;overflow:hidden;padding-right:16px;min-width:0}.list-col-name[data-v-78d34f50]:hover{color:#38bdf8}.filename-ellipsis[data-v-78d34f50]{display:flex;max-width:100%;overflow:hidden;align-items:center}.filename-start[data-v-78d34f50]{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filename-end[data-v-78d34f50]{flex-shrink:0;white-space:nowrap}.list-col-channel-name[data-v-78d34f50],.list-col-channel[data-v-78d34f50],.list-col-date[data-v-78d34f50],.list-col-size[data-v-78d34f50]{font-size:13px;color:var(--el-text-color-secondary)}.list-col-address[data-v-78d34f50]{font-size:13px}.address-box[data-v-78d34f50],.channel-name-box[data-v-78d34f50]{background:var(--el-fill-color-light);border:1px solid var(--el-border-color-lighter);border-radius:4px;padding:4px 8px;font-size:12px;color:var(--el-text-color-secondary);max-width:100%;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none}.address-box[data-v-78d34f50]{width:85px;font-family:Consolas,Monaco,monospace}.channel-name-box[data-v-78d34f50]{width:70px}.address-box[data-v-78d34f50]::-webkit-scrollbar,.channel-name-box[data-v-78d34f50]::-webkit-scrollbar{display:none}.list-col-tags[data-v-78d34f50]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden}.custom-checkbox[data-v-78d34f50]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-78d34f50]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-78d34f50]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-78d34f50]{font-size:10px;color:#fff}.color-tag[data-v-78d34f50]{padding:2px 8px;border-radius:10px;font-size:11px;color:#fff;white-space:nowrap;max-width:60px;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.2)}.color-tag-more[data-v-78d34f50]{min-width:30px;text-align:center}.list-empty[data-v-78d34f50]{color:var(--el-text-color-placeholder)}.list-col-actions[data-v-78d34f50]{display:flex;gap:8px;justify-content:flex-end}.list-preview-img[data-v-78d34f50]{width:40px;height:40px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.list-folder-icon[data-v-78d34f50]{font-size:28px;color:var(--el-color-primary)}.list-file-icon[data-v-78d34f50]{font-size:24px;color:var(--el-text-color-secondary)}.list-action-btn[data-v-78d34f50]{width:32px;height:32px;border:none;border-radius:8px;background:var(--el-fill-color);color:var(--el-text-color-regular);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.list-action-btn[data-v-78d34f50]:hover{background:#38bdf8;color:#fff}.list-action-danger[data-v-78d34f50]:hover{background:var(--el-color-danger)}@media (max-width:768px){.list-item[data-v-78d34f50]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-78d34f50],.list-col-channel-name[data-v-78d34f50],.list-col-channel[data-v-78d34f50],.list-col-date[data-v-78d34f50],.list-col-size[data-v-78d34f50],.list-col-tags[data-v-78d34f50]{display:none}.list-col-actions[data-v-78d34f50]{gap:4px}.list-action-btn[data-v-78d34f50]{width:28px;height:28px}.list-col-checkbox[data-v-78d34f50]{width:24px;min-width:24px}}.img-card[data-v-e367e94e]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-e367e94e] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-e367e94e] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-e367e94e]:hover{transform:scale(1.05)}.image-preview[data-v-e367e94e],.video-preview[data-v-e367e94e]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .4s ease,opacity .3s ease;filter:var(--image-preview-filter)}.video-preview[data-v-e367e94e]{cursor:pointer}.img-card:hover .file-icon[data-v-e367e94e],.img-card:hover .image-preview[data-v-e367e94e],.img-card:hover .video-preview[data-v-e367e94e]{transform:scale(1.03)}.image-preview[data-v-e367e94e]:hover{opacity:.8}.file-short-info[data-v-e367e94e]{position:absolute;z-index:10;top:3px;left:3px;display:flex;gap:5px;align-items:start}.success-tag[data-v-e367e94e]{background-color:rgba(34,139,34,.6);border:1px solid rgba(34,139,34,.7);border-radius:6px}.fail-tag[data-v-e367e94e],.success-tag[data-v-e367e94e]{color:hsla(0,0%,100%,.95);padding:3px 8px;font-size:11px;font-weight:500;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.fail-tag[data-v-e367e94e]{background-color:rgba(220,53,69,.6);border:1px solid rgba(220,53,69,.7);border-radius:6px}.primary-tag[data-v-e367e94e]{background-color:rgba(250,82,194,.6);color:hsla(0,0%,100%,.95);border:1px solid rgba(250,82,194,.7);padding:3px 8px;border-radius:6px;font-size:11px;font-weight:500;display:flex;align-items:center;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.file-preview[data-v-e367e94e]{display:flex;justify-content:center;align-items:center;width:100%;height:100%}.file-icon[data-v-e367e94e]{opacity:.6;font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.audio-icon[data-v-e367e94e]{color:var(--el-color-primary);opacity:.8}.audio-card-preview[data-v-e367e94e]{cursor:pointer}.card-bottom-overlay[data-v-e367e94e]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-e367e94e]{display:flex;align-items:center;justify-content:center}.file-name[data-v-e367e94e]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-e367e94e]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-e367e94e]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-e367e94e],.action-bar-right[data-v-e367e94e]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-e367e94e]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-e367e94e]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-e367e94e]:active{transform:scale(.95)}.action-btn-danger[data-v-e367e94e]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-e367e94e]{display:none!important}}@keyframes skeleton-shimmer-e367e94e{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-wrapper[data-v-e367e94e]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-e367e94e 1.5s ease-in-out infinite}.error-wrapper[data-v-e367e94e]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--skeleton-bg-color);cursor:pointer;gap:8px}.error-icon[data-v-e367e94e]{font-size:32px;color:var(--el-color-warning);opacity:.7}.error-text[data-v-e367e94e]{font-size:12px;color:var(--el-text-color-secondary)}.img-card[data-v-5f22ef48]{width:100%;height:22vh;content-visibility:auto;contain:layout paint style;contain-intrinsic-size:260px;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-5f22ef48] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-5f22ef48] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-5f22ef48]:hover{transform:scale(1.05)}.folder-card[data-v-5f22ef48]{cursor:pointer}.folder-icon[data-v-5f22ef48]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;color:var(--el-color-primary)}.folder-icon-svg[data-v-5f22ef48]{font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.img-card:hover .folder-icon-svg[data-v-5f22ef48]{transform:scale(1.03)}.card-bottom-overlay[data-v-5f22ef48]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-5f22ef48]{display:flex;align-items:center;justify-content:center}.file-name[data-v-5f22ef48]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-5f22ef48]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-5f22ef48]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-5f22ef48],.action-bar-right[data-v-5f22ef48]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-5f22ef48]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-5f22ef48]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-5f22ef48]:active{transform:scale(.95)}.action-btn-danger[data-v-5f22ef48]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-5f22ef48]{display:none!important}}@keyframes skeleton-shimmer-5060702c{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeleton-pulse-5060702c{0%,to{opacity:.4}50%{opacity:.8}}.skeleton-card[data-v-5060702c]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative}.skeleton-image[data-v-5060702c]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-info[data-v-5060702c]{position:absolute;bottom:0;left:0;right:0;padding:15px;background:linear-gradient(transparent,rgba(0,0,0,.5))}.skeleton-text[data-v-5060702c]{height:14px;width:60%;margin:0 auto;border-radius:4px;background:linear-gradient(90deg,hsla(0,0%,100%,.1) 25%,hsla(0,0%,100%,.25) 50%,hsla(0,0%,100%,.1) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-list-item[data-v-5060702c]{animation:skeleton-pulse-5060702c 1.5s ease-in-out infinite}.skeleton-checkbox[data-v-5060702c]{width:18px;height:18px;border-radius:4px;background:var(--skeleton-bg-color)}.skeleton-preview[data-v-5060702c]{width:40px;height:40px;border-radius:6px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-text-long[data-v-5060702c]{width:80%}.skeleton-text-long[data-v-5060702c],.skeleton-text-short[data-v-5060702c]{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-text-short[data-v-5060702c]{width:60px}.skeleton-text-tiny[data-v-5060702c]{height:14px;width:40px;border-radius:4px}.skeleton-tag[data-v-5060702c],.skeleton-text-tiny[data-v-5060702c]{background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-5060702c 1.5s ease-in-out infinite}.skeleton-tag[data-v-5060702c]{height:20px;width:50px;border-radius:10px}.skeleton-actions[data-v-5060702c]{height:28px;width:80px;border-radius:6px;background:var(--skeleton-bg-color)}.list-item[data-v-5060702c]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.list-col[data-v-5060702c]{display:flex;align-items:center}.list-col-checkbox[data-v-5060702c],.list-col-preview[data-v-5060702c]{justify-content:center}@media (max-width:768px){.list-item[data-v-5060702c]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-5060702c],.list-col-channel-name[data-v-5060702c],.list-col-channel[data-v-5060702c],.list-col-date[data-v-5060702c],.list-col-size[data-v-5060702c],.list-col-tags[data-v-5060702c]{display:none}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-checkbox-group{font-size:0;line-height:0}.filter-dropdown[data-v-c3aeeea0]{flex-shrink:0}.filter-trigger[data-v-c3aeeea0]{cursor:pointer;display:flex;align-items:center}.header-icon[data-v-c3aeeea0]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-c3aeeea0]:hover{color:var(--admin-purple);transform:scale(1.2)}.filter-badge[data-v-c3aeeea0] .el-badge__content{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;font-size:10px;height:16px;line-height:16px;padding:0 5px}.filter-dropdown-menu[data-v-c3aeeea0]{padding:8px 0;min-width:180px;max-height:400px;overflow-y:auto}.filter-section[data-v-c3aeeea0]{padding:8px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.filter-section[data-v-c3aeeea0]:last-of-type{border-bottom:none}.filter-title[data-v-c3aeeea0]{font-size:12px;font-weight:600;color:var(--el-text-color-secondary);margin-bottom:6px}.filter-options[data-v-c3aeeea0],.filter-options[data-v-c3aeeea0] .el-checkbox-group{display:flex;flex-direction:column;gap:2px}.filter-options[data-v-c3aeeea0] .el-checkbox{margin-right:0;height:26px;padding:0 6px;border-radius:4px;transition:all .2s ease}.filter-options[data-v-c3aeeea0] .el-checkbox:hover{background:var(--el-fill-color-light)}.filter-options[data-v-c3aeeea0] .el-checkbox__label{font-size:13px;color:var(--el-text-color-primary)}.filter-options[data-v-c3aeeea0] .el-checkbox__input.is-checked+.el-checkbox__label{color:#0ea5e9}.channel-group-title[data-v-c3aeeea0]{font-size:11px;font-weight:600;color:var(--el-text-color-secondary);text-transform:uppercase;letter-spacing:.5px;padding:4px 6px;margin-top:4px;margin-bottom:2px}.channel-divider[data-v-c3aeeea0]{height:1px;background:var(--el-border-color-lighter);margin:6px 0}.filter-options[data-v-c3aeeea0] .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#0ea5e9;border-color:#0ea5e9}.filter-actions[data-v-c3aeeea0]{padding:10px 12px 6px;display:flex;justify-content:center}.filter-actions .el-button[data-v-c3aeeea0]{width:100%;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);color:var(--el-text-color-regular);border-radius:6px;transition:all .2s ease}.filter-actions .el-button[data-v-c3aeeea0]:hover:not(:disabled){background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8;color:#fff}.filter-actions .el-button[data-v-c3aeeea0]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.filter-dropdown-menu[data-v-c3aeeea0]{min-width:160px;max-height:320px}.filter-section[data-v-c3aeeea0]{padding:6px 10px}.filter-title[data-v-c3aeeea0]{font-size:11px;margin-bottom:4px}.filter-options[data-v-c3aeeea0] .el-checkbox{height:24px;padding:0 4px}.filter-options[data-v-c3aeeea0] .el-checkbox__label{font-size:12px}.header-icon[data-v-c3aeeea0]{font-size:1.2em}}.language-switcher[data-v-08567d0a]{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}.lang-icon[data-v-08567d0a]{font-size:var(--lang-icon-size,1.5em);color:var(--lang-icon-color,var(--theme-toggle-color))}#themeToggle[data-v-5c149ed5]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-5c149ed5]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-5c149ed5]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-5c149ed5]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-5c149ed5]{transform:rotate(40deg)}.theme_toggle_g[data-v-5c149ed5]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-5c149ed5],.icon-fade-leave-active[data-v-5c149ed5]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-5c149ed5]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-5c149ed5],.icon-fade-leave-from[data-v-5c149ed5]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-5c149ed5]{display:inline-block}.tabs[data-v-74e008d5]{display:flex;align-items:center;justify-content:center;gap:8px}.page-switcher[data-v-74e008d5]{position:relative;display:flex;align-items:center}.title[data-v-74e008d5]{display:flex;align-items:center;gap:8px;font-size:1.1em;font-weight:700;cursor:pointer;transition:background-color .24s ease,border-color .24s ease,transform .24s ease;color:var(--admin-container-color);padding:9px 14px;border-radius:10px;background-color:transparent;border:1px solid transparent;font-family:inherit}.page-switcher.is-open .title[data-v-74e008d5],.title[data-v-74e008d5]:hover{background-color:var(--tabs-switcher-hover-bg);border-color:var(--tabs-switcher-hover-border-color);transform:translateY(-1px)}.title .fa-images[data-v-74e008d5]{font-size:1em;color:var(--el-color-primary)}.page-switcher-trigger[data-v-74e008d5]{-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;white-space:nowrap}.page-switcher-title[data-v-74e008d5]{line-height:1}.page-switcher-arrow[data-v-74e008d5]{font-size:.75em;color:var(--el-color-primary);transition:transform .22s ease}.page-switcher.is-open .page-switcher-arrow[data-v-74e008d5]{transform:rotate(180deg)}.page-options[data-v-74e008d5]{position:absolute;top:calc(100% + 8px);left:0;z-index:1200;display:flex;flex-direction:column;align-items:stretch;gap:3px;min-width:168px;padding:6px;border:1px solid var(--tabs-switcher-border-color);border-radius:14px;background:var(--tabs-dropdown-popper-bg-color);box-shadow:var(--tabs-dropdown-popper-shadow);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);opacity:0;visibility:hidden;transform:translateY(-4px) scale(.98);transform-origin:top left;pointer-events:none;transition:opacity .18s ease,transform .22s ease,visibility .18s ease}.page-options[data-v-74e008d5]:before{content:"";position:absolute;left:0;right:0;top:-8px;height:8px}.page-switcher.is-open .page-options[data-v-74e008d5]{opacity:1;visibility:visible;transform:translateY(0) scale(1);pointer-events:auto}@media (hover:hover) and (pointer:fine){.page-switcher:hover .page-switcher-arrow[data-v-74e008d5]{transform:rotate(180deg)}.page-switcher:hover .page-options[data-v-74e008d5]{opacity:1;visibility:visible;transform:translateY(0) scale(1);pointer-events:auto}}.page-option[data-v-74e008d5]{display:inline-flex;align-items:center;gap:7px;width:100%;height:34px;padding:0 12px;border:none;border-radius:10px;color:var(--admin-container-color);background:transparent;font-size:14px;font-weight:600;font-family:inherit;white-space:nowrap;cursor:pointer;transition:background-color .18s ease,color .18s ease}.page-option.is-active[data-v-74e008d5],.page-option[data-v-74e008d5]:hover{color:var(--el-color-primary);background-color:var(--tabs-switcher-hover-bg)}.page-option-icon[data-v-74e008d5]{width:15px;color:var(--el-color-primary)}@media (max-width:768px){.tabs[data-v-74e008d5]{gap:6px}.title[data-v-74e008d5]{font-size:1em;padding:7px 10px;gap:5px}.page-switcher-title[data-v-74e008d5]{max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-options[data-v-74e008d5]{top:calc(100% + 6px);left:50%;width:min(220px,calc(100vw - 24px));min-width:0;max-width:calc(100vw - 24px);gap:3px;padding:6px;transform:translate(-50%,-4px) scale(.98);transform-origin:top center}.page-options[data-v-74e008d5]:before{top:-6px;height:6px}.page-switcher.is-open .page-options[data-v-74e008d5]{transform:translate(-50%) scale(1)}.page-option[data-v-74e008d5]{justify-content:flex-start;height:32px;padding:0 10px;font-size:12px;gap:6px}.tabs-language-switcher[data-v-74e008d5]{--lang-icon-size:1.1em;padding:3px}}.tabs-language-switcher[data-v-74e008d5]{--lang-icon-size:1.3em;--lang-icon-color:var(--admin-theme-toggle-color);transition:color .3s ease;padding:5px}.container[data-v-437b7a30]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0}[data-v-437b7a30] .el-container,[data-v-437b7a30] .el-main{overflow:visible}[data-v-437b7a30] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.header-content[data-v-437b7a30]{display:flex;justify-content:space-between;align-items:center;padding:10px 24px;background:hsla(0,0%,100%,.72);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid hsla(0,0%,100%,.3);border-top:1px solid hsla(0,0%,100%,.5);box-shadow:0 4px 30px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.05),inset 0 1px 0 hsla(0,0%,100%,.4);transition:all .4s cubic-bezier(.4,0,.2,1);border-radius:16px;position:fixed;top:8px;left:50%;transform:translateX(-50%);width:calc(95% - 16px);z-index:2001;min-height:45px}html.dark .header-content[data-v-437b7a30]{background:rgba(30,30,30,.75);border:1px solid hsla(0,0%,100%,.08);border-top:1px solid hsla(0,0%,100%,.12);box-shadow:0 4px 30px rgba(0,0,0,.3),0 1px 3px rgba(0,0,0,.2),inset 0 1px 0 hsla(0,0%,100%,.05)}@media (max-width:768px){.header-content[data-v-437b7a30]{flex-direction:column;top:6px;width:calc(100% - 32px);border-radius:14px;padding:6px 12px;gap:4px}.header-icon[data-v-437b7a30]{font-size:.95em}.header-content .actions[data-v-437b7a30]{gap:10px}.search-card[data-v-437b7a30] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-437b7a30] .el-input__wrapper{padding:0 10px}.search-card[data-v-437b7a30] .el-input__inner:focus{width:65vw}}.header-content[data-v-437b7a30]:hover{background:hsla(0,0%,100%,.82);box-shadow:0 8px 40px rgba(0,0,0,.12),0 2px 6px rgba(0,0,0,.08),inset 0 1px 0 hsla(0,0%,100%,.5);transform:translateX(-50%) translateY(-1px)}html.dark .header-content[data-v-437b7a30]:hover{background:rgba(35,35,35,.85);box-shadow:0 8px 40px rgba(0,0,0,.4),0 2px 6px rgba(0,0,0,.3),inset 0 1px 0 hsla(0,0%,100%,.08)}.header-icon[data-v-437b7a30]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-437b7a30]:hover{color:var(--admin-purple);transform:scale(1.2)}.breadcrumb-container[data-v-437b7a30]{display:flex;align-items:center;justify-content:flex-start;gap:12px;padding:0 10px;margin-top:12px;margin-bottom:4px}.breadcrumb-select-button[data-v-437b7a30]{width:32px;height:32px;box-sizing:border-box;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--el-border-color-lighter);border-radius:6px;color:#38bdf8;background:var(--el-fill-color-light);box-shadow:var(--admin-dashboard-stats-shadow);cursor:pointer;transition:transform .2s ease,color .2s ease,background-color .2s ease,box-shadow .2s ease}.breadcrumb-select-button[data-v-437b7a30]:hover{color:var(--admin-purple);transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-select-icon[data-v-437b7a30]{font-size:14px}@media (max-width:768px){.breadcrumb-container[data-v-437b7a30]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-top:8px;margin-bottom:2px}.breadcrumb-select-button[data-v-437b7a30]{width:28px;height:28px;box-sizing:border-box;border-radius:8px}.breadcrumb-select-icon[data-v-437b7a30]{font-size:12px}}.stats-badge[data-v-437b7a30]{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;color:var(--el-text-color-secondary);background:var(--el-fill-color-light);padding:4px 10px;border-radius:12px;border:1px solid var(--el-border-color-lighter);transition:all .2s ease;white-space:nowrap;flex-shrink:0;margin-left:auto}.stats-badge[data-v-437b7a30]:hover{background:var(--el-fill-color);color:var(--admin-purple);border-color:var(--admin-purple)}.stats-badge-icon[data-v-437b7a30]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-437b7a30]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-437b7a30]{font-size:9px}}.header-content .actions[data-v-437b7a30]{display:flex;align-items:center;gap:15px}@media (max-width:768px){.header-content .actions[data-v-437b7a30]{margin-top:10px}}.header-content .actions i[data-v-437b7a30]{font-size:1.5em;cursor:pointer;transition:color .3s,transform .3s;color:var(--admin-container-color)}.header-content .actions i[data-v-437b7a30]:hover{color:var(--admin-purple);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-437b7a30]{color:var(--admin-container-color)}.header-content .actions .el-dropdown-link i[data-v-437b7a30]:hover{color:var(--admin-purple)}.header-content .actions .disabled[data-v-437b7a30]{color:#bbb;pointer-events:none}.header-content .actions .enabled[data-v-437b7a30]{color:var(--admin-purple)}.search-area[data-v-437b7a30]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-437b7a30]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-437b7a30]{display:flex;align-items:center}.search-card[data-v-437b7a30] .el-input__wrapper{border-radius:20px;background:var(--admin-dashboard-search-card-bg-color);box-shadow:var(--admin-dashboard-search-card-box-shadow);transition:background-color .3s}.search-card[data-v-437b7a30] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-437b7a30] .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;-moz-transition:all .3s ease;transition:all .3s ease}.search-card[data-v-437b7a30] .el-input__inner::placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;transition:all .3s ease}.search-card[data-v-437b7a30] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-437b7a30] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-437b7a30] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-437b7a30] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-437b7a30] .el-input__inner:focus{width:55vw}}.search-icon[data-v-437b7a30]{cursor:pointer;color:var(--admin-container-color);transition:all .3s ease;font-size:1.3em;opacity:0;transform:scale(.8);pointer-events:none}.search-card:focus-within .search-icon[data-v-437b7a30]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-437b7a30]:hover{color:var(--admin-purple);transform:scale(1.2)}.search-card[data-v-437b7a30] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-437b7a30]{display:flex;flex-direction:column;padding:20px 60px;min-height:calc(100vh - 80px);transition:padding-bottom .24s ease}.main-container.has-batch-toolbar[data-v-437b7a30]{padding-bottom:72px}@media (max-width:768px){.main-container[data-v-437b7a30]{margin-top:12vh}.main-container.has-batch-toolbar[data-v-437b7a30]{padding-bottom:86px}}.content[data-v-437b7a30]{display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(3,1fr);gap:20px;padding:10px;padding-bottom:0;flex-grow:1;min-height:80vh}.content.is-drag-selecting[data-v-437b7a30],.list-view.is-drag-selecting[data-v-437b7a30]{cursor:crosshair}.content.is-drag-selecting[data-v-437b7a30] .img-card:hover,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .file-icon,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .folder-icon-svg,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .image-preview,.content.is-drag-selecting[data-v-437b7a30] .img-card:hover .video-preview{transform:none}.content.is-drag-selecting[data-v-437b7a30] .image-preview:hover{opacity:1}.content.is-drag-selecting[data-v-437b7a30] .action-btn:hover{transform:none;background:hsla(0,0%,100%,.15)}.list-view.is-drag-selecting[data-v-437b7a30] .list-item:hover{background:transparent}.list-view.is-drag-selecting[data-v-437b7a30] .list-action-btn:hover{color:var(--el-text-color-regular);background:var(--el-fill-color)}.list-view.is-drag-selecting[data-v-437b7a30] .list-action-danger:hover{background:var(--el-fill-color)}.empty-state[data-v-437b7a30]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--admin-container-color);opacity:.6}.empty-icon[data-v-437b7a30]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-437b7a30]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-437b7a30]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-437b7a30]{padding:80px 20px}@media (max-width:768px){.content[data-v-437b7a30]{grid-template-columns:1fr;grid-template-rows:none}}.list-view[data-v-437b7a30]{display:flex;flex-direction:column;gap:0;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;overflow-x:auto;overflow-y:visible;box-shadow:var(--admin-dashboard-imgcard-shadow);margin-top:15px}.list-header[data-v-437b7a30]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;background:var(--admin-dashboard-stats-bg);font-weight:600;font-size:13px;color:var(--el-text-color-secondary);border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-col[data-v-437b7a30]{display:flex;align-items:center}.list-col-checkbox[data-v-437b7a30]{justify-content:center;min-width:40px}.custom-checkbox[data-v-437b7a30]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-437b7a30]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-437b7a30],.custom-checkbox.indeterminate[data-v-437b7a30]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-437b7a30]{font-size:10px;color:#fff}@media (max-width:768px){.list-header[data-v-437b7a30]{display:none}}.pagination-container[data-v-437b7a30]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-437b7a30]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-437b7a30] .el-pagination{--el-pagination-button-bg-color:var(--admin-dashboard-btn-bg-color);--el-pagination-hover-color:var(--admin-purple)}.pagination-container[data-v-437b7a30] .el-pager li{background:var(--admin-dashboard-btn-bg-color);border-radius:10px;margin:0 4px;min-width:36px;height:36px;line-height:36px;font-weight:500;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-437b7a30] .el-pager li:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-container[data-v-437b7a30] .el-pager li.is-active{background:linear-gradient(135deg,#0ea5e9,#38bdf8)!important;color:#fff!important;border-radius:10px;box-shadow:var(--admin-dashboard-btn-shadow),0 4px 12px rgba(56,189,248,.3),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-437b7a30] .el-pager li.is-active:hover{transform:translateY(-2px)!important;box-shadow:var(--admin-dashboard-btn-hover-shadow),0 6px 16px rgba(56,189,248,.4),inset 0 1px 0 hsla(0,0%,100%,.2)!important}.pagination-container[data-v-437b7a30] .btn-next,.pagination-container[data-v-437b7a30] .btn-prev{background:var(--admin-dashboard-btn-bg-color)!important;border-radius:10px!important;min-width:36px;height:36px;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-437b7a30] .btn-next:hover,.pagination-container[data-v-437b7a30] .btn-prev:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-right[data-v-437b7a30]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-total[data-v-437b7a30]{font-size:13px;color:var(--el-text-color-secondary);white-space:nowrap}.page-jump[data-v-437b7a30]{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--el-text-color-secondary)}.page-jump .jump-input[data-v-437b7a30]{width:50px}.page-jump .jump-input[data-v-437b7a30] .el-input__wrapper{background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);border-radius:8px;padding:0 8px;height:28px}.page-jump .jump-input[data-v-437b7a30] .el-input__inner{text-align:center;color:var(--el-text-color-primary);height:28px;line-height:28px}.page-jump .jump-btn[data-v-437b7a30]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;border-radius:8px;padding:0 12px;height:28px;font-size:12px;font-weight:600;color:#fff;box-shadow:0 2px 8px rgba(56,189,248,.3);transition:all .3s ease}.page-jump .jump-btn[data-v-437b7a30]:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(56,189,248,.4)}@media (max-width:768px){.pagination-container[data-v-437b7a30]{flex-direction:column;gap:12px;padding-bottom:15px}.pagination-center[data-v-437b7a30]{order:0}.pagination-right[data-v-437b7a30]{position:static;width:100%;justify-content:center;order:1}.page-jump .jump-input[data-v-437b7a30]{width:45px}}.refresh-btn[data-v-437b7a30]{cursor:pointer;background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);color:#38bdf8;border:none;border-radius:10px;width:36px;height:36px;min-width:36px;padding:0;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .3s cubic-bezier(.4,0,.2,1)}.refresh-btn[data-v-437b7a30]:hover{transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow);background:linear-gradient(135deg,#0ea5e9,#38bdf8);color:#fff}.load-more[data-v-437b7a30]{cursor:pointer;background:linear-gradient(135deg,#0ea5e9,#38bdf8);box-shadow:0 4px 15px rgba(56,189,248,.3);color:#fff;border:none;border-radius:10px;height:36px;padding:0 16px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.load-more[data-v-437b7a30]:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(56,189,248,.5)}[data-v-437b7a30] .btn-prev{left:8px}[data-v-437b7a30] .btn-next,[data-v-437b7a30] .btn-prev{border-radius:100%;position:fixed;top:50%;scale:1;color:var(--admin-dashboard-btn-color)}[data-v-437b7a30] .btn-next{right:8px}@media (min-width:768px){[data-v-437b7a30] .el-pagination.is-background .btn-next,[data-v-437b7a30] .el-pagination.is-background .btn-prev{background-color:var(--admin-dashboard-btn-bg-color);backdrop-filter:blur(10px);box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s ease}[data-v-437b7a30] .el-pagination.is-background .btn-next:hover,[data-v-437b7a30] .el-pagination.is-background .btn-prev:hover{transform:translateY(-10%);box-shadow:var(--admin-dashboard-btn-hover-shadow)}}.question-icon[data-v-437b7a30]{margin:0 3px}.breadcrumb[data-v-437b7a30]{height:32px;box-sizing:border-box;display:flex;align-items:center;padding:0 12px;background-color:var(--el-fill-color-light);border-radius:6px;font-size:.95em;box-shadow:var(--admin-dashboard-stats-shadow);transition:all .3s ease}.breadcrumb[data-v-437b7a30]:hover{transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-home-icon[data-v-437b7a30]{font-size:14px;color:#38bdf8;transition:color .2s ease}.breadcrumb-home-icon[data-v-437b7a30]:hover{color:var(--admin-purple)}[data-v-437b7a30] .el-breadcrumb__item{cursor:pointer}[data-v-437b7a30] .el-breadcrumb,[data-v-437b7a30] .el-breadcrumb__inner,[data-v-437b7a30] .el-breadcrumb__item,[data-v-437b7a30] .el-breadcrumb__separator{display:inline-flex;align-items:center;height:100%;line-height:32px}[data-v-437b7a30] .el-breadcrumb__inner:hover{color:var(--el-color-primary)}.mobile-directory-trigger[data-v-437b7a30]{display:none;align-items:center;height:28px;box-sizing:border-box;gap:6px;padding:0 10px;background:var(--el-fill-color-light);border-radius:8px;border:1px solid var(--el-border-color-lighter);cursor:pointer;transition:all .2s ease}.mobile-directory-trigger[data-v-437b7a30]:active{background:var(--el-fill-color)}.mobile-directory-icon[data-v-437b7a30]{font-size:12px;color:#38bdf8}.mobile-directory-path[data-v-437b7a30]{display:inline-flex;align-items:center;height:100%;font-size:12px;font-weight:500;line-height:1;color:var(--el-text-color-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-437b7a30]{font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-437b7a30]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-437b7a30]{display:flex}.desktop-only[data-v-437b7a30]{display:none!important}.breadcrumb-container[data-v-437b7a30]{padding:0;margin-left:0}}.drag-select-overlay[data-v-437b7a30]{position:fixed;background:rgba(24,144,255,.1);border:1px solid rgba(24,144,255,.6);pointer-events:none;z-index:9999;border-radius:2px} \ No newline at end of file diff --git a/frontend-dist/css/997.87fa4059.css.gz b/frontend-dist/css/997.87fa4059.css.gz new file mode 100644 index 00000000..d067f814 Binary files /dev/null and b/frontend-dist/css/997.87fa4059.css.gz differ diff --git a/frontend-dist/css/app.b63c4c0f.css b/frontend-dist/css/app.b63c4c0f.css deleted file mode 100644 index c08941e4..00000000 --- a/frontend-dist/css/app.b63c4c0f.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Pacifico;src:url(/fonts/Pacifico-Regular.dc63ac94.woff2) format("woff2");font-display:swap}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}nav{padding:30px}nav a{font-weight:700;color:#2c3e50}nav a.router-link-exact-active{color:#42b983}body{margin:0;padding:0;background-color:#f8f8f8}:focus-visible{outline:none}*{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}:root{--bg-color:linear-gradient(90deg,#efe8e8,#e4f8ff);--popper-bg-color:hsla(0,0%,100%,.8);--popper-shadow:0 0 10px 2px rgba(0,0,0,.1);--image-preview-filter:brightness(1);--text-bg-color:rgba(0,0,0,.1);--background-image-filter:brightness(1);--upload-list-card-bg-color:hsla(0,0%,100%,.7);--upload-list-card-border:1px solid #327ecc50;--upload-list-card-box-shadow:1px 2px 5px 1px #327ecc50;--upload-list-item-border:1px solid #a5bef7;--upload-list-dashboard-bg-color:hsla(0,0%,100%,.7);--upload-list-dashboard-shadow:0 2px 10px rgba(0,0,0,.1);--upload-list-file-icon-color:#327ecc;--el-upload-dragger-bg-color:hsla(0,0%,100%,.6);--el-upload-dragger-border:3px dashed #409eff;--el-upload-dragger-border-color:#409eff;--el-upload-dragger-hover-box-shadow:0 0 10px 5px #409eff;--el-upload-dragger-uniform-color:#409eff;--paste-card-textarea-border-color:#409eff;--paste-card-textarea-box-shadow:0 0 6px 1px #409eff;--el-icon--upload-color:#1f8bf8;--upload-text-color:rgba(58,58,58,.8);--upload-header-color:rgba(58,58,58,.8);--upload-main-title-color:linear-gradient(90deg,#a1e3cc,#78aeec);--upload-title-text-color:rgba(58,58,58,.8);--upload-title-text-shadow:none;--upload-title-hover-glow:rgba(64,158,255,.32);--upload-title-underline-bg:linear-gradient(90deg,transparent,rgba(161,227,204,.7),rgba(120,174,236,.85),transparent);--upload-title-underline-shadow:0 0 10px rgba(120,174,236,.36);--upload-title-crayon-deep:rgba(72,151,211,.78);--upload-title-crayon-base:rgba(116,186,232,.78);--upload-title-crayon-light:rgba(222,246,255,.9);--upload-title-crayon-edge:rgba(60,139,201,.38);--upload-title-crayon-fleck:hsla(0,0%,100%,.46);--upload-title-crayon-burr:rgba(76,154,213,.3);--upload-title-crayon-dust:rgba(118,183,224,.18);--modern-action-group-bg:rgba(64,158,255,.08);--modern-action-group-border:rgba(64,158,255,.15);--logo-glow-color:#409eff;--modern-action-group-shadow:rgba(0,0,0,.06);--modern-action-group-hover-bg:rgba(64,158,255,.12);--modern-action-group-hover-shadow:rgba(64,158,255,.15);--upload-action-toolbar-bg:rgba(230,241,247,.58);--upload-action-toolbar-border:rgba(180,212,226,.42);--upload-action-toolbar-shadow:0 8px 22px rgba(64,120,150,.07),inset 0 1px 0 hsla(0,0%,100%,.38);--upload-action-toolbar-hover-bg:rgba(220,236,244,.68);--upload-action-toolbar-hover-border:rgba(156,199,219,.46);--upload-action-toolbar-hover-shadow:0 10px 26px rgba(64,120,150,.1),inset 0 1px 0 hsla(0,0%,100%,.44);--upload-action-btn-bg:hsla(0,0%,100%,.5);--upload-action-btn-color:#327ecc;--upload-action-btn-shadow:inset 0 1px 0 hsla(0,0%,100%,.45);--upload-action-btn-hover-bg:hsla(0,0%,100%,.74);--upload-action-btn-hover-shadow:0 6px 14px rgba(67,102,122,.12),inset 0 1px 0 hsla(0,0%,100%,.66);--upload-action-btn-active-shadow:inset 0 2px 6px rgba(20,50,70,.1);--upload-action-copy-color:#2f86c9;--upload-action-retry-color:#3a9b78;--upload-action-danger-color:#d86666;--upload-action-danger-bg:hsla(0,100%,98%,.58);--upload-action-danger-hover-bg:hsla(0,100%,97%,.78);--upload-action-danger-hover-shadow:0 6px 14px hsla(0,59%,62%,.14),inset 0 1px 0 hsla(0,0%,100%,.7);--file-name-bg:linear-gradient(135deg,rgba(64,158,255,.08),rgba(64,158,255,.03));--file-name-border:rgba(64,158,255,.12);--file-name-hover-bg:linear-gradient(135deg,rgba(64,158,255,.12),rgba(64,158,255,.06));--file-name-hover-border:rgba(64,158,255,.2);--upload-list-item-bg:linear-gradient(135deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.7));--upload-list-item-border-color:rgba(64,158,255,.1);--upload-list-item-shadow:rgba(0,0,0,.04);--upload-list-item-hover-border:rgba(64,158,255,.25);--upload-list-item-hover-shadow:rgba(64,158,255,.12);--dashboard-title-bg:linear-gradient(135deg,rgba(64,158,255,.06),transparent);--toolbar-button-bg-color:hsla(0,0%,100%,.5);--toolbar-button-shadow:1px 2px 4px rgba(0,0,0,.3);--toolbar-button-shadow-hover:1px 2px 4px rgba(0,0,0,.5);--toolbar-button-color:#327ecc;--page-footer-text-color:rgba(58,58,58,.8);--page-footer-name-color:rgba(12,76,105,.8);--login-container-bg-color:hsla(0,0%,100%,.6);--password-input-bg-color:hsla(0,0%,100%,.9);--password-input-border:1px solid #dcdfe6;--login-title-color:#000;--login-container-box-shadow:0 0 12px rgba(0,0,0,.12);--login-container-hover-box-shadow:0 0 12px 4px rgba(0,0,0,.24);--login-submit-btn-bg-color:#487cb0e8;--login-title-glow-color:rgba(52,152,219,.5);--login-input-underline-color:#5b9bd3;--login-input-underline-secondary-color:#7ba9d8;--login-input-label-focus-color:#5b9bd3;--dialog-bg-color:hsla(0,0%,100%,.7);--dialog-box-shadow:0 0 10px 2px rgba(0,0,0,.1);--tabs-dropdown-popper-bg-color:hsla(0,0%,100%,.2);--tabs-dropdown-popper-shadow:0 0 10px 2px rgba(0,0,0,.1);--admin-header-content-bg-color:hsla(0,0%,100%,.75);--admin-header-content-hover-bg-color:hsla(0,0%,100%,.85);--admin-header-content-border-bottom:1px solid rgba(0,0,0,.1);--admin-header-content-box-shadow:0 4px 6px rgba(0,0,0,.1);--admin-header-content-hover-box-shadow:0 6px 10px rgba(0,0,0,.2);--admin-container-bg-color:linear-gradient(90deg,#fdf3f6,#e4f8ff);--admin-container-color:#333;--admin-dashborad-stats-bg-color:hsla(0,0%,100%,.9);--admin-dashborad-stats-hover-bg-color:#f0eaf8;--admin-dashboard-search-card-bg-color:hsla(0,0%,100%,.9);--admin-dashboard-stats-shadow:0 2px 4px rgba(0,0,0,.05);--admin-dashboard-stats-hover-shadow:0 4px 6px rgba(0,0,0,.1);--admin-dashboard-search-card-box-shadow:0 2px 6px rgba(0,0,0,.1);--admin-dashboard-btn-color:#000;--admin-dashboard-btn-bg-color:hsla(0,0%,100%,.3);--admin-dashboard-btn-shadow:0 2px 4px rgba(0,0,0,.3);--admin-dashboard-btn-hover-shadow:0 4px 6px rgba(0,0,0,.3);--admin-dashboard-imgcard-bg-color:hsla(0,0%,100%,.6);--admin-dashboard-imgcard-shadow:0 2px 12px rgba(0,0,0,.1);--admin-dashboard-tag-suggestion-bg-color:#fff;--admin-dashboard-tag-suggestion-border-color:#dcdfe6;--admin-dashboard-tag-suggestion-box-shadow:0 2px 12px rgba(0,0,0,.1);--admin-dashboard-tag-suggestion-item-hover-bg-color:#f5f7fa;--skeleton-bg-color:#e0e0e0;--skeleton-shimmer-color:hsla(0,0%,100%,.5);--admin-cuscfg-table-shadow:0 4px 6px rgba(0,0,0,.1);--admin-cuscfg-table-bg-color:hsla(0,0%,100%,.95);--admin-syscfg-tabs-border-color:#3c3c3c4c;--admin-purple:#b39ddb;--admin-batch-toolbar-bg:hsla(0,0%,100%,.56);--admin-batch-toolbar-border:hsla(0,0%,100%,.72);--admin-batch-toolbar-shadow:0 14px 34px rgba(91,128,148,.16),inset 0 1px 0 hsla(0,0%,100%,.72);--admin-batch-action-bg:hsla(0,0%,100%,.62);--admin-batch-action-shadow:0 5px 14px rgba(91,128,148,.12);--admin-batch-action-hover-bg:hsla(0,0%,100%,.86);--admin-batch-action-hover-shadow:0 8px 18px rgba(91,128,148,.18);--admin-batch-copy-color:#38bdf8;--admin-batch-delete-color:#e11d48;--admin-batch-download-color:#38bdf8;--admin-batch-move-color:#38bdf8;--admin-batch-tag-color:#f59e0b;--admin-batch-ban-color:#fb7185;--admin-batch-white-color:#2dd4bf;--admin-batch-clear-color:#94a3b8;--theme-toggle-color:#327ecc;--theme-toggle-bg-color:#327ecc;--admin-theme-toggle-color:#000;--admin-theme-toggle-bg-color:#000;--not-found-title-text-color:linear-gradient(90deg,#6b9788,#6285ac);--floating-btn-bg:linear-gradient(135deg,#409eff,#66b1ff);--floating-btn-color:#fff;--floating-btn-shadow:0 4px 16px rgba(64,158,255,.4);--floating-btn-shadow-hover:0 8px 24px rgba(64,158,255,.5);--floating-btn-right:32px;--floating-btn-bottom:32px;--glass-bg:hsla(0,0%,100%,.45);--glass-bg-hover:hsla(0,0%,100%,.55);--glass-border:hsla(0,0%,100%,.5);--glass-border-hover:hsla(0,0%,100%,.6);--glass-shadow:0 4px 12px rgba(0,0,0,.06);--glass-shadow-hover:0 6px 16px rgba(0,0,0,.1);--glass-header-bg:hsla(0,0%,100%,.3);--glass-header-border:hsla(0,0%,100%,.4)}.dark{--bg-color:linear-gradient(90deg,#1c1c1c,#000);--popper-bg-color:rgba(0,0,0,.8);--popper-shadow:0 0 10px 2px hsla(0,0%,100%,.1);--image-preview-filter:brightness(0.8);--text-bg-color:hsla(0,0%,100%,.1);--background-image-filter:brightness(0.6);--upload-list-card-bg-color:rgba(0,0,0,.7);--upload-list-card-border:1px solid #8fadc8;--upload-list-card-box-shadow:-1px 2px 4px #c1ddf5ae;--upload-list-item-border:1px solid #8fadc8;--upload-list-dashboard-bg-color:rgba(0,0,0,.7);--upload-list-dashboard-shadow:0 2px 10px hsla(0,0%,100%,.1);--upload-list-file-icon-color:#8fadc8;--el-upload-dragger-bg-color:rgba(0,0,0,.6);--el-upload-dragger-border:3px dashed #8fadc8;--el-upload-dragger-border-color:#8fadc8;--el-upload-dragger-hover-box-shadow:0 0 10px 5px #8fadc8;--el-upload-dragger-uniform-color:#8fadc8;--paste-card-textarea-border-color:#8fadc8;--paste-card-textarea-box-shadow:0 0 6px 1px #8fadc8;--el-icon--upload-color:#ffebcd;--upload-text-color:#faebd7;--upload-header-color:#ffebcd;--upload-main-title-color:linear-gradient(90deg,#8fd3ff,#d7f4ff 55%,#a8d4f2);--upload-title-text-color:#cfe7f5;--upload-title-text-shadow:0 0 10px rgba(143,211,255,.16);--upload-title-hover-glow:rgba(143,211,255,.3);--upload-title-underline-bg:linear-gradient(90deg,transparent,rgba(143,211,255,.34),rgba(218,244,255,.86),hsla(0,0%,100%,.72),transparent);--upload-title-underline-shadow:0 0 12px rgba(143,211,255,.28),0 0 8px hsla(0,0%,100%,.12);--upload-title-crayon-deep:rgba(92,183,240,.96);--upload-title-crayon-base:rgba(137,211,252,.94);--upload-title-crayon-light:rgba(218,244,255,.9);--upload-title-crayon-edge:rgba(185,233,255,.6);--upload-title-crayon-fleck:hsla(0,0%,100%,.28);--upload-title-crayon-burr:rgba(62,156,220,.55);--upload-title-crayon-dust:rgba(96,180,236,.26);--toolbar-button-bg-color:rgba(0,0,0,.7);--toolbar-button-shadow:-1px 2px 4px hsla(0,0%,100%,.3);--toolbar-button-shadow-hover:-1px 2px 4px hsla(0,0%,100%,.5);--toolbar-button-color:#bedefd;--modern-action-group-bg:rgba(64,158,255,.12);--modern-action-group-border:rgba(64,158,255,.2);--logo-glow-color:#8fadc8;--modern-action-group-shadow:rgba(0,0,0,.2);--modern-action-group-hover-bg:rgba(64,158,255,.18);--modern-action-group-hover-shadow:rgba(64,158,255,.25);--upload-action-toolbar-bg:rgba(18,24,30,.56);--upload-action-toolbar-border:rgba(190,222,253,.14);--upload-action-toolbar-shadow:0 8px 22px rgba(0,0,0,.24),inset 0 1px 0 hsla(0,0%,100%,.06);--upload-action-toolbar-hover-bg:rgba(28,36,44,.68);--upload-action-toolbar-hover-border:rgba(190,222,253,.22);--upload-action-toolbar-hover-shadow:0 10px 26px rgba(0,0,0,.3),inset 0 1px 0 hsla(0,0%,100%,.08);--upload-action-btn-bg:hsla(0,0%,100%,.06);--upload-action-btn-color:#bedefd;--upload-action-btn-shadow:inset 0 1px 0 hsla(0,0%,100%,.06);--upload-action-btn-hover-bg:hsla(0,0%,100%,.1);--upload-action-btn-hover-shadow:0 6px 14px rgba(0,0,0,.22),inset 0 1px 0 hsla(0,0%,100%,.09);--upload-action-btn-active-shadow:inset 0 2px 6px rgba(0,0,0,.28);--upload-action-copy-color:#9ccdf7;--upload-action-retry-color:#9ddfbe;--upload-action-danger-color:#f0a8a8;--upload-action-danger-bg:hsla(0,87%,69%,.08);--upload-action-danger-hover-bg:hsla(0,87%,69%,.14);--upload-action-danger-hover-shadow:0 6px 14px rgba(0,0,0,.22),inset 0 1px 0 hsla(0,0%,100%,.08);--file-name-bg:linear-gradient(135deg,rgba(64,158,255,.12),rgba(64,158,255,.05));--file-name-border:rgba(64,158,255,.18);--file-name-hover-bg:linear-gradient(135deg,rgba(64,158,255,.18),rgba(64,158,255,.08));--file-name-hover-border:rgba(64,158,255,.3);--upload-list-item-bg:linear-gradient(135deg,rgba(30,30,30,.9),rgba(40,40,40,.7));--upload-list-item-border-color:rgba(64,158,255,.15);--upload-list-item-shadow:rgba(0,0,0,.15);--upload-list-item-hover-border:rgba(64,158,255,.35);--upload-list-item-hover-shadow:rgba(64,158,255,.2);--dashboard-title-bg:linear-gradient(135deg,rgba(64,158,255,.1),transparent);--page-footer-text-color:#f0f8ff;--page-footer-name-color:#faebd7;--login-container-bg-color:rgba(0,0,0,.6);--password-input-bg-color:rgba(77,77,77,.8);--password-input-border:1px solid #919191;--login-title-color:#f0f8ff;--login-container-box-shadow:-3px 2px 12px hsla(0,0%,100%,.12);--login-container-hover-box-shadow:-3px 2px 12px 4px hsla(0,0%,100%,.24);--login-submit-btn-bg-color:#8fadc8b4;--login-title-glow-color:rgba(143,173,200,.7);--login-input-underline-color:#a3c5e5;--login-input-underline-secondary-color:#b8d0e8;--login-input-label-focus-color:#a3c5e5;--dialog-bg-color:rgba(0,0,0,.8);--dialog-box-shadow:0 0 10px 2px hsla(0,0%,100%,.1);--tabs-dropdown-popper-bg-color:rgba(0,0,0,.2);--tabs-dropdown-popper-shadow:0 0 10px 2px hsla(0,0%,100%,.1);--admin-header-content-bg-color:rgba(0,0,0,.75);--admin-header-content-hover-bg-color:rgba(0,0,0,.85);--admin-header-content-border-bottom:1px solid hsla(0,0%,100%,.1);--admin-header-content-box-shadow:0 4px 6px hsla(0,0%,100%,.1);--admin-header-content-hover-box-shadow:0 6px 10px hsla(0,0%,100%,.2);--admin-container-bg-color:linear-gradient(90deg,#464545,#2d2d2d);--admin-container-color:#f0f0f0;--admin-dashborad-stats-bg-color:rgba(0,0,0,.9);--admin-dashborad-stats-hover-bg-color:#1e1e1e;--admin-dashboard-stats-shadow:0 2px 4px hsla(0,0%,100%,.1);--admin-dashboard-stats-hover-shadow:0 4px 6px hsla(0,0%,100%,.15);--admin-dashboard-search-card-bg-color:rgba(0,0,0,.9);--admin-dashboard-search-card-box-shadow:0 2px 6px hsla(0,0%,100%,.1);--admin-dashboard-btn-color:#f0f0f0;--admin-dashboard-btn-bg-color:rgba(0,0,0,.3);--admin-dashboard-btn-shadow:0 2px 4px hsla(0,0%,100%,.3);--admin-dashboard-btn-hover-shadow:0 4px 6px hsla(0,0%,100%,.3);--admin-dashboard-imgcard-bg-color:rgba(0,0,0,.6);--admin-dashboard-imgcard-shadow:0 2px 12px hsla(0,0%,100%,.1);--admin-dashboard-tag-suggestion-bg-color:#2d2d2d;--admin-dashboard-tag-suggestion-border-color:#555;--admin-dashboard-tag-suggestion-box-shadow:0 2px 12px hsla(0,0%,100%,.1);--admin-dashboard-tag-suggestion-item-hover-bg-color:#3a3a3a;--skeleton-bg-color:#3a3a3a;--skeleton-shimmer-color:hsla(0,0%,100%,.15);--admin-cuscfg-table-shadow:0 4px 6px rgba(0,0,0,.3),0 0 1px 1px hsla(0,0%,100%,.05);--admin-cuscfg-table-bg-color:rgba(45,45,45,.95);--admin-syscfg-tabs-border-color:#cfcccc47;--theme-toggle-color:#bedefd;--theme-toggle-bg-color:#bedefd;--admin-theme-toggle-color:#fff;--admin-theme-toggle-bg-color:#fcfcfc;--admin-batch-toolbar-bg:rgba(27,35,43,.64);--admin-batch-toolbar-border:rgba(190,222,253,.16);--admin-batch-toolbar-shadow:0 14px 34px rgba(0,0,0,.34),inset 0 1px 0 hsla(0,0%,100%,.06);--admin-batch-action-bg:hsla(0,0%,100%,.08);--admin-batch-action-shadow:0 5px 14px rgba(0,0,0,.18);--admin-batch-action-hover-bg:hsla(0,0%,100%,.14);--admin-batch-action-hover-shadow:0 8px 18px rgba(0,0,0,.24);--admin-batch-copy-color:#7dd3fc;--admin-batch-delete-color:#fb7185;--admin-batch-download-color:#7dd3fc;--admin-batch-move-color:#7dd3fc;--admin-batch-tag-color:#fde68a;--admin-batch-ban-color:#fda4af;--admin-batch-white-color:#99f6e4;--admin-batch-clear-color:#cbd5e1;--not-found-title-text-color:linear-gradient(90deg,#effac3,#f3a060);--floating-btn-bg:linear-gradient(135deg,#409eff,#2d8cf0);--floating-btn-color:#fff;--floating-btn-shadow:0 4px 16px rgba(0,0,0,.4);--floating-btn-shadow-hover:0 8px 24px rgba(0,0,0,.5);--glass-bg:rgba(30,30,30,.6);--glass-bg-hover:rgba(40,40,40,.7);--glass-border:hsla(0,0%,100%,.1);--glass-border-hover:hsla(0,0%,100%,.15);--glass-shadow:0 4px 12px rgba(0,0,0,.2);--glass-shadow-hover:0 6px 16px rgba(0,0,0,.3);--glass-header-bg:hsla(0,0%,100%,.03);--glass-header-border:hsla(0,0%,100%,.08)}.el-message{border-radius:50px!important;border:none!important;padding:10px 30px!important;box-shadow:0 4px 16px rgba(0,0,0,.2)!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background-color:rgba(40,40,40,.85)!important;min-width:unset!important;top:30px!important}.el-message .el-message__icon{font-size:18px!important;color:#fff!important}.el-message .el-message__content{font-size:16px!important;font-weight:500!important;color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.5px}.el-message--success .el-message__icon{color:#67c23a!important}.el-message--warning .el-message__icon{color:#e6a23c!important}.el-message--error .el-message__icon{color:#f56c6c!important}.dark .el-message{background-color:hsla(0,0%,100%,.2)!important;border:1px solid hsla(0,0%,100%,.1)!important;box-shadow:0 4px 16px rgba(0,0,0,.4)!important}.dialog-section{margin-bottom:24px;background:var(--el-fill-color-lighter);border-radius:12px;padding:16px;border:1px solid var(--el-border-color-lighter)}.section-header{display:flex;align-items:center;gap:8px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--el-border-color-lighter)}.section-title{font-size:15px;font-weight:600;color:var(--el-text-color-primary)}.section-help-icon{color:var(--el-text-color-secondary);cursor:pointer;font-size:14px;transition:color .2s}.section-help-icon:hover{color:var(--el-color-primary)}.section-content{display:flex;flex-direction:column;gap:16px}.radio-card-group{display:flex;flex-wrap:wrap;gap:10px}.radio-card-group .radio-card{margin-right:0;padding:10px 16px;border-radius:8px;background:var(--el-bg-color);border:1px solid var(--el-border-color-lighter);transition:all .2s ease}.radio-card-group .radio-card:hover{border-color:var(--el-color-primary-light-5)}.radio-card-group .radio-card.is-checked{background:linear-gradient(135deg,rgba(64,158,255,.1),rgba(56,189,248,.05));border-color:var(--el-color-primary)}.radio-card-group .el-radio__input{display:none}.radio-card-group .el-radio__label{padding-left:0;font-weight:500;display:flex;align-items:center;gap:8px}.setting-item{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--el-bg-color);border-radius:8px;border:1px solid var(--el-border-color-lighter)}.setting-label{font-size:14px;font-weight:500;color:var(--el-text-color-primary)}.setting-input{width:60%;max-width:250px}.dialog-action{display:flex;justify-content:flex-end;padding-top:16px}.confirm-btn{min-width:100px;border-radius:8px}@media (max-width:768px){.el-message{padding:8px 18px!important;border-radius:30px!important}.el-message .el-message__icon{font-size:14px!important}.el-message .el-message__content{font-size:13px!important}.dialog-section{padding:12px}.radio-card-group{flex-direction:column}.radio-card-group .radio-card{width:100%;text-align:center}.setting-item{flex-direction:column;align-items:flex-start;gap:10px}.setting-item .radio-card-group.compact{width:100%}.setting-input{width:100%;max-width:none}.radio-card-group.compact{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.radio-card-group.compact .radio-card{width:100%;box-sizing:border-box;justify-content:center;flex:1}.radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;justify-content:center;gap:6px}.radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}}.slider-item{flex-direction:column;align-items:flex-start;gap:12px}.slider-wrapper{display:flex;align-items:center;gap:12px;width:100%}.slider-wrapper .el-slider{flex:1;min-width:0}.slider-input{width:80px!important;flex-shrink:0}.slider-input .el-input__wrapper{padding:0 8px}.slider-input-wrapper{display:flex;align-items:center;gap:6px;flex-shrink:0}.slider-unit{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.slider-wrapper{gap:8px;width:100%}.slider-input{width:80px!important}.setting-input{width:100%!important;max-width:none!important}.dialog-section{overflow:hidden}.radio-card-group.grid-2x2{grid-template-columns:repeat(2,1fr);gap:8px}.radio-card-group.grid-2x2 .radio-card{padding:10px 12px;font-size:13px;justify-content:center}}.inline-help-icon{color:var(--el-text-color-secondary);cursor:pointer;font-size:13px;margin-left:6px;transition:color .2s}.inline-help-icon:hover{color:var(--el-color-primary)}.radio-card-group.compact{gap:8px}.radio-card-group.compact .radio-card{padding:8px 12px;font-size:13px}.radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;gap:6px}.radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}.channel-brand-telegram{color:#229ed9!important}.channel-brand-cfr2{color:#f38020!important}.channel-brand-s3{color:#f90!important}.channel-brand-discord{color:#5865f2!important}.channel-brand-huggingface{color:#ff9d00!important}.channel-brand-webdav{color:#14b8a6!important}.radio-card-group.grid-2x2{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.radio-card-group.grid-2x2 .radio-card{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (min-width:769px){.radio-card-group.grid-2x2 .radio-card{justify-content:flex-start;padding-left:20px}}.radio-icon{font-size:14px;opacity:.8;width:20px;text-align:center;display:inline-block}.radio-card.is-checked .radio-icon{opacity:1}.el-dialog,.el-message-box{border-radius:16px!important;overflow:hidden;box-shadow:0 12px 32px rgba(0,0,0,.2)!important;border:1px solid hsla(0,0%,100%,.5);background-color:hsla(0,0%,100%,.85)!important;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.el-dialog__header,.el-message-box__header{border-bottom:none;padding:16px 20px!important;margin-right:0!important;position:relative}.el-dialog__header:after{background:linear-gradient(90deg,transparent,rgba(156,163,175,.5) 20%,rgba(156,163,175,.8) 50%,rgba(156,163,175,.5) 80%,transparent)}.el-dialog__header:after,.el-message-box__header:after{content:"";position:absolute;bottom:0;left:20px;right:20px;height:1px}.el-message-box__header:after{background:linear-gradient(90deg,rgba(156,163,175,.8),rgba(156,163,175,.5) 30%,transparent 80%)}.el-dialog__body,.el-message-box__content{padding:20px!important}.el-dialog__footer,.el-message-box__btns{border-top:none;padding:12px 20px!important;background-color:transparent}.dark .el-dialog,.dark .el-message-box{background-color:rgba(30,30,30,.75)!important;border:1px solid hsla(0,0%,100%,.08)!important;box-shadow:0 12px 32px rgba(0,0,0,.5)!important}.dark .el-dialog__header,.dark .el-message-box__header{border-bottom:none}.dark .el-dialog__header:after{background:linear-gradient(90deg,transparent,rgba(156,163,175,.3) 20%,rgba(156,163,175,.5) 50%,rgba(156,163,175,.3) 80%,transparent)}.dark .el-message-box__header:after{background:linear-gradient(90deg,rgba(156,163,175,.5),rgba(156,163,175,.3) 30%,transparent 80%)}.dark .el-dialog__footer,.dark .el-message-box__btns{border-top:none;background-color:transparent}.dark .el-dialog__title,.dark .el-message-box__title{color:#e5eaf3}.dark .el-message-box__content{color:#cfd3dc}.el-loading-mask{border-radius:12px}.el-dropdown__popper.el-popper{border-radius:12px;border:none;background-color:var(--popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--popper-shadow)}.el-dropdown__popper.el-popper .el-dropdown-menu,.el-dropdown__popper.el-popper .el-dropdown-menu__item{background:none;border:none}.el-popper.is-light>.el-popper__arrow:before{background:none!important;border:none!important}*,body,html{scrollbar-width:none!important;-ms-overflow-style:none!important}::-webkit-scrollbar,body::-webkit-scrollbar,html::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.os-theme-dark{--os-handle-bg:hsla(0,0%,50%,.5);--os-handle-bg-hover:hsla(0,0%,50%,.7);--os-handle-bg-active:hsla(0,0%,50%,.85)}.dark .os-theme-dark,html.dark .os-theme-dark{--os-handle-bg:hsla(0,0%,71%,.6);--os-handle-bg-hover:hsla(0,0%,71%,.75);--os-handle-bg-active:hsla(0,0%,71%,.9)}.os-theme-dark .os-scrollbar,.os-theme-dark .os-scrollbar-horizontal,.os-theme-dark .os-scrollbar-vertical{--os-size:10px;--os-padding-perpendicular:2px;--os-padding-axis:2px;--os-track-bg:transparent;--os-track-bg-hover:transparent;--os-track-bg-active:transparent}.os-theme-dark .os-scrollbar .os-scrollbar-handle{border-radius:10px!important;transition:background-color .2s ease,opacity .2s ease!important} \ No newline at end of file diff --git a/frontend-dist/css/app.b63c4c0f.css.gz b/frontend-dist/css/app.b63c4c0f.css.gz deleted file mode 100644 index 7487379b..00000000 Binary files a/frontend-dist/css/app.b63c4c0f.css.gz and /dev/null differ diff --git a/frontend-dist/css/app.ed6a21b7.css b/frontend-dist/css/app.ed6a21b7.css new file mode 100644 index 00000000..01e3cc40 --- /dev/null +++ b/frontend-dist/css/app.ed6a21b7.css @@ -0,0 +1 @@ +@font-face{font-family:Pacifico;src:url(/fonts/Pacifico-Regular.dc63ac94.woff2) format("woff2");font-display:swap}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50}nav{padding:30px}nav a{font-weight:700;color:#2c3e50}nav a.router-link-exact-active{color:#42b983}body{margin:0;padding:0;background-color:#f8f8f8}:focus-visible{outline:none}*{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}:root{--bg-color:linear-gradient(90deg,#efe8e8,#e4f8ff);--popper-bg-color:hsla(0,0%,100%,.8);--popper-shadow:0 0 10px 2px rgba(0,0,0,.1);--image-preview-filter:brightness(1);--text-bg-color:rgba(0,0,0,.1);--background-image-filter:brightness(1);--upload-list-card-bg-color:hsla(0,0%,100%,.7);--upload-list-card-border:1px solid #327ecc50;--upload-list-card-box-shadow:1px 2px 5px 1px #327ecc50;--upload-list-item-border:1px solid #a5bef7;--upload-list-dashboard-bg-color:hsla(0,0%,100%,.7);--upload-list-dashboard-shadow:0 2px 10px rgba(0,0,0,.1);--upload-list-file-icon-color:#327ecc;--el-upload-dragger-bg-color:hsla(0,0%,100%,.6);--el-upload-dragger-border:3px dashed #409eff;--el-upload-dragger-border-color:#409eff;--el-upload-dragger-hover-box-shadow:0 0 10px 5px #409eff;--el-upload-dragger-uniform-color:#409eff;--paste-card-textarea-border-color:#409eff;--paste-card-textarea-box-shadow:0 0 6px 1px #409eff;--el-icon--upload-color:#1f8bf8;--upload-text-color:rgba(58,58,58,.8);--upload-header-color:rgba(58,58,58,.8);--upload-main-title-color:linear-gradient(90deg,#a1e3cc,#78aeec);--upload-title-text-color:rgba(58,58,58,.8);--upload-title-text-shadow:none;--upload-title-hover-glow:rgba(64,158,255,.32);--upload-title-underline-bg:linear-gradient(90deg,transparent,rgba(161,227,204,.7),rgba(120,174,236,.85),transparent);--upload-title-underline-shadow:0 0 10px rgba(120,174,236,.36);--upload-title-crayon-deep:rgba(72,151,211,.78);--upload-title-crayon-base:rgba(116,186,232,.78);--upload-title-crayon-light:rgba(222,246,255,.9);--upload-title-crayon-edge:rgba(60,139,201,.38);--upload-title-crayon-fleck:hsla(0,0%,100%,.46);--upload-title-crayon-burr:rgba(76,154,213,.3);--upload-title-crayon-dust:rgba(118,183,224,.18);--modern-action-group-bg:rgba(64,158,255,.08);--modern-action-group-border:rgba(64,158,255,.15);--logo-glow-color:#409eff;--modern-action-group-shadow:rgba(0,0,0,.06);--modern-action-group-hover-bg:rgba(64,158,255,.12);--modern-action-group-hover-shadow:rgba(64,158,255,.15);--upload-action-toolbar-bg:rgba(230,241,247,.58);--upload-action-toolbar-border:rgba(180,212,226,.42);--upload-action-toolbar-shadow:0 8px 22px rgba(64,120,150,.07),inset 0 1px 0 hsla(0,0%,100%,.38);--upload-action-toolbar-hover-bg:rgba(220,236,244,.68);--upload-action-toolbar-hover-border:rgba(156,199,219,.46);--upload-action-toolbar-hover-shadow:0 10px 26px rgba(64,120,150,.1),inset 0 1px 0 hsla(0,0%,100%,.44);--upload-action-btn-bg:hsla(0,0%,100%,.5);--upload-action-btn-color:#327ecc;--upload-action-btn-shadow:inset 0 1px 0 hsla(0,0%,100%,.45);--upload-action-btn-hover-bg:hsla(0,0%,100%,.74);--upload-action-btn-hover-shadow:0 6px 14px rgba(67,102,122,.12),inset 0 1px 0 hsla(0,0%,100%,.66);--upload-action-btn-active-shadow:inset 0 2px 6px rgba(20,50,70,.1);--upload-action-copy-color:#2f86c9;--upload-action-retry-color:#3a9b78;--upload-action-danger-color:#d86666;--upload-action-danger-bg:hsla(0,100%,98%,.58);--upload-action-danger-hover-bg:hsla(0,100%,97%,.78);--upload-action-danger-hover-shadow:0 6px 14px hsla(0,59%,62%,.14),inset 0 1px 0 hsla(0,0%,100%,.7);--file-name-bg:linear-gradient(135deg,rgba(64,158,255,.08),rgba(64,158,255,.03));--file-name-border:rgba(64,158,255,.12);--file-name-hover-bg:linear-gradient(135deg,rgba(64,158,255,.12),rgba(64,158,255,.06));--file-name-hover-border:rgba(64,158,255,.2);--upload-list-item-bg:linear-gradient(135deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.7));--upload-list-item-border-color:rgba(64,158,255,.1);--upload-list-item-shadow:rgba(0,0,0,.04);--upload-list-item-hover-border:rgba(64,158,255,.25);--upload-list-item-hover-shadow:rgba(64,158,255,.12);--dashboard-title-bg:linear-gradient(135deg,rgba(64,158,255,.06),transparent);--toolbar-button-bg-color:hsla(0,0%,100%,.5);--toolbar-button-shadow:1px 2px 4px rgba(0,0,0,.3);--toolbar-button-shadow-hover:1px 2px 4px rgba(0,0,0,.5);--toolbar-button-color:#327ecc;--page-footer-text-color:rgba(58,58,58,.8);--page-footer-name-color:rgba(12,76,105,.8);--login-container-bg-color:hsla(0,0%,100%,.6);--password-input-bg-color:hsla(0,0%,100%,.9);--password-input-border:1px solid #dcdfe6;--login-title-color:#000;--login-container-box-shadow:0 0 12px rgba(0,0,0,.12);--login-container-hover-box-shadow:0 0 12px 4px rgba(0,0,0,.24);--login-submit-btn-bg-color:#487cb0e8;--login-title-glow-color:rgba(52,152,219,.5);--login-input-underline-color:#5b9bd3;--login-input-underline-secondary-color:#7ba9d8;--login-input-label-focus-color:#5b9bd3;--dialog-bg-color:hsla(0,0%,100%,.7);--dialog-box-shadow:0 0 10px 2px rgba(0,0,0,.1);--tabs-dropdown-popper-bg-color:hsla(0,0%,100%,.94);--tabs-dropdown-popper-shadow:0 12px 30px rgba(36,54,72,.16),0 2px 8px rgba(36,54,72,.08);--tabs-switcher-hover-bg:rgba(91,128,148,.1);--tabs-switcher-border-color:rgba(91,128,148,.16);--tabs-switcher-hover-border-color:rgba(91,128,148,.24);--admin-header-content-bg-color:hsla(0,0%,100%,.75);--admin-header-content-hover-bg-color:hsla(0,0%,100%,.85);--admin-header-content-border-bottom:1px solid rgba(0,0,0,.1);--admin-header-content-box-shadow:0 4px 6px rgba(0,0,0,.1);--admin-header-content-hover-box-shadow:0 6px 10px rgba(0,0,0,.2);--admin-container-bg-color:linear-gradient(90deg,#fdf3f6,#e4f8ff);--admin-container-color:#333;--admin-dashborad-stats-bg-color:hsla(0,0%,100%,.9);--admin-dashborad-stats-hover-bg-color:#f0eaf8;--admin-dashboard-search-card-bg-color:hsla(0,0%,100%,.9);--admin-dashboard-stats-shadow:0 2px 4px rgba(0,0,0,.05);--admin-dashboard-stats-hover-shadow:0 4px 6px rgba(0,0,0,.1);--admin-dashboard-search-card-box-shadow:0 2px 6px rgba(0,0,0,.1);--admin-dashboard-btn-color:#000;--admin-dashboard-btn-bg-color:hsla(0,0%,100%,.3);--admin-dashboard-btn-shadow:0 2px 4px rgba(0,0,0,.3);--admin-dashboard-btn-hover-shadow:0 4px 6px rgba(0,0,0,.3);--admin-dashboard-imgcard-bg-color:hsla(0,0%,100%,.6);--admin-dashboard-imgcard-shadow:0 2px 12px rgba(0,0,0,.1);--admin-dashboard-tag-suggestion-bg-color:#fff;--admin-dashboard-tag-suggestion-border-color:#dcdfe6;--admin-dashboard-tag-suggestion-box-shadow:0 2px 12px rgba(0,0,0,.1);--admin-dashboard-tag-suggestion-item-hover-bg-color:#f5f7fa;--skeleton-bg-color:#e0e0e0;--skeleton-shimmer-color:hsla(0,0%,100%,.5);--admin-cuscfg-table-shadow:0 4px 6px rgba(0,0,0,.1);--admin-cuscfg-table-bg-color:hsla(0,0%,100%,.95);--admin-syscfg-tabs-border-color:#3c3c3c4c;--admin-purple:#b39ddb;--admin-batch-toolbar-bg:rgba(247,251,252,.74);--admin-batch-toolbar-border:rgba(135,172,188,.24);--admin-batch-toolbar-shadow:0 10px 28px rgba(91,128,148,.1),inset 0 1px 0 hsla(0,0%,100%,.5);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:rgba(64,158,255,.08);--admin-batch-action-hover-shadow:none;--admin-batch-delete-color:#bd5864;--admin-batch-tag-color:#b98732;--admin-batch-clear-color:#728998;--theme-toggle-color:#327ecc;--theme-toggle-bg-color:#327ecc;--admin-theme-toggle-color:#000;--admin-theme-toggle-bg-color:#000;--not-found-title-text-color:linear-gradient(90deg,#6b9788,#6285ac);--floating-btn-bg:linear-gradient(135deg,#409eff,#66b1ff);--floating-btn-color:#fff;--floating-btn-shadow:0 4px 16px rgba(64,158,255,.4);--floating-btn-shadow-hover:0 8px 24px rgba(64,158,255,.5);--floating-btn-right:32px;--floating-btn-bottom:32px;--glass-bg:hsla(0,0%,100%,.45);--glass-bg-hover:hsla(0,0%,100%,.55);--glass-border:hsla(0,0%,100%,.5);--glass-border-hover:hsla(0,0%,100%,.6);--glass-shadow:0 4px 12px rgba(0,0,0,.06);--glass-shadow-hover:0 6px 16px rgba(0,0,0,.1);--glass-header-bg:hsla(0,0%,100%,.3);--glass-header-border:hsla(0,0%,100%,.4)}.dark{--bg-color:linear-gradient(90deg,#1c1c1c,#000);--popper-bg-color:rgba(0,0,0,.8);--popper-shadow:0 0 10px 2px hsla(0,0%,100%,.1);--image-preview-filter:brightness(0.8);--text-bg-color:hsla(0,0%,100%,.1);--background-image-filter:brightness(0.6);--upload-list-card-bg-color:rgba(0,0,0,.7);--upload-list-card-border:1px solid #8fadc8;--upload-list-card-box-shadow:-1px 2px 4px #c1ddf5ae;--upload-list-item-border:1px solid #8fadc8;--upload-list-dashboard-bg-color:rgba(0,0,0,.7);--upload-list-dashboard-shadow:0 2px 10px hsla(0,0%,100%,.1);--upload-list-file-icon-color:#8fadc8;--el-upload-dragger-bg-color:rgba(0,0,0,.6);--el-upload-dragger-border:3px dashed #8fadc8;--el-upload-dragger-border-color:#8fadc8;--el-upload-dragger-hover-box-shadow:0 0 10px 5px #8fadc8;--el-upload-dragger-uniform-color:#8fadc8;--paste-card-textarea-border-color:#8fadc8;--paste-card-textarea-box-shadow:0 0 6px 1px #8fadc8;--el-icon--upload-color:#ffebcd;--upload-text-color:#faebd7;--upload-header-color:#ffebcd;--upload-main-title-color:linear-gradient(90deg,#8fd3ff,#d7f4ff 55%,#a8d4f2);--upload-title-text-color:#cfe7f5;--upload-title-text-shadow:0 0 10px rgba(143,211,255,.16);--upload-title-hover-glow:rgba(143,211,255,.3);--upload-title-underline-bg:linear-gradient(90deg,transparent,rgba(143,211,255,.34),rgba(218,244,255,.86),hsla(0,0%,100%,.72),transparent);--upload-title-underline-shadow:0 0 12px rgba(143,211,255,.28),0 0 8px hsla(0,0%,100%,.12);--upload-title-crayon-deep:rgba(92,183,240,.96);--upload-title-crayon-base:rgba(137,211,252,.94);--upload-title-crayon-light:rgba(218,244,255,.9);--upload-title-crayon-edge:rgba(185,233,255,.6);--upload-title-crayon-fleck:hsla(0,0%,100%,.28);--upload-title-crayon-burr:rgba(62,156,220,.55);--upload-title-crayon-dust:rgba(96,180,236,.26);--toolbar-button-bg-color:rgba(0,0,0,.7);--toolbar-button-shadow:-1px 2px 4px hsla(0,0%,100%,.3);--toolbar-button-shadow-hover:-1px 2px 4px hsla(0,0%,100%,.5);--toolbar-button-color:#bedefd;--modern-action-group-bg:rgba(64,158,255,.12);--modern-action-group-border:rgba(64,158,255,.2);--logo-glow-color:#8fadc8;--modern-action-group-shadow:rgba(0,0,0,.2);--modern-action-group-hover-bg:rgba(64,158,255,.18);--modern-action-group-hover-shadow:rgba(64,158,255,.25);--upload-action-toolbar-bg:rgba(18,24,30,.56);--upload-action-toolbar-border:rgba(190,222,253,.14);--upload-action-toolbar-shadow:0 8px 22px rgba(0,0,0,.24),inset 0 1px 0 hsla(0,0%,100%,.06);--upload-action-toolbar-hover-bg:rgba(28,36,44,.68);--upload-action-toolbar-hover-border:rgba(190,222,253,.22);--upload-action-toolbar-hover-shadow:0 10px 26px rgba(0,0,0,.3),inset 0 1px 0 hsla(0,0%,100%,.08);--upload-action-btn-bg:hsla(0,0%,100%,.06);--upload-action-btn-color:#bedefd;--upload-action-btn-shadow:inset 0 1px 0 hsla(0,0%,100%,.06);--upload-action-btn-hover-bg:hsla(0,0%,100%,.1);--upload-action-btn-hover-shadow:0 6px 14px rgba(0,0,0,.22),inset 0 1px 0 hsla(0,0%,100%,.09);--upload-action-btn-active-shadow:inset 0 2px 6px rgba(0,0,0,.28);--upload-action-copy-color:#9ccdf7;--upload-action-retry-color:#9ddfbe;--upload-action-danger-color:#f0a8a8;--upload-action-danger-bg:hsla(0,87%,69%,.08);--upload-action-danger-hover-bg:hsla(0,87%,69%,.14);--upload-action-danger-hover-shadow:0 6px 14px rgba(0,0,0,.22),inset 0 1px 0 hsla(0,0%,100%,.08);--file-name-bg:linear-gradient(135deg,rgba(64,158,255,.12),rgba(64,158,255,.05));--file-name-border:rgba(64,158,255,.18);--file-name-hover-bg:linear-gradient(135deg,rgba(64,158,255,.18),rgba(64,158,255,.08));--file-name-hover-border:rgba(64,158,255,.3);--upload-list-item-bg:linear-gradient(135deg,rgba(30,30,30,.9),rgba(40,40,40,.7));--upload-list-item-border-color:rgba(64,158,255,.15);--upload-list-item-shadow:rgba(0,0,0,.15);--upload-list-item-hover-border:rgba(64,158,255,.35);--upload-list-item-hover-shadow:rgba(64,158,255,.2);--dashboard-title-bg:linear-gradient(135deg,rgba(64,158,255,.1),transparent);--page-footer-text-color:#f0f8ff;--page-footer-name-color:#faebd7;--login-container-bg-color:rgba(0,0,0,.6);--password-input-bg-color:rgba(77,77,77,.8);--password-input-border:1px solid #919191;--login-title-color:#f0f8ff;--login-container-box-shadow:-3px 2px 12px hsla(0,0%,100%,.12);--login-container-hover-box-shadow:-3px 2px 12px 4px hsla(0,0%,100%,.24);--login-submit-btn-bg-color:#8fadc8b4;--login-title-glow-color:rgba(143,173,200,.7);--login-input-underline-color:#a3c5e5;--login-input-underline-secondary-color:#b8d0e8;--login-input-label-focus-color:#a3c5e5;--dialog-bg-color:rgba(0,0,0,.8);--dialog-box-shadow:0 0 10px 2px hsla(0,0%,100%,.1);--tabs-dropdown-popper-bg-color:rgba(24,30,38,.94);--tabs-dropdown-popper-shadow:0 12px 30px rgba(0,0,0,.34),0 2px 8px rgba(0,0,0,.24);--tabs-switcher-hover-bg:rgba(190,222,253,.08);--tabs-switcher-border-color:rgba(190,222,253,.1);--tabs-switcher-hover-border-color:rgba(190,222,253,.16);--admin-header-content-bg-color:rgba(0,0,0,.75);--admin-header-content-hover-bg-color:rgba(0,0,0,.85);--admin-header-content-border-bottom:1px solid hsla(0,0%,100%,.1);--admin-header-content-box-shadow:0 4px 6px hsla(0,0%,100%,.1);--admin-header-content-hover-box-shadow:0 6px 10px hsla(0,0%,100%,.2);--admin-container-bg-color:linear-gradient(90deg,#464545,#2d2d2d);--admin-container-color:#f0f0f0;--admin-dashborad-stats-bg-color:rgba(0,0,0,.9);--admin-dashborad-stats-hover-bg-color:#1e1e1e;--admin-dashboard-stats-shadow:0 2px 4px hsla(0,0%,100%,.1);--admin-dashboard-stats-hover-shadow:0 4px 6px hsla(0,0%,100%,.15);--admin-dashboard-search-card-bg-color:rgba(0,0,0,.9);--admin-dashboard-search-card-box-shadow:0 2px 6px hsla(0,0%,100%,.1);--admin-dashboard-btn-color:#f0f0f0;--admin-dashboard-btn-bg-color:rgba(0,0,0,.3);--admin-dashboard-btn-shadow:0 2px 4px hsla(0,0%,100%,.3);--admin-dashboard-btn-hover-shadow:0 4px 6px hsla(0,0%,100%,.3);--admin-dashboard-imgcard-bg-color:rgba(0,0,0,.6);--admin-dashboard-imgcard-shadow:0 2px 12px hsla(0,0%,100%,.1);--admin-dashboard-tag-suggestion-bg-color:#2d2d2d;--admin-dashboard-tag-suggestion-border-color:#555;--admin-dashboard-tag-suggestion-box-shadow:0 2px 12px hsla(0,0%,100%,.1);--admin-dashboard-tag-suggestion-item-hover-bg-color:#3a3a3a;--skeleton-bg-color:#3a3a3a;--skeleton-shimmer-color:hsla(0,0%,100%,.15);--admin-cuscfg-table-shadow:0 4px 6px rgba(0,0,0,.3),0 0 1px 1px hsla(0,0%,100%,.05);--admin-cuscfg-table-bg-color:rgba(45,45,45,.95);--admin-syscfg-tabs-border-color:#cfcccc47;--theme-toggle-color:#bedefd;--theme-toggle-bg-color:#bedefd;--admin-theme-toggle-color:#fff;--admin-theme-toggle-bg-color:#fcfcfc;--admin-batch-toolbar-bg:rgba(30,37,43,.58);--admin-batch-toolbar-border:rgba(190,222,253,.1);--admin-batch-toolbar-shadow:0 10px 28px rgba(0,0,0,.22),inset 0 1px 0 hsla(0,0%,100%,.04);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:rgba(190,222,253,.09);--admin-batch-action-hover-shadow:none;--admin-batch-delete-color:#ee9aa4;--admin-batch-tag-color:#d8bd78;--admin-batch-clear-color:#bdcbd5;--not-found-title-text-color:linear-gradient(90deg,#effac3,#f3a060);--floating-btn-bg:linear-gradient(135deg,#409eff,#2d8cf0);--floating-btn-color:#fff;--floating-btn-shadow:0 4px 16px rgba(0,0,0,.4);--floating-btn-shadow-hover:0 8px 24px rgba(0,0,0,.5);--glass-bg:rgba(30,30,30,.6);--glass-bg-hover:rgba(40,40,40,.7);--glass-border:hsla(0,0%,100%,.1);--glass-border-hover:hsla(0,0%,100%,.15);--glass-shadow:0 4px 12px rgba(0,0,0,.2);--glass-shadow-hover:0 6px 16px rgba(0,0,0,.3);--glass-header-bg:hsla(0,0%,100%,.03);--glass-header-border:hsla(0,0%,100%,.08)}.el-message{border-radius:50px!important;border:none!important;padding:10px 30px!important;box-shadow:0 4px 16px rgba(0,0,0,.2)!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background-color:rgba(40,40,40,.85)!important;min-width:unset!important;top:30px!important}.el-message .el-message__icon{font-size:18px!important;color:#fff!important}.el-message .el-message__content{font-size:16px!important;font-weight:500!important;color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.5px}.el-message--success .el-message__icon{color:#67c23a!important}.el-message--warning .el-message__icon{color:#e6a23c!important}.el-message--error .el-message__icon{color:#f56c6c!important}.dark .el-message{background-color:hsla(0,0%,100%,.2)!important;border:1px solid hsla(0,0%,100%,.1)!important;box-shadow:0 4px 16px rgba(0,0,0,.4)!important}.dialog-section{margin-bottom:24px;background:var(--el-fill-color-lighter);border-radius:12px;padding:16px;border:1px solid var(--el-border-color-lighter)}.section-header{display:flex;align-items:center;gap:8px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--el-border-color-lighter)}.section-title{font-size:15px;font-weight:600;color:var(--el-text-color-primary)}.section-help-icon{color:var(--el-text-color-secondary);cursor:pointer;font-size:14px;transition:color .2s}.section-help-icon:hover{color:var(--el-color-primary)}.section-content{display:flex;flex-direction:column;gap:16px}.radio-card-group{display:flex;flex-wrap:wrap;gap:10px}.radio-card-group .radio-card{margin-right:0;padding:10px 16px;border-radius:8px;background:var(--el-bg-color);border:1px solid var(--el-border-color-lighter);transition:all .2s ease}.radio-card-group .radio-card:hover{border-color:var(--el-color-primary-light-5)}.radio-card-group .radio-card.is-checked{background:linear-gradient(135deg,rgba(64,158,255,.1),rgba(56,189,248,.05));border-color:var(--el-color-primary)}.radio-card-group .el-radio__input{display:none}.radio-card-group .el-radio__label{padding-left:0;font-weight:500;display:flex;align-items:center;gap:8px}.setting-item{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--el-bg-color);border-radius:8px;border:1px solid var(--el-border-color-lighter)}.setting-label{font-size:14px;font-weight:500;color:var(--el-text-color-primary)}.setting-input{width:60%;max-width:250px}.dialog-action{display:flex;justify-content:flex-end;padding-top:16px}.confirm-btn{min-width:100px;border-radius:8px}@media (max-width:768px){.el-message{padding:8px 18px!important;border-radius:30px!important}.el-message .el-message__icon{font-size:14px!important}.el-message .el-message__content{font-size:13px!important}.dialog-section{padding:12px}.radio-card-group{flex-direction:column}.radio-card-group .radio-card{width:100%;text-align:center}.setting-item{flex-direction:column;align-items:flex-start;gap:10px}.setting-item .radio-card-group.compact{width:100%}.setting-input{width:100%;max-width:none}.radio-card-group.compact{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.radio-card-group.compact .radio-card{width:100%;box-sizing:border-box;justify-content:center;flex:1}.radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;justify-content:center;gap:6px}.radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}}.slider-item{flex-direction:column;align-items:flex-start;gap:12px}.slider-wrapper{display:flex;align-items:center;gap:12px;width:100%}.slider-wrapper .el-slider{flex:1;min-width:0}.slider-input{width:80px!important;flex-shrink:0}.slider-input .el-input__wrapper{padding:0 8px}.slider-input-wrapper{display:flex;align-items:center;gap:6px;flex-shrink:0}.slider-unit{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.slider-wrapper{gap:8px;width:100%}.slider-input{width:80px!important}.setting-input{width:100%!important;max-width:none!important}.dialog-section{overflow:hidden}.radio-card-group.grid-2x2{grid-template-columns:repeat(2,1fr);gap:8px}.radio-card-group.grid-2x2 .radio-card{padding:10px 12px;font-size:13px;justify-content:center}}.inline-help-icon{color:var(--el-text-color-secondary);cursor:pointer;font-size:13px;margin-left:6px;transition:color .2s}.inline-help-icon:hover{color:var(--el-color-primary)}.radio-card-group.compact{gap:8px}.radio-card-group.compact .radio-card{padding:8px 12px;font-size:13px}.radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;gap:6px}.radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}.channel-brand-telegram{color:#229ed9!important}.channel-brand-cfr2{color:#f38020!important}.channel-brand-s3{color:#f90!important}.channel-brand-discord{color:#5865f2!important}.channel-brand-huggingface{color:#ff9d00!important}.channel-brand-webdav{color:#14b8a6!important}.radio-card-group.grid-2x2{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.radio-card-group.grid-2x2 .radio-card{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (min-width:769px){.radio-card-group.grid-2x2 .radio-card{justify-content:flex-start;padding-left:20px}}.radio-icon{font-size:14px;opacity:.8;width:20px;text-align:center;display:inline-block}.radio-card.is-checked .radio-icon{opacity:1}.el-dialog,.el-message-box{border-radius:16px!important;overflow:hidden;box-shadow:0 12px 32px rgba(0,0,0,.2)!important;border:1px solid hsla(0,0%,100%,.5);background-color:hsla(0,0%,100%,.85)!important;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.el-dialog__header,.el-message-box__header{border-bottom:none;padding:16px 20px!important;margin-right:0!important;position:relative}.el-dialog__header:after{background:linear-gradient(90deg,transparent,rgba(156,163,175,.5) 20%,rgba(156,163,175,.8) 50%,rgba(156,163,175,.5) 80%,transparent)}.el-dialog__header:after,.el-message-box__header:after{content:"";position:absolute;bottom:0;left:20px;right:20px;height:1px}.el-message-box__header:after{background:linear-gradient(90deg,rgba(156,163,175,.8),rgba(156,163,175,.5) 30%,transparent 80%)}.el-dialog__body,.el-message-box__content{padding:20px!important}.el-dialog__footer,.el-message-box__btns{border-top:none;padding:12px 20px!important;background-color:transparent}.dark .el-dialog,.dark .el-message-box{background-color:rgba(30,30,30,.75)!important;border:1px solid hsla(0,0%,100%,.08)!important;box-shadow:0 12px 32px rgba(0,0,0,.5)!important}.dark .el-dialog__header,.dark .el-message-box__header{border-bottom:none}.dark .el-dialog__header:after{background:linear-gradient(90deg,transparent,rgba(156,163,175,.3) 20%,rgba(156,163,175,.5) 50%,rgba(156,163,175,.3) 80%,transparent)}.dark .el-message-box__header:after{background:linear-gradient(90deg,rgba(156,163,175,.5),rgba(156,163,175,.3) 30%,transparent 80%)}.dark .el-dialog__footer,.dark .el-message-box__btns{border-top:none;background-color:transparent}.dark .el-dialog__title,.dark .el-message-box__title{color:#e5eaf3}.dark .el-message-box__content{color:#cfd3dc}.el-loading-mask{border-radius:12px}.el-dropdown__popper.el-popper{border-radius:12px;border:none;background-color:var(--popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--popper-shadow)}.el-dropdown__popper.el-popper .el-dropdown-menu,.el-dropdown__popper.el-popper .el-dropdown-menu__item{background:none;border:none}.el-popper.is-light>.el-popper__arrow:before{background:none!important;border:none!important}*,body,html{scrollbar-width:none!important;-ms-overflow-style:none!important}::-webkit-scrollbar,body::-webkit-scrollbar,html::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.os-theme-dark{--os-handle-bg:hsla(0,0%,50%,.5);--os-handle-bg-hover:hsla(0,0%,50%,.7);--os-handle-bg-active:hsla(0,0%,50%,.85)}.dark .os-theme-dark,html.dark .os-theme-dark{--os-handle-bg:hsla(0,0%,71%,.6);--os-handle-bg-hover:hsla(0,0%,71%,.75);--os-handle-bg-active:hsla(0,0%,71%,.9)}.os-theme-dark .os-scrollbar,.os-theme-dark .os-scrollbar-horizontal,.os-theme-dark .os-scrollbar-vertical{--os-size:10px;--os-padding-perpendicular:2px;--os-padding-axis:2px;--os-track-bg:transparent;--os-track-bg-hover:transparent;--os-track-bg-active:transparent}.os-theme-dark .os-scrollbar .os-scrollbar-handle{border-radius:10px!important;transition:background-color .2s ease,opacity .2s ease!important} \ No newline at end of file diff --git a/frontend-dist/css/app.ed6a21b7.css.gz b/frontend-dist/css/app.ed6a21b7.css.gz new file mode 100644 index 00000000..e9dde12f Binary files /dev/null and b/frontend-dist/css/app.ed6a21b7.css.gz differ diff --git a/frontend-dist/index.html b/frontend-dist/index.html index 66206865..955787a7 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 dbde1d69..5bb722f8 100644 Binary files a/frontend-dist/index.html.gz and b/frontend-dist/index.html.gz differ diff --git a/frontend-dist/js/142.fc366b6d.js b/frontend-dist/js/142.fc366b6d.js new file mode 100644 index 00000000..4cd8ce65 --- /dev/null +++ b/frontend-dist/js/142.fc366b6d.js @@ -0,0 +1,2 @@ +"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[142],{213:function(e,t,n){n(85331),n(19104)},4318:function(){},7835:function(e,t,n){e.exports=n.p+"img/background-light.f17603bc.jpg"},10456:function(e,t,n){n(85331)},10732:function(e,t,n){e.exports=n.p+"img/background.ea1b7ee7.jpg"},18785:function(e,t,n){n(85331)},19104:function(e,t,n){n(85331)},30694:function(e,t,n){n(85331)},36600:function(e,t,n){n.d(t,{A:function(){return x}});var a=n(54047),i=n(56768),s=n(45130),o=n(24232);const r={id:"themeMaskAdmin"},l=["cx","cy","r"],c=["r"],u=["opacity"];function g(e,t,n,a,g,d){const m=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",{id:"themeToggle",onClick:t[0]||(t[0]=(...e)=>d.handleToggleClick&&d.handleToggleClick(...e))},[(0,i.bF)(s.eB,{name:"icon-fade",mode:"out-in"},{default:(0,i.k6)(()=>[g.isAuto?((0,i.uX)(),(0,i.Wv)(m,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.3em",color:"var(--admin-theme-toggle-color)"}})):((0,i.uX)(),(0,i.CE)("svg",{key:"sun-moon",class:(0,o.C4)(["theme_toggle_svg",{dark:g.isDark}]),width:"1.3em",height:"1.3em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,i.Lk)("mask",r,[t[1]||(t[1]=(0,i.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,i.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:g.isDark?"50%":"100%",cy:g.isDark?"23%":"0%",r:g.isDark?"9":"5"},null,8,l)]),(0,i.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:g.isDark?"9":"5",mask:"url(#themeMaskAdmin)"},null,8,c),(0,i.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:g.isDark?0:1},[...t[2]||(t[2]=[(0,i.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,i.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,i.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,i.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,i.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,i.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,i.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,i.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,u)],2))]),_:1})])}var d={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))}}},m=n(71241);const h=(0,m.A)(d,[["render",g],["__scopeId","data-v-5c149ed5"]]);var p=h;const k={class:"tabs"},b=["aria-expanded"],y={class:"page-switcher-title"},f={class:"page-options",role:"menu"},I=["onClick"];function v(e,t,n,r,l,c){const u=(0,i.g2)("font-awesome-icon"),g=p,d=a.A;return(0,i.uX)(),(0,i.CE)("div",k,[(0,i.Lk)("div",{class:(0,o.C4)(["page-switcher",{"is-open":l.isPageMenuOpen}]),role:"navigation",onClick:t[1]||(t[1]=(0,s.D$)(()=>{},["stop"]))},[(0,i.Lk)("button",{class:"title page-switcher-trigger",type:"button","aria-expanded":l.isPageMenuOpen,onClick:t[0]||(t[0]=(...e)=>c.togglePageMenu&&c.togglePageMenu(...e))},[(0,i.bF)(u,{icon:c.iconName,class:"fa-images"},null,8,["icon"]),(0,i.Lk)("span",y,(0,o.v_)(c.titleName),1),(0,i.bF)(u,{icon:"chevron-down",class:"page-switcher-arrow"})],8,b),(0,i.Lk)("div",f,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(c.pageOptions,t=>((0,i.uX)(),(0,i.CE)("button",{key:t.name,class:(0,o.C4)(["page-option",{"is-active":n.activeTab===t.name}]),type:"button",role:"menuitem",onClick:e=>c.handleTabClick(t.name)},[(0,i.bF)(u,{icon:t.icon,class:"page-option-icon"},null,8,["icon"]),(0,i.Lk)("span",null,(0,o.v_)(e.$t(t.label)),1)],10,I))),128))])],2),(0,i.bF)(g),(0,i.bF)(d,{class:"tabs-language-switcher"})])}n(44114);var C={name:"DashboardTabs",props:{activeTab:{type:String,default:"dashboard"}},components:{AdminToggleDark:p,LanguageSwitcher:a.A},data(){return{isPageMenuOpen:!1}},computed:{pageOptions(){return[{name:"dashboard",icon:"images",label:"dashboardTabs.fileManagement"},{name:"customerConfig",icon:"user-cog",label:"dashboardTabs.userManagement"},{name:"systemConfig",icon:"cogs",label:"dashboardTabs.systemSettings"},{name:"",icon:"upload",label:"dashboardTabs.fileUpload"}]},titleName(){return"dashboard"===this.activeTab?this.$t("dashboardTabs.fileManagement"):"customerConfig"===this.activeTab?this.$t("dashboardTabs.userManagement"):"systemConfig"===this.activeTab?this.$t("dashboardTabs.systemSettings"):this.$t("dashboardTabs.fileUpload")},iconName(){return"dashboard"===this.activeTab?"images":"customerConfig"===this.activeTab?"user-cog":"systemConfig"===this.activeTab?"cogs":"upload"}},methods:{handleDocumentClick(){this.closePageMenu()},refreshDashboard(){location.reload()},handleTabClick(e){this.isPageMenuOpen=!1,e!==this.activeTab?this.$router.push(`/${e}`):this.refreshDashboard()},togglePageMenu(){this.isPageMenuOpen=!this.isPageMenuOpen},closePageMenu(){this.isPageMenuOpen=!1}},mounted(){document.addEventListener("click",this.handleDocumentClick)},beforeUnmount(){document.removeEventListener("click",this.handleDocumentClick)}};const B=(0,m.A)(C,[["render",v],["__scopeId","data-v-74e008d5"]]);var x=B},38736:function(e,t,n){n(85331)},48903:function(e,t,n){var a=n(60782);t.A={data(){return{bingWallPaperIndex:0,customWallPaperIndex:0,backgroundInterval:null,backgroundInitParams:null}},computed:{...(0,a.L8)(["userConfig","bingWallPapers","useDarkMode"]),bkInterval(){return this.userConfig?.bkInterval||3e3},bkOpacity(){return this.userConfig?.bkOpacity||1},backgroundImagesTemplate(){return'\n Background Image\n Background Image\n '},backgroundImagesStyles(){return"\n .background-image1 {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n pointer-events: none;\n opacity: 0;\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\n filter: var(--background-image-filter, brightness(1));\n }\n .background-image2 {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n pointer-events: none;\n opacity: 0;\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\n filter: var(--background-image-filter, brightness(1));\n }\n "}},watch:{useDarkMode(e,t){e!==t&&this.backgroundInitParams&&this.$nextTick(()=>{this.smoothThemeTransition(this.backgroundInitParams.configKey,this.backgroundInitParams.containerSelector,this.backgroundInitParams.useDefaultBackground,this.backgroundInitParams.autoCreateElements)})}},mounted(){this.injectBackgroundStyles()},beforeUnmount(){this.backgroundInterval&&clearInterval(this.backgroundInterval),this.clearBackgroundImages(!0),this.removeBackgroundStyles()},methods:{injectBackgroundStyles(){const e="background-manager-styles";if(!document.getElementById(e)){const t=document.createElement("style");t.id=e,t.textContent=this.backgroundImagesStyles,document.head.appendChild(t)}},removeBackgroundStyles(){const e="background-manager-styles",t=document.getElementById(e);t&&t.remove()},createBackgroundElements(e){if(!e)return void console.warn("未提供有效的容器元素");if(document.getElementById("bg1")||document.getElementById("bg2"))return;const t=document.createElement("img");t.id="bg1",t.className="background-image1",t.alt="Background Image";const n=document.createElement("img");n.id="bg2",n.className="background-image2",n.alt="Background Image",e.insertBefore(t,e.firstChild),e.insertBefore(n,e.firstChild)},initializeBackground(e,t=".login",n=!1,a=!1){this.backgroundInitParams={configKey:e,containerSelector:t,useDefaultBackground:n,autoCreateElements:a};const i=document.querySelector(t);this.prepareBackgroundContainer(i),a&&(!i||document.getElementById("bg1")&&document.getElementById("bg2")||this.createBackgroundElements(i));const s=document.getElementById("bg1"),o=document.getElementById("bg2");if(!s||!o)return void console.warn("背景图元素 #bg1 或 #bg2 未找到,请确保页面中包含这些元素或启用 autoCreateElements");const r=this.userConfig?.[e];"bing"===r?this.setupBingWallpaper(s,o,t):Array.isArray(r)&&r.length>1?this.setupCustomWallpaperCarousel(s,o,r,t):Array.isArray(r)&&1===r.length?this.setupSingleCustomWallpaper(s,r[0],t):n&&this.setupDefaultWallpaper(s,t)},setupBingWallpaper(e,t,n){this.$store.dispatch("fetchBingWallPapers").then(()=>{0!==this.bingWallPapers.length&&(this.loadBackgroundImage(e,this.bingWallPapers[this.bingWallPaperIndex]?.url,n),this.backgroundInterval=setInterval(()=>{this.switchBingWallpaper(e,t)},this.bkInterval))})},setupCustomWallpaperCarousel(e,t,n,a){this.loadBackgroundImage(e,n[this.customWallPaperIndex],a),this.backgroundInterval=setInterval(()=>{this.switchCustomWallpaper(e,t,n)},this.bkInterval)},setupSingleCustomWallpaper(e,t,n){this.loadBackgroundImage(e,t,n)},setupDefaultWallpaper(e,t){const a=this.useDarkMode,i=n(a?10732:7835);this.loadBackgroundImage(e,i,t)},loadBackgroundImage(e,t,n){e.style.zIndex=-1,e.style.opacity=0;const a=document.querySelector(n);this.prepareBackgroundContainer(a);const i=()=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.style.opacity=this.bkOpacity})})},s=new Image;s.onload=()=>{e.src=t,i()},s.onerror=()=>{e.src=t,i()},s.src=t},prepareBackgroundContainer(e){if(!e)return;const t=window.getComputedStyle(e);"static"===t.position&&(e.style.position="relative"),"auto"===t.zIndex&&(e.style.zIndex="0"),e.style.isolation="isolate"},switchBingWallpaper(e,t){if(0===this.bingWallPapers.length)return;const n=0!=e.style.opacity,a=n?e:t,i=n?t:e;this.bingWallPaperIndex=(this.bingWallPaperIndex+1)%this.bingWallPapers.length;const s=this.bingWallPapers[this.bingWallPaperIndex]?.url;a.style.zIndex=-2,i.style.zIndex=-1;const o=new Image;o.onload=()=>{i.src=s,setTimeout(()=>{i.style.opacity=this.bkOpacity,setTimeout(()=>{a.style.opacity=0},1200)},50)},o.src=s},switchCustomWallpaper(e,t,n){const a=0!=e.style.opacity,i=a?e:t,s=a?t:e;this.customWallPaperIndex=(this.customWallPaperIndex+1)%n.length;const o=n[this.customWallPaperIndex];i.style.zIndex=-2,s.style.zIndex=-1;const r=new Image;r.onload=()=>{s.src=o,setTimeout(()=>{s.style.opacity=this.bkOpacity,setTimeout(()=>{i.style.opacity=0},1200)},50)},r.src=o},clearBackgroundInterval(){this.backgroundInterval&&(clearInterval(this.backgroundInterval),this.backgroundInterval=null)},clearBackgroundImages(e=!1){const t=document.getElementById("bg1"),n=document.getElementById("bg2");e?(t&&(t.style.transition="none",t.style.opacity=0,t.src="",setTimeout(()=>{t&&(t.style.transition="opacity 1.2s ease-in-out")},50)),n&&(n.style.transition="none",n.style.opacity=0,n.src="",setTimeout(()=>{n&&(n.style.transition="opacity 1.2s ease-in-out")},50))):(t&&(t.style.opacity=0,setTimeout(()=>{t&&(t.src="")},1200)),n&&(n.style.opacity=0,setTimeout(()=>{n&&(n.src="")},1200)))},smoothThemeTransition(e,t=".login",a=!1,i=!1){const s=this.userConfig?.[e];if(!a||void 0!==s)return void this.reinitializeBackground(e,t,a,i);const o=document.getElementById("bg1"),r=document.getElementById("bg2");if(!o||!r)return void this.reinitializeBackground(e,t,a,i);const l=0!=o.style.opacity?o:r,c=0!=o.style.opacity?r:o,u=this.useDarkMode,g=n(u?10732:7835),d=new Image;d.onload=()=>{c.src=g,c.onload=()=>{l.style.opacity=0,setTimeout(()=>{c.style.opacity=this.bkOpacity},50)}},d.onerror=()=>{console.warn("主题背景图预加载失败,回退到直接切换"),this.reinitializeBackground(e,t,a,i)},d.src=g},reinitializeBackground(e,t=".login",n=!1,a=!1){this.clearBackgroundInterval(),this.clearBackgroundImages(!0),this.bingWallPaperIndex=0,this.customWallPaperIndex=0,setTimeout(()=>{this.initializeBackground(e,t,n,a)},100)}}}},54047:function(e,t,n){n.d(t,{A:function(){return u}});var a=n(56768);const i=["title"];function s(e,t,n,s,o,r){const l=(0,a.g2)("font-awesome-icon");return(0,a.uX)(),(0,a.CE)("span",{class:"language-switcher",onClick:t[0]||(t[0]=(...e)=>r.toggleLocale&&r.toggleLocale(...e)),role:"button",title:e.$t("language.switchTo")},[(0,a.bF)(l,{icon:"globe",class:"lang-icon"})],8,i)}var o=n(46638),r={name:"LanguageSwitcher",computed:{isZh(){return"zh-CN"===this.$i18n.locale}},methods:{toggleLocale(){const e=this.isZh?"en":"zh-CN";(0,o.xS)(e)}}},l=n(71241);const c=(0,l.A)(r,[["render",s],["__scopeId","data-v-08567d0a"]]);var u=c},67819:function(e,t,n){n(85331)},70797:function(e,t,n){n.d(t,{A:function(){return o}});n(44114);var a=n(25507),i=n(16915);let s=!1;async function o(e,t={}){t.credentials="include",t.headers={...t.headers};const n=await fetch(e,t);return 401!==n.status||s||(s=!0,a.A.commit("setAdminLoggedIn",!1),i.A.push("/adminLogin").finally(()=>{s=!1})),n}},77128:function(e,t,n){n(85331),n(4318)},78450:function(e,t,n){n(85331)},85970:function(e,t,n){n(85331)},96808:function(e,t,n){n(85331),n(18785),n(67819),n(85970),n(19104)}}]); +//# sourceMappingURL=142.fc366b6d.js.map \ No newline at end of file diff --git a/frontend-dist/js/142.fc366b6d.js.gz b/frontend-dist/js/142.fc366b6d.js.gz new file mode 100644 index 00000000..baf5b694 Binary files /dev/null and b/frontend-dist/js/142.fc366b6d.js.gz differ diff --git a/frontend-dist/js/142.fc366b6d.js.map b/frontend-dist/js/142.fc366b6d.js.map new file mode 100644 index 00000000..5f51f5a4 --- /dev/null +++ b/frontend-dist/js/142.fc366b6d.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/142.fc366b6d.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue?bba2","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue?7379","webpack://sanyue_imghub/./src/components/DashboardTabs.vue?a53e","webpack://sanyue_imghub/./src/components/DashboardTabs.vue","webpack://sanyue_imghub/./src/components/DashboardTabs.vue?1414","webpack://sanyue_imghub/./src/mixins/backgroundManager.js","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue?0caa","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue?90ec","webpack://sanyue_imghub/./src/utils/fetchWithAuth.js"],"sourcesContent":["import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode } from \"vue\";\nconst _hoisted_1 = {\n id: \"themeMaskAdmin\"\n};\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\"];\nconst _hoisted_3 = [\"r\"];\nconst _hoisted_4 = [\"opacity\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n id: \"themeToggle\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.3em\",\n height: \"1.3em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMaskAdmin)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.3em\",\n \"color\": \"var(--admin-theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminToggleDark.vue?vue&type=template&id=5c149ed5&scoped=true\"\nimport script from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./AdminToggleDark.vue?vue&type=style&index=0&id=5c149ed5&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5c149ed5\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, withModifiers as _withModifiers } from \"vue\";\nconst _hoisted_1 = {\n class: \"tabs\"\n};\nconst _hoisted_2 = [\"aria-expanded\"];\nconst _hoisted_3 = {\n class: \"page-switcher-title\"\n};\nconst _hoisted_4 = {\n class: \"page-options\",\n role: \"menu\"\n};\nconst _hoisted_5 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_AdminToggleDark = _resolveComponent(\"AdminToggleDark\");\n const _component_LanguageSwitcher = _resolveComponent(\"LanguageSwitcher\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"page-switcher\", {\n 'is-open': $data.isPageMenuOpen\n }]),\n role: \"navigation\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"button\", {\n class: \"title page-switcher-trigger\",\n type: \"button\",\n \"aria-expanded\": $data.isPageMenuOpen,\n onClick: _cache[0] || (_cache[0] = (...args) => $options.togglePageMenu && $options.togglePageMenu(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.iconName,\n class: \"fa-images\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_3, _toDisplayString($options.titleName), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"page-switcher-arrow\"\n })], 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_4, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.pageOptions, option => {\n return _openBlock(), _createElementBlock(\"button\", {\n key: option.name,\n class: _normalizeClass([\"page-option\", {\n 'is-active': $props.activeTab === option.name\n }]),\n type: \"button\",\n role: \"menuitem\",\n onClick: $event => $options.handleTabClick(option.name)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: option.icon,\n class: \"page-option-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(option.label)), 1)], 10, _hoisted_5);\n }), 128))])], 2), _createVNode(_component_AdminToggleDark), _createVNode(_component_LanguageSwitcher, {\n class: \"tabs-language-switcher\"\n })]);\n}","import \"core-js/modules/es.array.push.js\";\nimport AdminToggleDark from './dashboard/AdminToggleDark.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nexport default {\n name: 'DashboardTabs',\n props: {\n activeTab: {\n type: String,\n default: 'dashboard'\n }\n },\n components: {\n AdminToggleDark,\n LanguageSwitcher\n },\n data() {\n return {\n isPageMenuOpen: false\n };\n },\n computed: {\n pageOptions() {\n return [{\n name: 'dashboard',\n icon: 'images',\n label: 'dashboardTabs.fileManagement'\n }, {\n name: 'customerConfig',\n icon: 'user-cog',\n label: 'dashboardTabs.userManagement'\n }, {\n name: 'systemConfig',\n icon: 'cogs',\n label: 'dashboardTabs.systemSettings'\n }, {\n name: '',\n icon: 'upload',\n label: 'dashboardTabs.fileUpload'\n }];\n },\n titleName() {\n if (this.activeTab === 'dashboard') {\n return this.$t('dashboardTabs.fileManagement');\n } else if (this.activeTab === 'customerConfig') {\n return this.$t('dashboardTabs.userManagement');\n } else if (this.activeTab === 'systemConfig') {\n return this.$t('dashboardTabs.systemSettings');\n } else {\n return this.$t('dashboardTabs.fileUpload');\n }\n },\n iconName() {\n if (this.activeTab === 'dashboard') {\n return 'images';\n } else if (this.activeTab === 'customerConfig') {\n return 'user-cog';\n } else if (this.activeTab === 'systemConfig') {\n return 'cogs';\n } else {\n return 'upload';\n }\n }\n },\n methods: {\n handleDocumentClick() {\n this.closePageMenu();\n },\n refreshDashboard() {\n location.reload();\n },\n handleTabClick(tab) {\n this.isPageMenuOpen = false;\n if (tab === this.activeTab) {\n this.refreshDashboard();\n return;\n }\n this.$router.push(`/${tab}`);\n },\n togglePageMenu() {\n this.isPageMenuOpen = !this.isPageMenuOpen;\n },\n closePageMenu() {\n this.isPageMenuOpen = false;\n }\n },\n mounted() {\n document.addEventListener('click', this.handleDocumentClick);\n },\n beforeUnmount() {\n document.removeEventListener('click', this.handleDocumentClick);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DashboardTabs.vue?vue&type=template&id=74e008d5&scoped=true\"\nimport script from \"./DashboardTabs.vue?vue&type=script&lang=js\"\nexport * from \"./DashboardTabs.vue?vue&type=script&lang=js\"\n\nimport \"./DashboardTabs.vue?vue&type=style&index=0&id=74e008d5&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-74e008d5\"]])\n\nexport default __exports__","/**\r\n * 背景图管理 Mixin\r\n * 用于统一管理页面背景图的加载和轮播逻辑\r\n */\r\n\r\nimport { mapGetters } from 'vuex'\r\n\r\nexport default {\r\n data() {\r\n return {\r\n bingWallPaperIndex: 0,\r\n customWallPaperIndex: 0,\r\n backgroundInterval: null, // 存储轮播定时器\r\n // 存储初始化参数,用于主题切换时重新初始化\r\n backgroundInitParams: null,\r\n }\r\n },\r\n computed: {\r\n ...mapGetters(['userConfig', 'bingWallPapers', 'useDarkMode']),\r\n bkInterval() {\r\n return this.userConfig?.bkInterval || 3000\r\n },\r\n bkOpacity() {\r\n return this.userConfig?.bkOpacity || 1\r\n },\r\n // 提供背景图片元素的模板\r\n backgroundImagesTemplate() {\r\n return `\r\n \"Background\r\n \"Background\r\n `\r\n },\r\n // 提供背景图片的CSS样式\r\n backgroundImagesStyles() {\r\n return `\r\n .background-image1 {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n z-index: -1;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\r\n filter: var(--background-image-filter, brightness(1));\r\n }\r\n .background-image2 {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n z-index: -1;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\r\n filter: var(--background-image-filter, brightness(1));\r\n }\r\n `\r\n }\r\n },\r\n\r\n watch: {\r\n // 监听深色模式切换\r\n useDarkMode(newVal, oldVal) {\r\n // 只有在值真正改变且已经初始化过背景时才平滑切换主题\r\n if (newVal !== oldVal && this.backgroundInitParams) {\r\n this.$nextTick(() => {\r\n this.smoothThemeTransition(\r\n this.backgroundInitParams.configKey,\r\n this.backgroundInitParams.containerSelector,\r\n this.backgroundInitParams.useDefaultBackground,\r\n this.backgroundInitParams.autoCreateElements\r\n )\r\n })\r\n }\r\n }\r\n },\r\n\r\n mounted() {\r\n // 动态注入背景图片的CSS样式\r\n this.injectBackgroundStyles()\r\n },\r\n\r\n beforeUnmount() {\r\n // 组件销毁前清除定时器\r\n if (this.backgroundInterval) {\r\n clearInterval(this.backgroundInterval)\r\n }\r\n // 立即清除背景图片,不使用过渡效果\r\n this.clearBackgroundImages(true)\r\n // 移除动态注入的样式\r\n this.removeBackgroundStyles()\r\n },\r\n\r\n methods: {\r\n /**\r\n * 动态注入背景图片样式\r\n */\r\n injectBackgroundStyles() {\r\n const styleId = 'background-manager-styles'\r\n if (!document.getElementById(styleId)) {\r\n const style = document.createElement('style')\r\n style.id = styleId\r\n style.textContent = this.backgroundImagesStyles\r\n document.head.appendChild(style)\r\n }\r\n },\r\n\r\n /**\r\n * 移除动态注入的样式\r\n */\r\n removeBackgroundStyles() {\r\n const styleId = 'background-manager-styles'\r\n const existingStyle = document.getElementById(styleId)\r\n if (existingStyle) {\r\n existingStyle.remove()\r\n }\r\n },\r\n\r\n /**\r\n * 动态创建背景图片元素\r\n * @param {HTMLElement} container - 要插入背景图片的容器元素\r\n */\r\n createBackgroundElements(container) {\r\n if (!container) {\r\n console.warn('未提供有效的容器元素')\r\n return\r\n }\r\n\r\n // 检查是否已经存在背景图片元素\r\n if (document.getElementById('bg1') || document.getElementById('bg2')) {\r\n return\r\n }\r\n\r\n // 创建 bg1 元素\r\n const bg1 = document.createElement('img')\r\n bg1.id = 'bg1'\r\n bg1.className = 'background-image1'\r\n bg1.alt = 'Background Image'\r\n \r\n // 创建 bg2 元素\r\n const bg2 = document.createElement('img')\r\n bg2.id = 'bg2'\r\n bg2.className = 'background-image2'\r\n bg2.alt = 'Background Image'\r\n\r\n // 将元素插入到容器的开头\r\n container.insertBefore(bg1, container.firstChild)\r\n container.insertBefore(bg2, container.firstChild)\r\n },\r\n /**\r\n * 初始化背景图\r\n * @param {string} configKey - 用户配置中的背景图配置键名\r\n * @param {string} containerSelector - 容器选择器,用于设置透明背景\r\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\r\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\r\n */\r\n initializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\r\n // 保存初始化参数,用于主题切换时重新初始化\r\n this.backgroundInitParams = {\r\n configKey,\r\n containerSelector,\r\n useDefaultBackground,\r\n autoCreateElements\r\n }\r\n\r\n // 如果需要自动创建元素且元素不存在,则创建\r\n const container = document.querySelector(containerSelector)\r\n this.prepareBackgroundContainer(container)\r\n\r\n if (autoCreateElements) {\r\n if (container && (!document.getElementById('bg1') || !document.getElementById('bg2'))) {\r\n this.createBackgroundElements(container)\r\n }\r\n }\r\n\r\n const bg1 = document.getElementById('bg1')\r\n const bg2 = document.getElementById('bg2')\r\n \r\n if (!bg1 || !bg2) {\r\n console.warn('背景图元素 #bg1 或 #bg2 未找到,请确保页面中包含这些元素或启用 autoCreateElements')\r\n return\r\n }\r\n\r\n const backgroundConfig = this.userConfig?.[configKey]\r\n\r\n if (backgroundConfig === 'bing') {\r\n this.setupBingWallpaper(bg1, bg2, containerSelector)\r\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length > 1) {\r\n this.setupCustomWallpaperCarousel(bg1, bg2, backgroundConfig, containerSelector)\r\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length === 1) {\r\n this.setupSingleCustomWallpaper(bg1, backgroundConfig[0], containerSelector)\r\n } else if (useDefaultBackground) {\r\n this.setupDefaultWallpaper(bg1, containerSelector)\r\n }\r\n },\r\n\r\n /**\r\n * 设置 Bing 壁纸轮播\r\n */\r\n setupBingWallpaper(bg1, bg2, containerSelector) {\r\n this.$store.dispatch('fetchBingWallPapers').then(() => {\r\n if (this.bingWallPapers.length === 0) return\r\n\r\n this.loadBackgroundImage(bg1, this.bingWallPapers[this.bingWallPaperIndex]?.url, containerSelector)\r\n \r\n this.backgroundInterval = setInterval(() => {\r\n this.switchBingWallpaper(bg1, bg2)\r\n }, this.bkInterval)\r\n })\r\n },\r\n\r\n /**\r\n * 设置自定义壁纸轮播\r\n */\r\n setupCustomWallpaperCarousel(bg1, bg2, wallpapers, containerSelector) {\r\n this.loadBackgroundImage(bg1, wallpapers[this.customWallPaperIndex], containerSelector)\r\n \r\n this.backgroundInterval = setInterval(() => {\r\n this.switchCustomWallpaper(bg1, bg2, wallpapers)\r\n }, this.bkInterval)\r\n },\r\n\r\n /**\r\n * 设置单张自定义壁纸\r\n */\r\n setupSingleCustomWallpaper(bg1, wallpaperUrl, containerSelector) {\r\n this.loadBackgroundImage(bg1, wallpaperUrl, containerSelector)\r\n },\r\n\r\n /**\r\n * 设置默认壁纸\r\n */\r\n setupDefaultWallpaper(bg1, containerSelector) {\r\n // 根据当前深色模式状态选择背景图\r\n const isDark = this.useDarkMode\r\n const defaultImage = isDark \r\n ? require('@/assets/background.jpg') \r\n : require('@/assets/background-light.jpg')\r\n \r\n this.loadBackgroundImage(bg1, defaultImage, containerSelector)\r\n },\r\n\r\n /**\r\n * 加载背景图片\r\n */\r\n loadBackgroundImage(imgElement, imageSrc, containerSelector) {\r\n // 确保初始化时层级正确\r\n imgElement.style.zIndex = -1\r\n imgElement.style.opacity = 0\r\n const container = document.querySelector(containerSelector)\r\n this.prepareBackgroundContainer(container)\r\n\r\n const showImage = () => {\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n imgElement.style.opacity = this.bkOpacity\r\n })\r\n })\r\n }\r\n\r\n const preload = new Image()\r\n preload.onload = () => {\r\n imgElement.src = imageSrc\r\n showImage()\r\n }\r\n preload.onerror = () => {\r\n imgElement.src = imageSrc\r\n showImage()\r\n }\r\n preload.src = imageSrc\r\n },\r\n \r\n prepareBackgroundContainer(container) {\r\n if (!container) return\r\n\r\n const computedStyle = window.getComputedStyle(container)\r\n if (computedStyle.position === 'static') {\r\n container.style.position = 'relative'\r\n }\r\n\r\n if (computedStyle.zIndex === 'auto') {\r\n container.style.zIndex = '0'\r\n }\r\n\r\n container.style.isolation = 'isolate'\r\n },\r\n\r\n /**\r\n * 切换 Bing 壁纸\r\n */\r\n switchBingWallpaper(bg1, bg2) {\r\n if (this.bingWallPapers.length === 0) return\r\n\r\n const isBg1Current = bg1.style.opacity != 0\r\n const curBg = isBg1Current ? bg1 : bg2\r\n const nextBg = isBg1Current ? bg2 : bg1\r\n \r\n this.bingWallPaperIndex = (this.bingWallPaperIndex + 1) % this.bingWallPapers.length\r\n const nextUrl = this.bingWallPapers[this.bingWallPaperIndex]?.url\r\n\r\n // 【层级魔法】:让旧图垫底,新图置顶\r\n curBg.style.zIndex = -2\r\n nextBg.style.zIndex = -1\r\n\r\n const preload = new Image()\r\n preload.onload = () => {\r\n nextBg.src = nextUrl\r\n \r\n // 稍微延迟 50ms,确保浏览器把新图渲染到 DOM 上且层级已更新\r\n setTimeout(() => {\r\n nextBg.style.opacity = this.bkOpacity // 新图直接在顶层优雅淡入\r\n \r\n // 等新图 1.2s 完全覆盖后,在底下默默把旧图透明度归零,毫无视觉断层\r\n setTimeout(() => { \r\n curBg.style.opacity = 0 \r\n }, 1200)\r\n }, 50)\r\n }\r\n preload.src = nextUrl\r\n },\r\n\r\n /**\r\n * 切换自定义壁纸\r\n */\r\n switchCustomWallpaper(bg1, bg2, wallpapers) {\r\n const isBg1Current = bg1.style.opacity != 0\r\n const curBg = isBg1Current ? bg1 : bg2\r\n const nextBg = isBg1Current ? bg2 : bg1\r\n \r\n this.customWallPaperIndex = (this.customWallPaperIndex + 1) % wallpapers.length\r\n const nextUrl = wallpapers[this.customWallPaperIndex]\r\n\r\n // 旧图垫底,新图置顶\r\n curBg.style.zIndex = -2\r\n nextBg.style.zIndex = -1\r\n\r\n const preload = new Image()\r\n preload.onload = () => {\r\n nextBg.src = nextUrl\r\n \r\n setTimeout(() => {\r\n nextBg.style.opacity = this.bkOpacity\r\n \r\n setTimeout(() => { \r\n curBg.style.opacity = 0 \r\n }, 1200)\r\n }, 50)\r\n }\r\n preload.src = nextUrl\r\n },\r\n\r\n /**\r\n * 清除背景轮播定时器\r\n */\r\n clearBackgroundInterval() {\r\n if (this.backgroundInterval) {\r\n clearInterval(this.backgroundInterval)\r\n this.backgroundInterval = null\r\n }\r\n },\r\n\r\n /**\r\n * 清除背景图片显示(带过渡效果)\r\n * @param {boolean} immediate - 是否立即清除,不使用过渡效果\r\n */\r\n clearBackgroundImages(immediate = false) {\r\n const bg1 = document.getElementById('bg1')\r\n const bg2 = document.getElementById('bg2')\r\n \r\n if (immediate) {\r\n // 立即清除,不使用过渡效果\r\n if (bg1) {\r\n bg1.style.transition = 'none'\r\n bg1.style.opacity = 0\r\n bg1.src = ''\r\n // 恢复过渡效果\r\n setTimeout(() => {\r\n if (bg1) bg1.style.transition = 'opacity 1.2s ease-in-out'\r\n }, 50)\r\n }\r\n if (bg2) {\r\n bg2.style.transition = 'none'\r\n bg2.style.opacity = 0\r\n bg2.src = ''\r\n // 恢复过渡效果\r\n setTimeout(() => {\r\n if (bg2) bg2.style.transition = 'opacity 1.2s ease-in-out'\r\n }, 50)\r\n }\r\n } else {\r\n // 使用过渡效果淡出\r\n if (bg1) {\r\n bg1.style.opacity = 0\r\n setTimeout(() => {\r\n if (bg1) bg1.src = ''\r\n }, 1200)\r\n }\r\n if (bg2) {\r\n bg2.style.opacity = 0\r\n setTimeout(() => {\r\n if (bg2) bg2.src = ''\r\n }, 1200)\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * 平滑主题切换(用于响应主题模式变化)\r\n * @param {string} configKey - 用户配置中的背景图配置键名\r\n * @param {string} containerSelector - 容器选择器\r\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\r\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\r\n */\r\n smoothThemeTransition(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\r\n const backgroundConfig = this.userConfig?.[configKey]\r\n \r\n // 如果不是默认背景配置,则直接重新初始化(自定义背景不受主题影响)\r\n if (!useDefaultBackground || backgroundConfig !== undefined) {\r\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n return\r\n }\r\n\r\n // 对于默认背景,执行平滑过渡\r\n const bg1 = document.getElementById('bg1')\r\n const bg2 = document.getElementById('bg2')\r\n \r\n if (!bg1 || !bg2) {\r\n // 如果背景元素不存在,直接重新初始化\r\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n return\r\n }\r\n\r\n // 确定当前显示的背景和下一个背景\r\n const currentBg = bg1.style.opacity != 0 ? bg1 : bg2\r\n const nextBg = bg1.style.opacity != 0 ? bg2 : bg1\r\n\r\n // 获取新主题对应的背景图\r\n const isDark = this.useDarkMode\r\n const newThemeImage = isDark \r\n ? require('@/assets/background.jpg') \r\n : require('@/assets/background-light.jpg')\r\n\r\n // 预加载新背景图\r\n const preloadImg = new Image()\r\n preloadImg.onload = () => {\r\n // 设置下一个背景的图片源\r\n nextBg.src = newThemeImage\r\n \r\n // 等待图片加载完成后执行淡入淡出过渡\r\n nextBg.onload = () => {\r\n // 淡出当前背景\r\n currentBg.style.opacity = 0\r\n \r\n // 稍微延迟后淡入新背景,确保过渡效果平滑\r\n setTimeout(() => {\r\n nextBg.style.opacity = this.bkOpacity\r\n }, 50) // 50ms 延迟,让淡出效果先开始\r\n }\r\n }\r\n \r\n preloadImg.onerror = () => {\r\n // 如果预加载失败,回退到直接重新初始化\r\n console.warn('主题背景图预加载失败,回退到直接切换')\r\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n }\r\n \r\n preloadImg.src = newThemeImage\r\n },\r\n\r\n /**\r\n * 重新初始化背景图(用于响应配置变化)\r\n */\r\n reinitializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\r\n this.clearBackgroundInterval()\r\n this.clearBackgroundImages(true) // 使用立即清除\r\n this.bingWallPaperIndex = 0\r\n this.customWallPaperIndex = 0\r\n \r\n // 延迟一小段时间确保清理完成\r\n setTimeout(() => {\r\n this.initializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n }, 100)\r\n }\r\n }\r\n}\r\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"title\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", {\n class: \"language-switcher\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleLocale && $options.toggleLocale(...args)),\n role: \"button\",\n title: _ctx.$t('language.switchTo')\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n class: \"lang-icon\"\n })], 8, _hoisted_1);\n}","import { setLocale } from '@/locales';\nexport default {\n name: 'LanguageSwitcher',\n computed: {\n isZh() {\n return this.$i18n.locale === 'zh-CN';\n }\n },\n methods: {\n toggleLocale() {\n const next = this.isZh ? 'en' : 'zh-CN';\n setLocale(next);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./LanguageSwitcher.vue?vue&type=template&id=08567d0a&scoped=true\"\nimport script from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\nexport * from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\n\nimport \"./LanguageSwitcher.vue?vue&type=style&index=0&id=08567d0a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08567d0a\"]])\n\nexport default __exports__","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n"],"names":["_hoisted_1","id","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","onClick","args","handleToggleClick","name","mode","default","isAuto","key","icon","class","style","isDark","width","height","viewBox","fill","stroke","x","y","cx","cy","r","mask","opacity","x1","y1","x2","y2","_","data","this","$store","getters","useDarkMode","cusDarkMode","methods","commit","__exports__","role","_hoisted_5","_component_AdminToggleDark","_component_LanguageSwitcher","isPageMenuOpen","type","togglePageMenu","iconName","titleName","pageOptions","option","activeTab","$event","handleTabClick","$t","label","props","String","components","AdminToggleDark","LanguageSwitcher","computed","handleDocumentClick","closePageMenu","refreshDashboard","location","reload","tab","$router","push","mounted","document","addEventListener","beforeUnmount","removeEventListener","bingWallPaperIndex","customWallPaperIndex","backgroundInterval","backgroundInitParams","mapGetters","bkInterval","userConfig","bkOpacity","backgroundImagesTemplate","backgroundImagesStyles","watch","newVal","oldVal","$nextTick","smoothThemeTransition","configKey","containerSelector","useDefaultBackground","autoCreateElements","injectBackgroundStyles","clearInterval","clearBackgroundImages","removeBackgroundStyles","styleId","getElementById","createElement","textContent","head","appendChild","existingStyle","remove","createBackgroundElements","container","console","warn","bg1","className","alt","bg2","insertBefore","firstChild","initializeBackground","querySelector","prepareBackgroundContainer","backgroundConfig","setupBingWallpaper","Array","isArray","length","setupCustomWallpaperCarousel","setupSingleCustomWallpaper","setupDefaultWallpaper","dispatch","then","bingWallPapers","loadBackgroundImage","url","setInterval","switchBingWallpaper","wallpapers","switchCustomWallpaper","wallpaperUrl","defaultImage","require","imgElement","imageSrc","zIndex","showImage","requestAnimationFrame","preload","Image","onload","src","onerror","computedStyle","window","getComputedStyle","position","isolation","isBg1Current","curBg","nextBg","nextUrl","setTimeout","clearBackgroundInterval","immediate","transition","undefined","reinitializeBackground","currentBg","newThemeImage","preloadImg","toggleLocale","title","isZh","$i18n","locale","next","isRedirecting","async","fetchWithAuth","options","credentials","headers","response","fetch","status","store","router","finally"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/142.fc366b6d.js.map.gz b/frontend-dist/js/142.fc366b6d.js.map.gz new file mode 100644 index 00000000..ed041c3c Binary files /dev/null and b/frontend-dist/js/142.fc366b6d.js.map.gz differ diff --git a/frontend-dist/js/309.b7dca603.js b/frontend-dist/js/309.b7dca603.js deleted file mode 100644 index 750891f2..00000000 --- a/frontend-dist/js/309.b7dca603.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[309],{213:function(e,t,n){n(85331),n(19104)},4318:function(){},7835:function(e,t,n){e.exports=n.p+"img/background-light.f17603bc.jpg"},10456:function(e,t,n){n(85331)},10732:function(e,t,n){e.exports=n.p+"img/background.ea1b7ee7.jpg"},18785:function(e,t,n){n(85331)},19104:function(e,t,n){n(85331)},23597:function(e,t,n){n(85331)},30694:function(e,t,n){n(85331)},38736:function(e,t,n){n(85331)},40670:function(e,t,n){n(85331),n(99648),n(19104),n(85970)},48903:function(e,t,n){var a=n(60782);t.A={data(){return{bingWallPaperIndex:0,customWallPaperIndex:0,backgroundInterval:null,backgroundInitParams:null}},computed:{...(0,a.L8)(["userConfig","bingWallPapers","useDarkMode"]),bkInterval(){return this.userConfig?.bkInterval||3e3},bkOpacity(){return this.userConfig?.bkOpacity||1},backgroundImagesTemplate(){return'\n Background Image\n Background Image\n '},backgroundImagesStyles(){return"\n .background-image1 {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n pointer-events: none;\n opacity: 0;\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\n filter: var(--background-image-filter, brightness(1));\n }\n .background-image2 {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n z-index: -1;\n pointer-events: none;\n opacity: 0;\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\n filter: var(--background-image-filter, brightness(1));\n }\n "}},watch:{useDarkMode(e,t){e!==t&&this.backgroundInitParams&&this.$nextTick(()=>{this.smoothThemeTransition(this.backgroundInitParams.configKey,this.backgroundInitParams.containerSelector,this.backgroundInitParams.useDefaultBackground,this.backgroundInitParams.autoCreateElements)})}},mounted(){this.injectBackgroundStyles()},beforeUnmount(){this.backgroundInterval&&clearInterval(this.backgroundInterval),this.clearBackgroundImages(!0),this.removeBackgroundStyles()},methods:{injectBackgroundStyles(){const e="background-manager-styles";if(!document.getElementById(e)){const t=document.createElement("style");t.id=e,t.textContent=this.backgroundImagesStyles,document.head.appendChild(t)}},removeBackgroundStyles(){const e="background-manager-styles",t=document.getElementById(e);t&&t.remove()},createBackgroundElements(e){if(!e)return void console.warn("未提供有效的容器元素");if(document.getElementById("bg1")||document.getElementById("bg2"))return;const t=document.createElement("img");t.id="bg1",t.className="background-image1",t.alt="Background Image";const n=document.createElement("img");n.id="bg2",n.className="background-image2",n.alt="Background Image",e.insertBefore(t,e.firstChild),e.insertBefore(n,e.firstChild)},initializeBackground(e,t=".login",n=!1,a=!1){this.backgroundInitParams={configKey:e,containerSelector:t,useDefaultBackground:n,autoCreateElements:a};const s=document.querySelector(t);this.prepareBackgroundContainer(s),a&&(!s||document.getElementById("bg1")&&document.getElementById("bg2")||this.createBackgroundElements(s));const i=document.getElementById("bg1"),o=document.getElementById("bg2");if(!i||!o)return void console.warn("背景图元素 #bg1 或 #bg2 未找到,请确保页面中包含这些元素或启用 autoCreateElements");const r=this.userConfig?.[e];"bing"===r?this.setupBingWallpaper(i,o,t):Array.isArray(r)&&r.length>1?this.setupCustomWallpaperCarousel(i,o,r,t):Array.isArray(r)&&1===r.length?this.setupSingleCustomWallpaper(i,r[0],t):n&&this.setupDefaultWallpaper(i,t)},setupBingWallpaper(e,t,n){this.$store.dispatch("fetchBingWallPapers").then(()=>{0!==this.bingWallPapers.length&&(this.loadBackgroundImage(e,this.bingWallPapers[this.bingWallPaperIndex]?.url,n),this.backgroundInterval=setInterval(()=>{this.switchBingWallpaper(e,t)},this.bkInterval))})},setupCustomWallpaperCarousel(e,t,n,a){this.loadBackgroundImage(e,n[this.customWallPaperIndex],a),this.backgroundInterval=setInterval(()=>{this.switchCustomWallpaper(e,t,n)},this.bkInterval)},setupSingleCustomWallpaper(e,t,n){this.loadBackgroundImage(e,t,n)},setupDefaultWallpaper(e,t){const a=this.useDarkMode,s=n(a?10732:7835);this.loadBackgroundImage(e,s,t)},loadBackgroundImage(e,t,n){e.style.zIndex=-1,e.style.opacity=0;const a=document.querySelector(n);this.prepareBackgroundContainer(a);const s=()=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.style.opacity=this.bkOpacity})})},i=new Image;i.onload=()=>{e.src=t,s()},i.onerror=()=>{e.src=t,s()},i.src=t},prepareBackgroundContainer(e){if(!e)return;const t=window.getComputedStyle(e);"static"===t.position&&(e.style.position="relative"),"auto"===t.zIndex&&(e.style.zIndex="0"),e.style.isolation="isolate"},switchBingWallpaper(e,t){if(0===this.bingWallPapers.length)return;const n=0!=e.style.opacity,a=n?e:t,s=n?t:e;this.bingWallPaperIndex=(this.bingWallPaperIndex+1)%this.bingWallPapers.length;const i=this.bingWallPapers[this.bingWallPaperIndex]?.url;a.style.zIndex=-2,s.style.zIndex=-1;const o=new Image;o.onload=()=>{s.src=i,setTimeout(()=>{s.style.opacity=this.bkOpacity,setTimeout(()=>{a.style.opacity=0},1200)},50)},o.src=i},switchCustomWallpaper(e,t,n){const a=0!=e.style.opacity,s=a?e:t,i=a?t:e;this.customWallPaperIndex=(this.customWallPaperIndex+1)%n.length;const o=n[this.customWallPaperIndex];s.style.zIndex=-2,i.style.zIndex=-1;const r=new Image;r.onload=()=>{i.src=o,setTimeout(()=>{i.style.opacity=this.bkOpacity,setTimeout(()=>{s.style.opacity=0},1200)},50)},r.src=o},clearBackgroundInterval(){this.backgroundInterval&&(clearInterval(this.backgroundInterval),this.backgroundInterval=null)},clearBackgroundImages(e=!1){const t=document.getElementById("bg1"),n=document.getElementById("bg2");e?(t&&(t.style.transition="none",t.style.opacity=0,t.src="",setTimeout(()=>{t&&(t.style.transition="opacity 1.2s ease-in-out")},50)),n&&(n.style.transition="none",n.style.opacity=0,n.src="",setTimeout(()=>{n&&(n.style.transition="opacity 1.2s ease-in-out")},50))):(t&&(t.style.opacity=0,setTimeout(()=>{t&&(t.src="")},1200)),n&&(n.style.opacity=0,setTimeout(()=>{n&&(n.src="")},1200)))},smoothThemeTransition(e,t=".login",a=!1,s=!1){const i=this.userConfig?.[e];if(!a||void 0!==i)return void this.reinitializeBackground(e,t,a,s);const o=document.getElementById("bg1"),r=document.getElementById("bg2");if(!o||!r)return void this.reinitializeBackground(e,t,a,s);const l=0!=o.style.opacity?o:r,c=0!=o.style.opacity?r:o,u=this.useDarkMode,d=n(u?10732:7835),g=new Image;g.onload=()=>{c.src=d,c.onload=()=>{l.style.opacity=0,setTimeout(()=>{c.style.opacity=this.bkOpacity},50)}},g.onerror=()=>{console.warn("主题背景图预加载失败,回退到直接切换"),this.reinitializeBackground(e,t,a,s)},g.src=d},reinitializeBackground(e,t=".login",n=!1,a=!1){this.clearBackgroundInterval(),this.clearBackgroundImages(!0),this.bingWallPaperIndex=0,this.customWallPaperIndex=0,setTimeout(()=>{this.initializeBackground(e,t,n,a)},100)}}}},54047:function(e,t,n){n.d(t,{A:function(){return u}});var a=n(56768);const s=["title"];function i(e,t,n,i,o,r){const l=(0,a.g2)("font-awesome-icon");return(0,a.uX)(),(0,a.CE)("span",{class:"language-switcher",onClick:t[0]||(t[0]=(...e)=>r.toggleLocale&&r.toggleLocale(...e)),role:"button",title:e.$t("language.switchTo")},[(0,a.bF)(l,{icon:"globe",class:"lang-icon"})],8,s)}var o=n(46638),r={name:"LanguageSwitcher",computed:{isZh(){return"zh-CN"===this.$i18n.locale}},methods:{toggleLocale(){const e=this.isZh?"en":"zh-CN";(0,o.xS)(e)}}},l=n(71241);const c=(0,l.A)(r,[["render",i],["__scopeId","data-v-08567d0a"]]);var u=c},67819:function(e,t,n){n(85331)},70797:function(e,t,n){n.d(t,{A:function(){return o}});n(44114);var a=n(25507),s=n(16915);let i=!1;async function o(e,t={}){t.credentials="include",t.headers={...t.headers};const n=await fetch(e,t);return 401!==n.status||i||(i=!0,a.A.commit("setAdminLoggedIn",!1),s.A.push("/adminLogin").finally(()=>{i=!1})),n}},77128:function(e,t,n){n(85331),n(4318)},78450:function(e,t,n){n(85331)},85970:function(e,t,n){n(85331)},88830:function(e,t,n){n(85331)},96808:function(e,t,n){n(85331),n(18785),n(67819),n(85970),n(19104)},97247:function(e,t,n){n.d(t,{A:function(){return C}});var a=n(54047),s=n(56768),i=n(45130),o=n(24232);const r={id:"themeMaskAdmin"},l=["cx","cy","r"],c=["r"],u=["opacity"];function d(e,t,n,a,d,g){const m=(0,s.g2)("font-awesome-icon");return(0,s.uX)(),(0,s.CE)("div",{id:"themeToggle",onClick:t[0]||(t[0]=(...e)=>g.handleToggleClick&&g.handleToggleClick(...e))},[(0,s.bF)(i.eB,{name:"icon-fade",mode:"out-in"},{default:(0,s.k6)(()=>[d.isAuto?((0,s.uX)(),(0,s.Wv)(m,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.3em",color:"var(--admin-theme-toggle-color)"}})):((0,s.uX)(),(0,s.CE)("svg",{key:"sun-moon",class:(0,o.C4)(["theme_toggle_svg",{dark:d.isDark}]),width:"1.3em",height:"1.3em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,s.Lk)("mask",r,[t[1]||(t[1]=(0,s.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,s.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:d.isDark?"50%":"100%",cy:d.isDark?"23%":"0%",r:d.isDark?"9":"5"},null,8,l)]),(0,s.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:d.isDark?"9":"5",mask:"url(#themeMaskAdmin)"},null,8,c),(0,s.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:d.isDark?0:1},[...t[2]||(t[2]=[(0,s.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,s.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,s.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,s.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,s.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,s.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,s.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,s.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,u)],2))]),_:1})])}var g={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode,isAuto:!this.$store.getters.cusDarkMode}},methods:{handleToggleClick(){this.isAuto?(this.isDark=!1,this.isAuto=!1,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):this.isDark?(this.isAuto=!0,this.$store.commit("setCusDarkMode",!1)):(this.isDark=!0,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0))}}},m=n(71241);const h=(0,m.A)(g,[["render",d],["__scopeId","data-v-5c149ed5"]]);var p=h,k=n(62086);n(85331),n(40670),n(88830),n(23597);const b={class:"tabs"},y={class:"tabs-dropdown-link"};function f(e,t,n,i,r,l){const c=(0,s.g2)("font-awesome-icon"),u=k.c6,d=k.Iy,g=k.dW,m=p,h=a.A;return(0,s.uX)(),(0,s.CE)("div",b,[(0,s.Lk)("span",{class:"title",onClick:t[0]||(t[0]=(...e)=>l.refreshDashboard&&l.refreshDashboard(...e))},[(0,s.bF)(c,{icon:l.iconName,class:"fa-images"},null,8,["icon"]),(0,s.eW)(" "+(0,o.v_)(l.titleName),1)]),(0,s.bF)(g,{onCommand:l.handleTabClick,class:"tabs-dropdown",role:"navigation",onVisibleChange:l.handleDropdownVisible,"popper-class":"tabs-dropdown-popper"},{dropdown:(0,s.k6)(()=>[(0,s.bF)(d,null,{default:(0,s.k6)(()=>["dashboard"!==n.activeTab?((0,s.uX)(),(0,s.Wv)(u,{key:0,command:"dashboard"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"images",style:{"margin-right":"5px",width:"16px"}}),(0,s.eW)(" "+(0,o.v_)(e.$t("dashboardTabs.fileManagement")),1)]),_:1})):(0,s.Q3)("",!0),"customerConfig"!==n.activeTab?((0,s.uX)(),(0,s.Wv)(u,{key:1,command:"customerConfig"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"user-cog",style:{"margin-right":"5px",width:"16px"}}),(0,s.eW)(" "+(0,o.v_)(e.$t("dashboardTabs.userManagement")),1)]),_:1})):(0,s.Q3)("",!0),"systemConfig"!==n.activeTab?((0,s.uX)(),(0,s.Wv)(u,{key:2,command:"systemConfig"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"cogs",style:{"margin-right":"5px",width:"16px"}}),(0,s.eW)(" "+(0,o.v_)(e.$t("dashboardTabs.systemSettings")),1)]),_:1})):(0,s.Q3)("",!0),(0,s.bF)(u,{command:""},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"upload",style:{"margin-right":"5px",width:"16px"}}),(0,s.eW)(" "+(0,o.v_)(e.$t("dashboardTabs.fileUpload")),1)]),_:1})]),_:1})]),default:(0,s.k6)(()=>[(0,s.Lk)("span",y,[(0,s.bF)(c,{icon:"bars",class:"tabs-arrow"})])]),_:1},8,["onCommand","onVisibleChange"]),(0,s.bF)(m),(0,s.bF)(h,{class:"tabs-language-switcher"})])}n(44114);var I={name:"DashboardTabs",props:{activeTab:{type:String,default:"dashboard"}},components:{AdminToggleDark:p,LanguageSwitcher:a.A},computed:{titleName(){return"dashboard"===this.activeTab?this.$t("dashboardTabs.fileManagement"):"customerConfig"===this.activeTab?this.$t("dashboardTabs.userManagement"):"systemConfig"===this.activeTab?this.$t("dashboardTabs.systemSettings"):this.$t("dashboardTabs.fileUpload")},iconName(){return"dashboard"===this.activeTab?"images":"customerConfig"===this.activeTab?"user-cog":"systemConfig"===this.activeTab?"cogs":"upload"}},methods:{refreshDashboard(){location.reload()},handleTabClick(e){this.$router.push(`/${e}`)},handleDropdownVisible(e){const t=document.querySelector(".tabs-dropdown-link");e?t.classList.add("rotate-up"):t.classList.remove("rotate-up")}}};const v=(0,m.A)(I,[["render",f],["__scopeId","data-v-4e00471a"]]);var C=v}}]); -//# sourceMappingURL=309.b7dca603.js.map \ No newline at end of file diff --git a/frontend-dist/js/309.b7dca603.js.gz b/frontend-dist/js/309.b7dca603.js.gz deleted file mode 100644 index db231578..00000000 Binary files a/frontend-dist/js/309.b7dca603.js.gz and /dev/null differ diff --git a/frontend-dist/js/309.b7dca603.js.map b/frontend-dist/js/309.b7dca603.js.map deleted file mode 100644 index 2608c77a..00000000 --- a/frontend-dist/js/309.b7dca603.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/309.b7dca603.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/mixins/backgroundManager.js","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue?0caa","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue","webpack://sanyue_imghub/./src/components/LanguageSwitcher.vue?90ec","webpack://sanyue_imghub/./src/utils/fetchWithAuth.js","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue?bba2","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue","webpack://sanyue_imghub/./src/components/dashboard/AdminToggleDark.vue?7379","webpack://sanyue_imghub/./src/components/DashboardTabs.vue?4056","webpack://sanyue_imghub/./src/components/DashboardTabs.vue","webpack://sanyue_imghub/./src/components/DashboardTabs.vue?1414"],"sourcesContent":["/**\r\n * 背景图管理 Mixin\r\n * 用于统一管理页面背景图的加载和轮播逻辑\r\n */\r\n\r\nimport { mapGetters } from 'vuex'\r\n\r\nexport default {\r\n data() {\r\n return {\r\n bingWallPaperIndex: 0,\r\n customWallPaperIndex: 0,\r\n backgroundInterval: null, // 存储轮播定时器\r\n // 存储初始化参数,用于主题切换时重新初始化\r\n backgroundInitParams: null,\r\n }\r\n },\r\n computed: {\r\n ...mapGetters(['userConfig', 'bingWallPapers', 'useDarkMode']),\r\n bkInterval() {\r\n return this.userConfig?.bkInterval || 3000\r\n },\r\n bkOpacity() {\r\n return this.userConfig?.bkOpacity || 1\r\n },\r\n // 提供背景图片元素的模板\r\n backgroundImagesTemplate() {\r\n return `\r\n \"Background\r\n \"Background\r\n `\r\n },\r\n // 提供背景图片的CSS样式\r\n backgroundImagesStyles() {\r\n return `\r\n .background-image1 {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n z-index: -1;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\r\n filter: var(--background-image-filter, brightness(1));\r\n }\r\n .background-image2 {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n object-fit: cover;\r\n z-index: -1;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: opacity 1.2s ease-in-out, filter 0.3s ease;\r\n filter: var(--background-image-filter, brightness(1));\r\n }\r\n `\r\n }\r\n },\r\n\r\n watch: {\r\n // 监听深色模式切换\r\n useDarkMode(newVal, oldVal) {\r\n // 只有在值真正改变且已经初始化过背景时才平滑切换主题\r\n if (newVal !== oldVal && this.backgroundInitParams) {\r\n this.$nextTick(() => {\r\n this.smoothThemeTransition(\r\n this.backgroundInitParams.configKey,\r\n this.backgroundInitParams.containerSelector,\r\n this.backgroundInitParams.useDefaultBackground,\r\n this.backgroundInitParams.autoCreateElements\r\n )\r\n })\r\n }\r\n }\r\n },\r\n\r\n mounted() {\r\n // 动态注入背景图片的CSS样式\r\n this.injectBackgroundStyles()\r\n },\r\n\r\n beforeUnmount() {\r\n // 组件销毁前清除定时器\r\n if (this.backgroundInterval) {\r\n clearInterval(this.backgroundInterval)\r\n }\r\n // 立即清除背景图片,不使用过渡效果\r\n this.clearBackgroundImages(true)\r\n // 移除动态注入的样式\r\n this.removeBackgroundStyles()\r\n },\r\n\r\n methods: {\r\n /**\r\n * 动态注入背景图片样式\r\n */\r\n injectBackgroundStyles() {\r\n const styleId = 'background-manager-styles'\r\n if (!document.getElementById(styleId)) {\r\n const style = document.createElement('style')\r\n style.id = styleId\r\n style.textContent = this.backgroundImagesStyles\r\n document.head.appendChild(style)\r\n }\r\n },\r\n\r\n /**\r\n * 移除动态注入的样式\r\n */\r\n removeBackgroundStyles() {\r\n const styleId = 'background-manager-styles'\r\n const existingStyle = document.getElementById(styleId)\r\n if (existingStyle) {\r\n existingStyle.remove()\r\n }\r\n },\r\n\r\n /**\r\n * 动态创建背景图片元素\r\n * @param {HTMLElement} container - 要插入背景图片的容器元素\r\n */\r\n createBackgroundElements(container) {\r\n if (!container) {\r\n console.warn('未提供有效的容器元素')\r\n return\r\n }\r\n\r\n // 检查是否已经存在背景图片元素\r\n if (document.getElementById('bg1') || document.getElementById('bg2')) {\r\n return\r\n }\r\n\r\n // 创建 bg1 元素\r\n const bg1 = document.createElement('img')\r\n bg1.id = 'bg1'\r\n bg1.className = 'background-image1'\r\n bg1.alt = 'Background Image'\r\n \r\n // 创建 bg2 元素\r\n const bg2 = document.createElement('img')\r\n bg2.id = 'bg2'\r\n bg2.className = 'background-image2'\r\n bg2.alt = 'Background Image'\r\n\r\n // 将元素插入到容器的开头\r\n container.insertBefore(bg1, container.firstChild)\r\n container.insertBefore(bg2, container.firstChild)\r\n },\r\n /**\r\n * 初始化背景图\r\n * @param {string} configKey - 用户配置中的背景图配置键名\r\n * @param {string} containerSelector - 容器选择器,用于设置透明背景\r\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\r\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\r\n */\r\n initializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\r\n // 保存初始化参数,用于主题切换时重新初始化\r\n this.backgroundInitParams = {\r\n configKey,\r\n containerSelector,\r\n useDefaultBackground,\r\n autoCreateElements\r\n }\r\n\r\n // 如果需要自动创建元素且元素不存在,则创建\r\n const container = document.querySelector(containerSelector)\r\n this.prepareBackgroundContainer(container)\r\n\r\n if (autoCreateElements) {\r\n if (container && (!document.getElementById('bg1') || !document.getElementById('bg2'))) {\r\n this.createBackgroundElements(container)\r\n }\r\n }\r\n\r\n const bg1 = document.getElementById('bg1')\r\n const bg2 = document.getElementById('bg2')\r\n \r\n if (!bg1 || !bg2) {\r\n console.warn('背景图元素 #bg1 或 #bg2 未找到,请确保页面中包含这些元素或启用 autoCreateElements')\r\n return\r\n }\r\n\r\n const backgroundConfig = this.userConfig?.[configKey]\r\n\r\n if (backgroundConfig === 'bing') {\r\n this.setupBingWallpaper(bg1, bg2, containerSelector)\r\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length > 1) {\r\n this.setupCustomWallpaperCarousel(bg1, bg2, backgroundConfig, containerSelector)\r\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length === 1) {\r\n this.setupSingleCustomWallpaper(bg1, backgroundConfig[0], containerSelector)\r\n } else if (useDefaultBackground) {\r\n this.setupDefaultWallpaper(bg1, containerSelector)\r\n }\r\n },\r\n\r\n /**\r\n * 设置 Bing 壁纸轮播\r\n */\r\n setupBingWallpaper(bg1, bg2, containerSelector) {\r\n this.$store.dispatch('fetchBingWallPapers').then(() => {\r\n if (this.bingWallPapers.length === 0) return\r\n\r\n this.loadBackgroundImage(bg1, this.bingWallPapers[this.bingWallPaperIndex]?.url, containerSelector)\r\n \r\n this.backgroundInterval = setInterval(() => {\r\n this.switchBingWallpaper(bg1, bg2)\r\n }, this.bkInterval)\r\n })\r\n },\r\n\r\n /**\r\n * 设置自定义壁纸轮播\r\n */\r\n setupCustomWallpaperCarousel(bg1, bg2, wallpapers, containerSelector) {\r\n this.loadBackgroundImage(bg1, wallpapers[this.customWallPaperIndex], containerSelector)\r\n \r\n this.backgroundInterval = setInterval(() => {\r\n this.switchCustomWallpaper(bg1, bg2, wallpapers)\r\n }, this.bkInterval)\r\n },\r\n\r\n /**\r\n * 设置单张自定义壁纸\r\n */\r\n setupSingleCustomWallpaper(bg1, wallpaperUrl, containerSelector) {\r\n this.loadBackgroundImage(bg1, wallpaperUrl, containerSelector)\r\n },\r\n\r\n /**\r\n * 设置默认壁纸\r\n */\r\n setupDefaultWallpaper(bg1, containerSelector) {\r\n // 根据当前深色模式状态选择背景图\r\n const isDark = this.useDarkMode\r\n const defaultImage = isDark \r\n ? require('@/assets/background.jpg') \r\n : require('@/assets/background-light.jpg')\r\n \r\n this.loadBackgroundImage(bg1, defaultImage, containerSelector)\r\n },\r\n\r\n /**\r\n * 加载背景图片\r\n */\r\n loadBackgroundImage(imgElement, imageSrc, containerSelector) {\r\n // 确保初始化时层级正确\r\n imgElement.style.zIndex = -1\r\n imgElement.style.opacity = 0\r\n const container = document.querySelector(containerSelector)\r\n this.prepareBackgroundContainer(container)\r\n\r\n const showImage = () => {\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n imgElement.style.opacity = this.bkOpacity\r\n })\r\n })\r\n }\r\n\r\n const preload = new Image()\r\n preload.onload = () => {\r\n imgElement.src = imageSrc\r\n showImage()\r\n }\r\n preload.onerror = () => {\r\n imgElement.src = imageSrc\r\n showImage()\r\n }\r\n preload.src = imageSrc\r\n },\r\n \r\n prepareBackgroundContainer(container) {\r\n if (!container) return\r\n\r\n const computedStyle = window.getComputedStyle(container)\r\n if (computedStyle.position === 'static') {\r\n container.style.position = 'relative'\r\n }\r\n\r\n if (computedStyle.zIndex === 'auto') {\r\n container.style.zIndex = '0'\r\n }\r\n\r\n container.style.isolation = 'isolate'\r\n },\r\n\r\n /**\r\n * 切换 Bing 壁纸\r\n */\r\n switchBingWallpaper(bg1, bg2) {\r\n if (this.bingWallPapers.length === 0) return\r\n\r\n const isBg1Current = bg1.style.opacity != 0\r\n const curBg = isBg1Current ? bg1 : bg2\r\n const nextBg = isBg1Current ? bg2 : bg1\r\n \r\n this.bingWallPaperIndex = (this.bingWallPaperIndex + 1) % this.bingWallPapers.length\r\n const nextUrl = this.bingWallPapers[this.bingWallPaperIndex]?.url\r\n\r\n // 【层级魔法】:让旧图垫底,新图置顶\r\n curBg.style.zIndex = -2\r\n nextBg.style.zIndex = -1\r\n\r\n const preload = new Image()\r\n preload.onload = () => {\r\n nextBg.src = nextUrl\r\n \r\n // 稍微延迟 50ms,确保浏览器把新图渲染到 DOM 上且层级已更新\r\n setTimeout(() => {\r\n nextBg.style.opacity = this.bkOpacity // 新图直接在顶层优雅淡入\r\n \r\n // 等新图 1.2s 完全覆盖后,在底下默默把旧图透明度归零,毫无视觉断层\r\n setTimeout(() => { \r\n curBg.style.opacity = 0 \r\n }, 1200)\r\n }, 50)\r\n }\r\n preload.src = nextUrl\r\n },\r\n\r\n /**\r\n * 切换自定义壁纸\r\n */\r\n switchCustomWallpaper(bg1, bg2, wallpapers) {\r\n const isBg1Current = bg1.style.opacity != 0\r\n const curBg = isBg1Current ? bg1 : bg2\r\n const nextBg = isBg1Current ? bg2 : bg1\r\n \r\n this.customWallPaperIndex = (this.customWallPaperIndex + 1) % wallpapers.length\r\n const nextUrl = wallpapers[this.customWallPaperIndex]\r\n\r\n // 旧图垫底,新图置顶\r\n curBg.style.zIndex = -2\r\n nextBg.style.zIndex = -1\r\n\r\n const preload = new Image()\r\n preload.onload = () => {\r\n nextBg.src = nextUrl\r\n \r\n setTimeout(() => {\r\n nextBg.style.opacity = this.bkOpacity\r\n \r\n setTimeout(() => { \r\n curBg.style.opacity = 0 \r\n }, 1200)\r\n }, 50)\r\n }\r\n preload.src = nextUrl\r\n },\r\n\r\n /**\r\n * 清除背景轮播定时器\r\n */\r\n clearBackgroundInterval() {\r\n if (this.backgroundInterval) {\r\n clearInterval(this.backgroundInterval)\r\n this.backgroundInterval = null\r\n }\r\n },\r\n\r\n /**\r\n * 清除背景图片显示(带过渡效果)\r\n * @param {boolean} immediate - 是否立即清除,不使用过渡效果\r\n */\r\n clearBackgroundImages(immediate = false) {\r\n const bg1 = document.getElementById('bg1')\r\n const bg2 = document.getElementById('bg2')\r\n \r\n if (immediate) {\r\n // 立即清除,不使用过渡效果\r\n if (bg1) {\r\n bg1.style.transition = 'none'\r\n bg1.style.opacity = 0\r\n bg1.src = ''\r\n // 恢复过渡效果\r\n setTimeout(() => {\r\n if (bg1) bg1.style.transition = 'opacity 1.2s ease-in-out'\r\n }, 50)\r\n }\r\n if (bg2) {\r\n bg2.style.transition = 'none'\r\n bg2.style.opacity = 0\r\n bg2.src = ''\r\n // 恢复过渡效果\r\n setTimeout(() => {\r\n if (bg2) bg2.style.transition = 'opacity 1.2s ease-in-out'\r\n }, 50)\r\n }\r\n } else {\r\n // 使用过渡效果淡出\r\n if (bg1) {\r\n bg1.style.opacity = 0\r\n setTimeout(() => {\r\n if (bg1) bg1.src = ''\r\n }, 1200)\r\n }\r\n if (bg2) {\r\n bg2.style.opacity = 0\r\n setTimeout(() => {\r\n if (bg2) bg2.src = ''\r\n }, 1200)\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * 平滑主题切换(用于响应主题模式变化)\r\n * @param {string} configKey - 用户配置中的背景图配置键名\r\n * @param {string} containerSelector - 容器选择器\r\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\r\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\r\n */\r\n smoothThemeTransition(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\r\n const backgroundConfig = this.userConfig?.[configKey]\r\n \r\n // 如果不是默认背景配置,则直接重新初始化(自定义背景不受主题影响)\r\n if (!useDefaultBackground || backgroundConfig !== undefined) {\r\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n return\r\n }\r\n\r\n // 对于默认背景,执行平滑过渡\r\n const bg1 = document.getElementById('bg1')\r\n const bg2 = document.getElementById('bg2')\r\n \r\n if (!bg1 || !bg2) {\r\n // 如果背景元素不存在,直接重新初始化\r\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n return\r\n }\r\n\r\n // 确定当前显示的背景和下一个背景\r\n const currentBg = bg1.style.opacity != 0 ? bg1 : bg2\r\n const nextBg = bg1.style.opacity != 0 ? bg2 : bg1\r\n\r\n // 获取新主题对应的背景图\r\n const isDark = this.useDarkMode\r\n const newThemeImage = isDark \r\n ? require('@/assets/background.jpg') \r\n : require('@/assets/background-light.jpg')\r\n\r\n // 预加载新背景图\r\n const preloadImg = new Image()\r\n preloadImg.onload = () => {\r\n // 设置下一个背景的图片源\r\n nextBg.src = newThemeImage\r\n \r\n // 等待图片加载完成后执行淡入淡出过渡\r\n nextBg.onload = () => {\r\n // 淡出当前背景\r\n currentBg.style.opacity = 0\r\n \r\n // 稍微延迟后淡入新背景,确保过渡效果平滑\r\n setTimeout(() => {\r\n nextBg.style.opacity = this.bkOpacity\r\n }, 50) // 50ms 延迟,让淡出效果先开始\r\n }\r\n }\r\n \r\n preloadImg.onerror = () => {\r\n // 如果预加载失败,回退到直接重新初始化\r\n console.warn('主题背景图预加载失败,回退到直接切换')\r\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n }\r\n \r\n preloadImg.src = newThemeImage\r\n },\r\n\r\n /**\r\n * 重新初始化背景图(用于响应配置变化)\r\n */\r\n reinitializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\r\n this.clearBackgroundInterval()\r\n this.clearBackgroundImages(true) // 使用立即清除\r\n this.bingWallPaperIndex = 0\r\n this.customWallPaperIndex = 0\r\n \r\n // 延迟一小段时间确保清理完成\r\n setTimeout(() => {\r\n this.initializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\r\n }, 100)\r\n }\r\n }\r\n}\r\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"title\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", {\n class: \"language-switcher\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleLocale && $options.toggleLocale(...args)),\n role: \"button\",\n title: _ctx.$t('language.switchTo')\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n class: \"lang-icon\"\n })], 8, _hoisted_1);\n}","import { setLocale } from '@/locales';\nexport default {\n name: 'LanguageSwitcher',\n computed: {\n isZh() {\n return this.$i18n.locale === 'zh-CN';\n }\n },\n methods: {\n toggleLocale() {\n const next = this.isZh ? 'en' : 'zh-CN';\n setLocale(next);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./LanguageSwitcher.vue?vue&type=template&id=08567d0a&scoped=true\"\nimport script from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\nexport * from \"./LanguageSwitcher.vue?vue&type=script&lang=js\"\n\nimport \"./LanguageSwitcher.vue?vue&type=style&index=0&id=08567d0a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08567d0a\"]])\n\nexport default __exports__","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode } from \"vue\";\nconst _hoisted_1 = {\n id: \"themeMaskAdmin\"\n};\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\"];\nconst _hoisted_3 = [\"r\"];\nconst _hoisted_4 = [\"opacity\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n id: \"themeToggle\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.3em\",\n height: \"1.3em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMaskAdmin)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.3em\",\n \"color\": \"var(--admin-theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminToggleDark.vue?vue&type=template&id=5c149ed5&scoped=true\"\nimport script from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./AdminToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./AdminToggleDark.vue?vue&type=style&index=0&id=5c149ed5&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5c149ed5\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"tabs\"\n};\nconst _hoisted_2 = {\n class: \"tabs-dropdown-link\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\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_AdminToggleDark = _resolveComponent(\"AdminToggleDark\");\n const _component_LanguageSwitcher = _resolveComponent(\"LanguageSwitcher\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"span\", {\n class: \"title\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.refreshDashboard && $options.refreshDashboard(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.iconName,\n class: \"fa-images\"\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($options.titleName), 1)]), _createVNode(_component_el_dropdown, {\n onCommand: $options.handleTabClick,\n class: \"tabs-dropdown\",\n role: \"navigation\",\n onVisibleChange: $options.handleDropdownVisible,\n \"popper-class\": \"tabs-dropdown-popper\"\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [$props.activeTab !== 'dashboard' ? (_openBlock(), _createBlock(_component_el_dropdown_item, {\n key: 0,\n command: \"dashboard\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"images\",\n style: {\n \"margin-right\": \"5px\",\n \"width\": \"16px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboardTabs.fileManagement')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.activeTab !== 'customerConfig' ? (_openBlock(), _createBlock(_component_el_dropdown_item, {\n key: 1,\n command: \"customerConfig\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"user-cog\",\n style: {\n \"margin-right\": \"5px\",\n \"width\": \"16px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboardTabs.userManagement')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.activeTab !== 'systemConfig' ? (_openBlock(), _createBlock(_component_el_dropdown_item, {\n key: 2,\n command: \"systemConfig\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cogs\",\n style: {\n \"margin-right\": \"5px\",\n \"width\": \"16px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboardTabs.systemSettings')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), _createVNode(_component_el_dropdown_item, {\n command: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"upload\",\n style: {\n \"margin-right\": \"5px\",\n \"width\": \"16px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboardTabs.fileUpload')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_2, [_createVNode(_component_font_awesome_icon, {\n icon: \"bars\",\n class: \"tabs-arrow\"\n })])]),\n _: 1\n }, 8, [\"onCommand\", \"onVisibleChange\"]), _createVNode(_component_AdminToggleDark), _createVNode(_component_LanguageSwitcher, {\n class: \"tabs-language-switcher\"\n })]);\n}","import \"core-js/modules/es.array.push.js\";\nimport AdminToggleDark from './dashboard/AdminToggleDark.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nexport default {\n name: 'DashboardTabs',\n props: {\n activeTab: {\n type: String,\n default: 'dashboard'\n }\n },\n components: {\n AdminToggleDark,\n LanguageSwitcher\n },\n computed: {\n titleName() {\n if (this.activeTab === 'dashboard') {\n return this.$t('dashboardTabs.fileManagement');\n } else if (this.activeTab === 'customerConfig') {\n return this.$t('dashboardTabs.userManagement');\n } else if (this.activeTab === 'systemConfig') {\n return this.$t('dashboardTabs.systemSettings');\n } else {\n return this.$t('dashboardTabs.fileUpload');\n }\n },\n iconName() {\n if (this.activeTab === 'dashboard') {\n return 'images';\n } else if (this.activeTab === 'customerConfig') {\n return 'user-cog';\n } else if (this.activeTab === 'systemConfig') {\n return 'cogs';\n } else {\n return 'upload';\n }\n }\n },\n methods: {\n refreshDashboard() {\n location.reload();\n },\n handleTabClick(tab) {\n this.$router.push(`/${tab}`);\n },\n handleDropdownVisible(isVisible) {\n const arrow = document.querySelector('.tabs-dropdown-link');\n if (isVisible) {\n arrow.classList.add('rotate-up'); // 添加旋转类\n } else {\n arrow.classList.remove('rotate-up'); // 移除旋转类\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DashboardTabs.vue?vue&type=template&id=4e00471a&scoped=true\"\nimport script from \"./DashboardTabs.vue?vue&type=script&lang=js\"\nexport * from \"./DashboardTabs.vue?vue&type=script&lang=js\"\n\nimport \"./DashboardTabs.vue?vue&type=style&index=0&id=4e00471a&scoped=true&lang=css\"\nimport \"./DashboardTabs.vue?vue&type=style&index=1&id=4e00471a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4e00471a\"]])\n\nexport default __exports__"],"names":["data","bingWallPaperIndex","customWallPaperIndex","backgroundInterval","backgroundInitParams","computed","mapGetters","bkInterval","this","userConfig","bkOpacity","backgroundImagesTemplate","backgroundImagesStyles","watch","useDarkMode","newVal","oldVal","$nextTick","smoothThemeTransition","configKey","containerSelector","useDefaultBackground","autoCreateElements","mounted","injectBackgroundStyles","beforeUnmount","clearInterval","clearBackgroundImages","removeBackgroundStyles","methods","styleId","document","getElementById","style","createElement","id","textContent","head","appendChild","existingStyle","remove","createBackgroundElements","container","console","warn","bg1","className","alt","bg2","insertBefore","firstChild","initializeBackground","querySelector","prepareBackgroundContainer","backgroundConfig","setupBingWallpaper","Array","isArray","length","setupCustomWallpaperCarousel","setupSingleCustomWallpaper","setupDefaultWallpaper","$store","dispatch","then","bingWallPapers","loadBackgroundImage","url","setInterval","switchBingWallpaper","wallpapers","switchCustomWallpaper","wallpaperUrl","isDark","defaultImage","require","imgElement","imageSrc","zIndex","opacity","showImage","requestAnimationFrame","preload","Image","onload","src","onerror","computedStyle","window","getComputedStyle","position","isolation","isBg1Current","curBg","nextBg","nextUrl","setTimeout","clearBackgroundInterval","immediate","transition","undefined","reinitializeBackground","currentBg","newThemeImage","preloadImg","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","class","onClick","args","toggleLocale","role","title","$t","icon","name","isZh","$i18n","locale","next","__exports__","isRedirecting","async","fetchWithAuth","options","credentials","headers","response","fetch","status","store","commit","router","push","finally","_hoisted_2","_hoisted_3","_hoisted_4","handleToggleClick","mode","default","isAuto","key","width","height","viewBox","fill","stroke","x","y","cx","cy","r","mask","x1","y1","x2","y2","_","getters","cusDarkMode","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_AdminToggleDark","_component_LanguageSwitcher","refreshDashboard","iconName","titleName","onCommand","handleTabClick","onVisibleChange","handleDropdownVisible","dropdown","activeTab","command","props","type","String","components","AdminToggleDark","LanguageSwitcher","location","reload","tab","$router","isVisible","arrow","classList","add"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/309.b7dca603.js.map.gz b/frontend-dist/js/309.b7dca603.js.map.gz deleted file mode 100644 index 1b25cec6..00000000 Binary files a/frontend-dist/js/309.b7dca603.js.map.gz and /dev/null differ diff --git a/frontend-dist/js/396.226339af.js.gz b/frontend-dist/js/396.226339af.js.gz deleted file mode 100644 index b3273536..00000000 Binary files a/frontend-dist/js/396.226339af.js.gz and /dev/null differ diff --git a/frontend-dist/js/396.226339af.js.map.gz b/frontend-dist/js/396.226339af.js.map.gz deleted file mode 100644 index aba4d09c..00000000 Binary files a/frontend-dist/js/396.226339af.js.map.gz and /dev/null differ diff --git a/frontend-dist/js/396.226339af.js b/frontend-dist/js/396.b3b6ae37.js similarity index 98% rename from frontend-dist/js/396.226339af.js rename to frontend-dist/js/396.b3b6ae37.js index 0389d2a8..b0226e07 100644 --- a/frontend-dist/js/396.226339af.js +++ b/frontend-dist/js/396.b3b6ae37.js @@ -1,2 +1,2 @@ -"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[396],{5802:function(e,a,t){t(85331),t(38736),t(213),t(85970)},59396:function(e,a,t){t.r(a),t.d(a,{default:function(){return F}});var i=t(99114),n=(t(85331),t(30694),t(80047)),o=(t(99648),t(77815)),l=(t(72907),t(55558)),s=(t(10456),t(84757)),d=(t(5802),t(57009)),r=(t(78450),t(64752),t(54880)),c=(t(77128),t(78507)),u=(t(213),t(97247)),p=t(56768),g=t(24232);const h={class:"container"},m={class:"header-content"},f={class:"header-action"},b={class:"main-container"},C={style:{margin:"8px"}},y={style:{"text-align":"center"}},k=["src"],w={key:2,style:{width:"100px",height:"100px",display:"flex","justify-content":"center","align-items":"center"}},L={class:"pagination-container"};function v(e,a,t,v,T,$){const x=u.A,S=(0,p.g2)("font-awesome-icon"),D=c.R7,F=r.bZ,E=s.o8,_=d.Zq,z=s.Up,A=l.qi,P=o.aQ,W=n.S2,X=i.A;return(0,p.uX)(),(0,p.CE)("div",h,[(0,p.bF)(F,null,{default:(0,p.k6)(()=>[(0,p.Lk)("div",m,[(0,p.bF)(x,{activeTab:"customerConfig"}),(0,p.Lk)("div",f,[(0,p.bF)(D,{disabled:$.disableTooltip,content:e.$t("sysConfig.logout"),placement:"bottom"},{default:(0,p.k6)(()=>[(0,p.bF)(S,{icon:"sign-out-alt",class:"header-icon",onClick:$.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,p.Lk)("div",b,[(0,p.bo)(((0,p.uX)(),(0,p.Wv)(z,{data:$.paginatedData,"default-sort":{prop:"count",order:"descending"},"row-key":"ip",class:"main-table","table-layout":"fixed",onExpandChange:$.handleExpandChange},{default:(0,p.k6)(()=>[(0,p.bF)(E,{type:"expand"},{default:(0,p.k6)(a=>[(0,p.Lk)("div",C,[(0,p.Lk)("h3",y,(0,g.v_)(e.$t("customerConfig.uploadFileList")),1),(0,p.bo)(((0,p.uX)(),(0,p.Wv)(z,{data:a.row.data,style:{width:"100%"},"default-sort":{prop:"metadata.TimeStamp",order:"descending"},"table-layout":"fixed","max-height":400},{default:(0,p.k6)(()=>[(0,p.bF)(E,{prop:"metadata.FileName",label:e.$t("customerConfig.fileNameCol")},null,8,["label"]),(0,p.bF)(E,{label:e.$t("customerConfig.filePreview")},{default:(0,p.k6)(({row:e})=>[e.metadata?.FileType?.includes("image")?((0,p.uX)(),(0,p.Wv)(_,{key:0,src:"/file/"+e.id+"?from=admin",fit:"cover",lazy:"",style:{width:"100px",height:"100px"}},null,8,["src"])):e.metadata?.FileType?.includes("video")?((0,p.uX)(),(0,p.CE)("video",{key:1,src:"/file/"+e.id+"?from=admin",controls:"",style:{width:"100px",height:"100px"}},null,8,k)):((0,p.uX)(),(0,p.CE)("div",w,[(0,p.bF)(S,{icon:"file",style:{"font-size":"2em"}})]))]),_:1},8,["label"]),(0,p.bF)(E,{formatter:$.formatTimeStamp,label:e.$t("customerConfig.uploadTimeCol"),prop:"metadata.TimeStamp",sortable:"","sort-method":$.sortByTimestamp},{default:(0,p.k6)(({row:e})=>[(0,p.eW)((0,g.v_)($.formatTimeStamp(e.metadata.TimeStamp)),1)]),_:1},8,["formatter","label","sort-method"])]),_:1},8,["data"])),[[X,a.row.filesLoading]])])]),_:1}),(0,p.bF)(E,{prop:"ip",label:e.$t("customerConfig.ipAddress")},null,8,["label"]),(0,p.bF)(E,{prop:"address",label:e.$t("customerConfig.address")},null,8,["label"]),(0,p.bF)(E,{prop:"count",label:e.$t("customerConfig.uploadCount"),sortable:""},null,8,["label"]),(0,p.bF)(E,{label:e.$t("customerConfig.allowUpload")},{default:(0,p.k6)(({row:a})=>[(0,p.bF)(A,{modelValue:a.enable,"onUpdate:modelValue":e=>a.enable=e,"active-color":"#13ce66","inactive-color":"#ff4949","active-text":e.$t("customerConfig.allow"),"inactive-text":e.$t("customerConfig.deny"),onChange:e=>$.handleSwitchEnable(a)},null,8,["modelValue","onUpdate:modelValue","active-text","inactive-text","onChange"])]),_:1},8,["label"])]),_:1},8,["data","onExpandChange"])),[[X,T.loading]]),(0,p.Lk)("div",L,[(0,p.bF)(P,{background:"",layout:"prev, pager, next",total:T.dealedData.length,"current-page":T.currentPage,"page-size":T.pageSize,"pager-count":$.pagerCount,onCurrentChange:$.handlePageChange},null,8,["total","current-page","page-size","pager-count","onCurrentChange"]),T.currentPage===Math.ceil(T.dealedData.length/T.pageSize)?((0,p.uX)(),(0,p.Wv)(W,{key:0,type:"primary",onClick:$.loadMoreData,loading:T.loading,class:"load-more"},{default:(0,p.k6)(()=>[(0,p.eW)((0,g.v_)(e.$t("customerConfig.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,p.Q3)("",!0)])])])}t(44114),t(18111),t(22489),t(61701),t(13579),t(33110);var T=t(70797),$=t(48903),x={name:"CustomerConfig",mixins:[$.A],data(){return{tableData:[],dealedData:[],blockipList:[],loading:!1,currentPage:1,pageSize:10}},components:{DashboardTabs:u.A},computed:{disableTooltip(){return window.innerWidth<768},pagerCount(){return window.innerWidth<768?3:7},paginatedData(){const e=(this.currentPage-1)*this.pageSize,a=e+this.pageSize;return this.dealedData.slice(e,a)}},methods:{handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},formatTimeStamp(e){return new Date(e).toLocaleString()},sortByTimestamp(e,a){return new Date(e.metadata.TimeStamp)-new Date(a.metadata.TimeStamp)},async handleSwitchEnable(e){const a=e.ip,t=e.enable;t?(this.blockipList=this.blockipList.filter(e=>e!==a),await(0,T.A)("/api/manage/cusConfig/whiteip",{method:"POST",body:a})):(this.blockipList.push(a),await(0,T.A)("/api/manage/cusConfig/blockip",{method:"POST",body:a}))},handlePageChange(e){this.currentPage=e,e===Math.ceil(this.dealedData.length/this.pageSize)&&this.loadMoreData()},async handleExpandChange(e,a){if(a.some(a=>a.ip===e.ip)&&!e.filesLoaded&&!e.filesLoading){e.filesLoading=!0;try{const a=await(0,T.A)(`/api/manage/cusConfig/files?ip=${encodeURIComponent(e.ip)}&count=${e.count}`,{method:"GET"}),t=await a.json();e.data=(t.data||[]).sort(this.sortByTimestamp).reverse(),e.filesLoaded=!0}catch(t){this.$message.error(this.$t("customerConfig.loadError"))}finally{e.filesLoading=!1}}},loadMoreData(){this.loading=!0;const e=this.dealedData.length,a=20;(0,T.A)(`/api/manage/cusConfig/list?start=${e}&count=${a}`,{method:"GET"}).then(e=>e.json()).then(e=>{this.dealedData=this.dealedData.concat(e.map(e=>{const a=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:a}}))}).catch(()=>{this.$message.error(this.$t("customerConfig.loadError"))}).finally(()=>{this.loading=!1})},handleSizeChange(e){this.pageSize=e,this.currentPage=1}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,(0,T.A)("/api/manage/cusConfig/list?count=20",{method:"GET"}).then(e=>e.json()).then(async e=>{const a=await(0,T.A)("/api/manage/cusConfig/blockipList",{method:"GET"});this.blockipList=(await a.text()).split(","),this.dealedData=e.map(e=>{const a=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:a}})}).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("customerConfig.syncError"))}).finally(()=>{this.loading=!1})}},S=t(71241);const D=(0,S.A)(x,[["render",v],["__scopeId","data-v-47645a4d"]]);var F=D},64752:function(e,a,t){t(85331),t(38736),t(18785)},72907:function(e,a,t){t(85331),t(96808),t(29092)}}]); -//# sourceMappingURL=396.226339af.js.map \ No newline at end of file +"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[396],{5802:function(e,a,t){t(85331),t(38736),t(213),t(85970)},59396:function(e,a,t){t.r(a),t.d(a,{default:function(){return F}});var i=t(99114),n=(t(85331),t(30694),t(80047)),o=(t(99648),t(77815)),l=(t(72907),t(55558)),s=(t(10456),t(84757)),d=(t(5802),t(57009)),r=(t(78450),t(64752),t(54880)),c=(t(77128),t(78507)),u=(t(213),t(36600)),p=t(56768),g=t(24232);const h={class:"container"},m={class:"header-content"},f={class:"header-action"},b={class:"main-container"},C={style:{margin:"8px"}},y={style:{"text-align":"center"}},k=["src"],w={key:2,style:{width:"100px",height:"100px",display:"flex","justify-content":"center","align-items":"center"}},L={class:"pagination-container"};function v(e,a,t,v,T,$){const x=u.A,S=(0,p.g2)("font-awesome-icon"),D=c.R7,F=r.bZ,E=s.o8,_=d.Zq,z=s.Up,A=l.qi,P=o.aQ,W=n.S2,X=i.A;return(0,p.uX)(),(0,p.CE)("div",h,[(0,p.bF)(F,null,{default:(0,p.k6)(()=>[(0,p.Lk)("div",m,[(0,p.bF)(x,{activeTab:"customerConfig"}),(0,p.Lk)("div",f,[(0,p.bF)(D,{disabled:$.disableTooltip,content:e.$t("sysConfig.logout"),placement:"bottom"},{default:(0,p.k6)(()=>[(0,p.bF)(S,{icon:"sign-out-alt",class:"header-icon",onClick:$.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,p.Lk)("div",b,[(0,p.bo)(((0,p.uX)(),(0,p.Wv)(z,{data:$.paginatedData,"default-sort":{prop:"count",order:"descending"},"row-key":"ip",class:"main-table","table-layout":"fixed",onExpandChange:$.handleExpandChange},{default:(0,p.k6)(()=>[(0,p.bF)(E,{type:"expand"},{default:(0,p.k6)(a=>[(0,p.Lk)("div",C,[(0,p.Lk)("h3",y,(0,g.v_)(e.$t("customerConfig.uploadFileList")),1),(0,p.bo)(((0,p.uX)(),(0,p.Wv)(z,{data:a.row.data,style:{width:"100%"},"default-sort":{prop:"metadata.TimeStamp",order:"descending"},"table-layout":"fixed","max-height":400},{default:(0,p.k6)(()=>[(0,p.bF)(E,{prop:"metadata.FileName",label:e.$t("customerConfig.fileNameCol")},null,8,["label"]),(0,p.bF)(E,{label:e.$t("customerConfig.filePreview")},{default:(0,p.k6)(({row:e})=>[e.metadata?.FileType?.includes("image")?((0,p.uX)(),(0,p.Wv)(_,{key:0,src:"/file/"+e.id+"?from=admin",fit:"cover",lazy:"",style:{width:"100px",height:"100px"}},null,8,["src"])):e.metadata?.FileType?.includes("video")?((0,p.uX)(),(0,p.CE)("video",{key:1,src:"/file/"+e.id+"?from=admin",controls:"",style:{width:"100px",height:"100px"}},null,8,k)):((0,p.uX)(),(0,p.CE)("div",w,[(0,p.bF)(S,{icon:"file",style:{"font-size":"2em"}})]))]),_:1},8,["label"]),(0,p.bF)(E,{formatter:$.formatTimeStamp,label:e.$t("customerConfig.uploadTimeCol"),prop:"metadata.TimeStamp",sortable:"","sort-method":$.sortByTimestamp},{default:(0,p.k6)(({row:e})=>[(0,p.eW)((0,g.v_)($.formatTimeStamp(e.metadata.TimeStamp)),1)]),_:1},8,["formatter","label","sort-method"])]),_:1},8,["data"])),[[X,a.row.filesLoading]])])]),_:1}),(0,p.bF)(E,{prop:"ip",label:e.$t("customerConfig.ipAddress")},null,8,["label"]),(0,p.bF)(E,{prop:"address",label:e.$t("customerConfig.address")},null,8,["label"]),(0,p.bF)(E,{prop:"count",label:e.$t("customerConfig.uploadCount"),sortable:""},null,8,["label"]),(0,p.bF)(E,{label:e.$t("customerConfig.allowUpload")},{default:(0,p.k6)(({row:a})=>[(0,p.bF)(A,{modelValue:a.enable,"onUpdate:modelValue":e=>a.enable=e,"active-color":"#13ce66","inactive-color":"#ff4949","active-text":e.$t("customerConfig.allow"),"inactive-text":e.$t("customerConfig.deny"),onChange:e=>$.handleSwitchEnable(a)},null,8,["modelValue","onUpdate:modelValue","active-text","inactive-text","onChange"])]),_:1},8,["label"])]),_:1},8,["data","onExpandChange"])),[[X,T.loading]]),(0,p.Lk)("div",L,[(0,p.bF)(P,{background:"",layout:"prev, pager, next",total:T.dealedData.length,"current-page":T.currentPage,"page-size":T.pageSize,"pager-count":$.pagerCount,onCurrentChange:$.handlePageChange},null,8,["total","current-page","page-size","pager-count","onCurrentChange"]),T.currentPage===Math.ceil(T.dealedData.length/T.pageSize)?((0,p.uX)(),(0,p.Wv)(W,{key:0,type:"primary",onClick:$.loadMoreData,loading:T.loading,class:"load-more"},{default:(0,p.k6)(()=>[(0,p.eW)((0,g.v_)(e.$t("customerConfig.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,p.Q3)("",!0)])])])}t(44114),t(18111),t(22489),t(61701),t(13579),t(33110);var T=t(70797),$=t(48903),x={name:"CustomerConfig",mixins:[$.A],data(){return{tableData:[],dealedData:[],blockipList:[],loading:!1,currentPage:1,pageSize:10}},components:{DashboardTabs:u.A},computed:{disableTooltip(){return window.innerWidth<768},pagerCount(){return window.innerWidth<768?3:7},paginatedData(){const e=(this.currentPage-1)*this.pageSize,a=e+this.pageSize;return this.dealedData.slice(e,a)}},methods:{handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},formatTimeStamp(e){return new Date(e).toLocaleString()},sortByTimestamp(e,a){return new Date(e.metadata.TimeStamp)-new Date(a.metadata.TimeStamp)},async handleSwitchEnable(e){const a=e.ip,t=e.enable;t?(this.blockipList=this.blockipList.filter(e=>e!==a),await(0,T.A)("/api/manage/cusConfig/whiteip",{method:"POST",body:a})):(this.blockipList.push(a),await(0,T.A)("/api/manage/cusConfig/blockip",{method:"POST",body:a}))},handlePageChange(e){this.currentPage=e,e===Math.ceil(this.dealedData.length/this.pageSize)&&this.loadMoreData()},async handleExpandChange(e,a){if(a.some(a=>a.ip===e.ip)&&!e.filesLoaded&&!e.filesLoading){e.filesLoading=!0;try{const a=await(0,T.A)(`/api/manage/cusConfig/files?ip=${encodeURIComponent(e.ip)}&count=${e.count}`,{method:"GET"}),t=await a.json();e.data=(t.data||[]).sort(this.sortByTimestamp).reverse(),e.filesLoaded=!0}catch(t){this.$message.error(this.$t("customerConfig.loadError"))}finally{e.filesLoading=!1}}},loadMoreData(){this.loading=!0;const e=this.dealedData.length,a=20;(0,T.A)(`/api/manage/cusConfig/list?start=${e}&count=${a}`,{method:"GET"}).then(e=>e.json()).then(e=>{this.dealedData=this.dealedData.concat(e.map(e=>{const a=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:a}}))}).catch(()=>{this.$message.error(this.$t("customerConfig.loadError"))}).finally(()=>{this.loading=!1})},handleSizeChange(e){this.pageSize=e,this.currentPage=1}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,(0,T.A)("/api/manage/cusConfig/list?count=20",{method:"GET"}).then(e=>e.json()).then(async e=>{const a=await(0,T.A)("/api/manage/cusConfig/blockipList",{method:"GET"});this.blockipList=(await a.text()).split(","),this.dealedData=e.map(e=>{const a=!this.blockipList.includes(e.ip);return{ip:e.ip,address:e.address,count:e.count,data:[],filesLoaded:!1,filesLoading:!1,enable:a}})}).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("customerConfig.syncError"))}).finally(()=>{this.loading=!1})}},S=t(71241);const D=(0,S.A)(x,[["render",v],["__scopeId","data-v-47645a4d"]]);var F=D},64752:function(e,a,t){t(85331),t(38736),t(18785)},72907:function(e,a,t){t(85331),t(96808),t(29092)}}]); +//# sourceMappingURL=396.b3b6ae37.js.map \ No newline at end of file diff --git a/frontend-dist/js/396.b3b6ae37.js.gz b/frontend-dist/js/396.b3b6ae37.js.gz new file mode 100644 index 00000000..19b586b0 Binary files /dev/null and b/frontend-dist/js/396.b3b6ae37.js.gz differ diff --git a/frontend-dist/js/396.226339af.js.map b/frontend-dist/js/396.b3b6ae37.js.map similarity index 99% rename from frontend-dist/js/396.226339af.js.map rename to frontend-dist/js/396.b3b6ae37.js.map index 410bbb9e..67ded923 100644 --- a/frontend-dist/js/396.226339af.js.map +++ b/frontend-dist/js/396.b3b6ae37.js.map @@ -1 +1 @@ -{"version":3,"file":"js/396.226339af.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/views/CustomerConfig.vue?32f4","webpack://sanyue_imghub/./src/views/CustomerConfig.vue","webpack://sanyue_imghub/./src/views/CustomerConfig.vue?658e"],"sourcesContent":["import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content\"\n};\nconst _hoisted_3 = {\n class: \"header-action\"\n};\nconst _hoisted_4 = {\n class: \"main-container\"\n};\nconst _hoisted_5 = {\n style: {\n \"margin\": \"8px\"\n }\n};\nconst _hoisted_6 = {\n style: {\n \"text-align\": \"center\"\n }\n};\nconst _hoisted_7 = [\"src\"];\nconst _hoisted_8 = {\n key: 2,\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\",\n \"display\": \"flex\",\n \"justify-content\": \"center\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_9 = {\n class: \"pagination-container\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"customerConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_4, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $options.paginatedData,\n \"default-sort\": {\n prop: 'count',\n order: 'descending'\n },\n \"row-key\": \"ip\",\n class: \"main-table\",\n \"table-layout\": \"fixed\",\n onExpandChange: $options.handleExpandChange\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n type: \"expand\"\n }, {\n default: _withCtx(props => [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.$t('customerConfig.uploadFileList')), 1), _withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: props.row.data,\n style: {\n \"width\": \"100%\"\n },\n \"default-sort\": {\n prop: 'metadata.TimeStamp',\n order: 'descending'\n },\n \"table-layout\": \"fixed\",\n \"max-height\": 400\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"metadata.FileName\",\n label: _ctx.$t('customerConfig.fileNameCol')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.filePreview')\n }, {\n default: _withCtx(({\n row\n }) => [row.metadata?.FileType?.includes('image') ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + row.id + '?from=admin',\n fit: \"cover\",\n lazy: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, [\"src\"])) : row.metadata?.FileType?.includes('video') ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + row.id + '?from=admin',\n controls: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, _hoisted_7)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n style: {\n \"font-size\": \"2em\"\n }\n })]))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n formatter: $options.formatTimeStamp,\n label: _ctx.$t('customerConfig.uploadTimeCol'),\n prop: \"metadata.TimeStamp\",\n sortable: \"\",\n \"sort-method\": $options.sortByTimestamp\n }, {\n default: _withCtx(({\n row\n }) => [_createTextVNode(_toDisplayString($options.formatTimeStamp(row.metadata.TimeStamp)), 1)]),\n _: 1\n }, 8, [\"formatter\", \"label\", \"sort-method\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, props.row.filesLoading]])])]),\n _: 1\n }), _createVNode(_component_el_table_column, {\n prop: \"ip\",\n label: _ctx.$t('customerConfig.ipAddress')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"address\",\n label: _ctx.$t('customerConfig.address')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"count\",\n label: _ctx.$t('customerConfig.uploadCount'),\n sortable: \"\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.allowUpload')\n }, {\n default: _withCtx(({\n row\n }) => [_createVNode(_component_el_switch, {\n modelValue: row.enable,\n \"onUpdate:modelValue\": $event => row.enable = $event,\n \"active-color\": \"#13ce66\",\n \"inactive-color\": \"#ff4949\",\n \"active-text\": _ctx.$t('customerConfig.allow'),\n \"inactive-text\": _ctx.$t('customerConfig.deny'),\n onChange: $event => $options.handleSwitchEnable(row)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"active-text\", \"inactive-text\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"data\", \"onExpandChange\"])), [[_directive_loading, $data.loading]]), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $data.dealedData.length,\n \"current-page\": $data.currentPage,\n \"page-size\": $data.pageSize,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"current-page\", \"page-size\", \"pager-count\", \"onCurrentChange\"]), $data.currentPage === Math.ceil($data.dealedData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('customerConfig.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)])])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'CustomerConfig',\n mixins: [backgroundManager],\n data() {\n return {\n tableData: [],\n dealedData: [],\n // 根据IP地址处理后的数据,格式为 {ip, count, [data]}\n blockipList: [],\n // 禁止上传的IP列表\n\n loading: false,\n // 分页数据\n currentPage: 1,\n pageSize: 10 // 默认每页10条\n };\n },\n components: {\n DashboardTabs\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n },\n pagerCount() {\n return window.innerWidth < 768 ? 3 : 7;\n },\n paginatedData() {\n // 计算分页数据\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n return this.dealedData.slice(start, end);\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n formatTimeStamp(timeStamp) {\n return new Date(timeStamp).toLocaleString();\n },\n sortByTimestamp(a, b) {\n return new Date(a.metadata.TimeStamp) - new Date(b.metadata.TimeStamp);\n },\n async handleSwitchEnable(row) {\n const ip = row.ip;\n const enable = row.enable;\n if (enable) {\n // 从 blockipList 中移除\n this.blockipList = this.blockipList.filter(item => item !== ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/whiteip\", {\n method: 'POST',\n body: ip\n });\n } else {\n // 添加到 blockipList 中\n this.blockipList.push(ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/blockip\", {\n method: 'POST',\n body: ip\n });\n }\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (page === Math.ceil(this.dealedData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n async handleExpandChange(row, expandedRows) {\n if (!expandedRows.some(item => item.ip === row.ip) || row.filesLoaded || row.filesLoading) return;\n row.filesLoading = true;\n try {\n const response = await fetchWithAuth(`/api/manage/cusConfig/files?ip=${encodeURIComponent(row.ip)}&count=${row.count}`, {\n method: 'GET'\n });\n const result = await response.json();\n row.data = (result.data || []).sort(this.sortByTimestamp).reverse();\n row.filesLoaded = true;\n } catch (err) {\n this.$message.error(this.$t('customerConfig.loadError'));\n } finally {\n row.filesLoading = false;\n }\n },\n loadMoreData() {\n this.loading = true;\n const start = this.dealedData.length;\n const count = 20; // 每次加载20条数据\n fetchWithAuth(`/api/manage/cusConfig/list?start=${start}&count=${count}`, {\n method: 'GET'\n }).then(response => response.json()).then(result => {\n this.dealedData = this.dealedData.concat(result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n }));\n }).catch(() => {\n this.$message.error(this.$t('customerConfig.loadError'));\n }).finally(() => {\n this.loading = false;\n });\n },\n handleSizeChange(size) {\n this.pageSize = size;\n this.currentPage = 1;\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.loading = true;\n\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n fetchWithAuth(\"/api/manage/cusConfig/list?count=20\", {\n method: 'GET'\n }).then(response => response.json()).then(async result => {\n // 读取blockipList, 接口返回格式为 'ip1,ip2,ip3',需要转换为数组\n const blockipList = await fetchWithAuth(\"/api/manage/cusConfig/blockipList\", {\n method: 'GET'\n });\n this.blockipList = (await blockipList.text()).split(',');\n this.dealedData = result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n });\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('customerConfig.syncError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomerConfig.vue?vue&type=template&id=47645a4d&scoped=true\"\nimport script from \"./CustomerConfig.vue?vue&type=script&lang=js\"\nexport * from \"./CustomerConfig.vue?vue&type=script&lang=js\"\n\nimport \"./CustomerConfig.vue?vue&type=style&index=0&id=47645a4d&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-47645a4d\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","style","_hoisted_6","_hoisted_7","_hoisted_8","key","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_component_DashboardTabs","_component_font_awesome_icon","_component_el_tooltip","_component_el_header","_component_el_table_column","_component_el_image","_component_el_table","_component_el_switch","_component_el_pagination","_component_el_button","_directive_loading","default","activeTab","disabled","disableTooltip","content","$t","placement","icon","onClick","handleLogout","_","data","paginatedData","prop","order","onExpandChange","handleExpandChange","type","props","row","label","metadata","FileType","includes","src","id","fit","lazy","controls","formatter","formatTimeStamp","sortable","sortByTimestamp","TimeStamp","filesLoading","modelValue","enable","$event","onChange","handleSwitchEnable","loading","background","layout","total","dealedData","length","currentPage","pageSize","pagerCount","onCurrentChange","handlePageChange","Math","ceil","loadMoreData","name","mixins","backgroundManager","tableData","blockipList","components","DashboardTabs","computed","window","innerWidth","start","this","end","slice","methods","url","fetch","method","credentials","headers","body","JSON","stringify","authType","finally","$store","commit","$router","push","timeStamp","Date","toLocaleString","a","b","ip","filter","item","fetchWithAuth","page","expandedRows","some","filesLoaded","response","encodeURIComponent","count","result","json","sort","reverse","err","$message","error","then","concat","map","address","catch","handleSizeChange","size","mounted","initializeBackground","showLogoutButton","state","adminLoggedIn","async","text","split","message","__exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/396.b3b6ae37.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/views/CustomerConfig.vue?32f4","webpack://sanyue_imghub/./src/views/CustomerConfig.vue","webpack://sanyue_imghub/./src/views/CustomerConfig.vue?658e"],"sourcesContent":["import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content\"\n};\nconst _hoisted_3 = {\n class: \"header-action\"\n};\nconst _hoisted_4 = {\n class: \"main-container\"\n};\nconst _hoisted_5 = {\n style: {\n \"margin\": \"8px\"\n }\n};\nconst _hoisted_6 = {\n style: {\n \"text-align\": \"center\"\n }\n};\nconst _hoisted_7 = [\"src\"];\nconst _hoisted_8 = {\n key: 2,\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\",\n \"display\": \"flex\",\n \"justify-content\": \"center\",\n \"align-items\": \"center\"\n }\n};\nconst _hoisted_9 = {\n class: \"pagination-container\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"customerConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_4, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $options.paginatedData,\n \"default-sort\": {\n prop: 'count',\n order: 'descending'\n },\n \"row-key\": \"ip\",\n class: \"main-table\",\n \"table-layout\": \"fixed\",\n onExpandChange: $options.handleExpandChange\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n type: \"expand\"\n }, {\n default: _withCtx(props => [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.$t('customerConfig.uploadFileList')), 1), _withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: props.row.data,\n style: {\n \"width\": \"100%\"\n },\n \"default-sort\": {\n prop: 'metadata.TimeStamp',\n order: 'descending'\n },\n \"table-layout\": \"fixed\",\n \"max-height\": 400\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"metadata.FileName\",\n label: _ctx.$t('customerConfig.fileNameCol')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.filePreview')\n }, {\n default: _withCtx(({\n row\n }) => [row.metadata?.FileType?.includes('image') ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + row.id + '?from=admin',\n fit: \"cover\",\n lazy: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, [\"src\"])) : row.metadata?.FileType?.includes('video') ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + row.id + '?from=admin',\n controls: \"\",\n style: {\n \"width\": \"100px\",\n \"height\": \"100px\"\n }\n }, null, 8, _hoisted_7)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n style: {\n \"font-size\": \"2em\"\n }\n })]))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n formatter: $options.formatTimeStamp,\n label: _ctx.$t('customerConfig.uploadTimeCol'),\n prop: \"metadata.TimeStamp\",\n sortable: \"\",\n \"sort-method\": $options.sortByTimestamp\n }, {\n default: _withCtx(({\n row\n }) => [_createTextVNode(_toDisplayString($options.formatTimeStamp(row.metadata.TimeStamp)), 1)]),\n _: 1\n }, 8, [\"formatter\", \"label\", \"sort-method\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, props.row.filesLoading]])])]),\n _: 1\n }), _createVNode(_component_el_table_column, {\n prop: \"ip\",\n label: _ctx.$t('customerConfig.ipAddress')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"address\",\n label: _ctx.$t('customerConfig.address')\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"count\",\n label: _ctx.$t('customerConfig.uploadCount'),\n sortable: \"\"\n }, null, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('customerConfig.allowUpload')\n }, {\n default: _withCtx(({\n row\n }) => [_createVNode(_component_el_switch, {\n modelValue: row.enable,\n \"onUpdate:modelValue\": $event => row.enable = $event,\n \"active-color\": \"#13ce66\",\n \"inactive-color\": \"#ff4949\",\n \"active-text\": _ctx.$t('customerConfig.allow'),\n \"inactive-text\": _ctx.$t('customerConfig.deny'),\n onChange: $event => $options.handleSwitchEnable(row)\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"active-text\", \"inactive-text\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"data\", \"onExpandChange\"])), [[_directive_loading, $data.loading]]), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $data.dealedData.length,\n \"current-page\": $data.currentPage,\n \"page-size\": $data.pageSize,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"current-page\", \"page-size\", \"pager-count\", \"onCurrentChange\"]), $data.currentPage === Math.ceil($data.dealedData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('customerConfig.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)])])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'CustomerConfig',\n mixins: [backgroundManager],\n data() {\n return {\n tableData: [],\n dealedData: [],\n // 根据IP地址处理后的数据,格式为 {ip, count, [data]}\n blockipList: [],\n // 禁止上传的IP列表\n\n loading: false,\n // 分页数据\n currentPage: 1,\n pageSize: 10 // 默认每页10条\n };\n },\n components: {\n DashboardTabs\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n },\n pagerCount() {\n return window.innerWidth < 768 ? 3 : 7;\n },\n paginatedData() {\n // 计算分页数据\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n return this.dealedData.slice(start, end);\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n formatTimeStamp(timeStamp) {\n return new Date(timeStamp).toLocaleString();\n },\n sortByTimestamp(a, b) {\n return new Date(a.metadata.TimeStamp) - new Date(b.metadata.TimeStamp);\n },\n async handleSwitchEnable(row) {\n const ip = row.ip;\n const enable = row.enable;\n if (enable) {\n // 从 blockipList 中移除\n this.blockipList = this.blockipList.filter(item => item !== ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/whiteip\", {\n method: 'POST',\n body: ip\n });\n } else {\n // 添加到 blockipList 中\n this.blockipList.push(ip);\n // 更新 blockipList\n await fetchWithAuth(\"/api/manage/cusConfig/blockip\", {\n method: 'POST',\n body: ip\n });\n }\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (page === Math.ceil(this.dealedData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n async handleExpandChange(row, expandedRows) {\n if (!expandedRows.some(item => item.ip === row.ip) || row.filesLoaded || row.filesLoading) return;\n row.filesLoading = true;\n try {\n const response = await fetchWithAuth(`/api/manage/cusConfig/files?ip=${encodeURIComponent(row.ip)}&count=${row.count}`, {\n method: 'GET'\n });\n const result = await response.json();\n row.data = (result.data || []).sort(this.sortByTimestamp).reverse();\n row.filesLoaded = true;\n } catch (err) {\n this.$message.error(this.$t('customerConfig.loadError'));\n } finally {\n row.filesLoading = false;\n }\n },\n loadMoreData() {\n this.loading = true;\n const start = this.dealedData.length;\n const count = 20; // 每次加载20条数据\n fetchWithAuth(`/api/manage/cusConfig/list?start=${start}&count=${count}`, {\n method: 'GET'\n }).then(response => response.json()).then(result => {\n this.dealedData = this.dealedData.concat(result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n }));\n }).catch(() => {\n this.$message.error(this.$t('customerConfig.loadError'));\n }).finally(() => {\n this.loading = false;\n });\n },\n handleSizeChange(size) {\n this.pageSize = size;\n this.currentPage = 1;\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.loading = true;\n\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n fetchWithAuth(\"/api/manage/cusConfig/list?count=20\", {\n method: 'GET'\n }).then(response => response.json()).then(async result => {\n // 读取blockipList, 接口返回格式为 'ip1,ip2,ip3',需要转换为数组\n const blockipList = await fetchWithAuth(\"/api/manage/cusConfig/blockipList\", {\n method: 'GET'\n });\n this.blockipList = (await blockipList.text()).split(',');\n this.dealedData = result.map(item => {\n const enable = !this.blockipList.includes(item.ip);\n return {\n ip: item.ip,\n address: item.address,\n count: item.count,\n data: [],\n filesLoaded: false,\n filesLoading: false,\n enable: enable\n };\n });\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('customerConfig.syncError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomerConfig.vue?vue&type=template&id=47645a4d&scoped=true\"\nimport script from \"./CustomerConfig.vue?vue&type=script&lang=js\"\nexport * from \"./CustomerConfig.vue?vue&type=script&lang=js\"\n\nimport \"./CustomerConfig.vue?vue&type=style&index=0&id=47645a4d&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-47645a4d\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","style","_hoisted_6","_hoisted_7","_hoisted_8","key","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_component_DashboardTabs","_component_font_awesome_icon","_component_el_tooltip","_component_el_header","_component_el_table_column","_component_el_image","_component_el_table","_component_el_switch","_component_el_pagination","_component_el_button","_directive_loading","default","activeTab","disabled","disableTooltip","content","$t","placement","icon","onClick","handleLogout","_","data","paginatedData","prop","order","onExpandChange","handleExpandChange","type","props","row","label","metadata","FileType","includes","src","id","fit","lazy","controls","formatter","formatTimeStamp","sortable","sortByTimestamp","TimeStamp","filesLoading","modelValue","enable","$event","onChange","handleSwitchEnable","loading","background","layout","total","dealedData","length","currentPage","pageSize","pagerCount","onCurrentChange","handlePageChange","Math","ceil","loadMoreData","name","mixins","backgroundManager","tableData","blockipList","components","DashboardTabs","computed","window","innerWidth","start","this","end","slice","methods","url","fetch","method","credentials","headers","body","JSON","stringify","authType","finally","$store","commit","$router","push","timeStamp","Date","toLocaleString","a","b","ip","filter","item","fetchWithAuth","page","expandedRows","some","filesLoaded","response","encodeURIComponent","count","result","json","sort","reverse","err","$message","error","then","concat","map","address","catch","handleSizeChange","size","mounted","initializeBackground","showLogoutButton","state","adminLoggedIn","async","text","split","message","__exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/396.b3b6ae37.js.map.gz b/frontend-dist/js/396.b3b6ae37.js.map.gz new file mode 100644 index 00000000..69bc71bf Binary files /dev/null and b/frontend-dist/js/396.b3b6ae37.js.map.gz differ diff --git a/frontend-dist/js/529.e05f38bd.js b/frontend-dist/js/529.287c329f.js similarity index 99% rename from frontend-dist/js/529.e05f38bd.js rename to frontend-dist/js/529.287c329f.js index 26d34c9f..ecfafe7d 100644 --- a/frontend-dist/js/529.e05f38bd.js +++ b/frontend-dist/js/529.287c329f.js @@ -1,4 +1,4 @@ -"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[529],{2893:function(t,e,s){s(85331)},3261:function(t,e,s){s(85331)},4885:function(t,e,s){s(85331)},5802:function(t,e,s){s(85331),s(38736),s(213),s(85970)},15616:function(t,e,s){s(85331),s(97197)},31529:function(t,e,s){s.r(e),s.d(e,{default:function(){return Qg}});var i=s(56768),n=s(24232);const a={class:"menu-list"},o=["onClick"],l={class:"menu-text"};function r(t,e,s,r,d,c){const h=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",{class:(0,n.C4)(["sidebar-container",{"is-collapsed":s.isCollapse}]),ref:"sidebar",style:(0,n.Tr)(c.sidebarStyle)},[(0,i.Lk)("div",a,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.menuItems,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.index,class:(0,n.C4)(["menu-item",{"is-active":s.activeIndex===e.index}]),onClick:t=>c.handleSelect(e.index)},[(0,i.bF)(h,{icon:e.icon,class:"menu-icon"},null,8,["icon"]),(0,i.Lk)("span",l,(0,n.v_)(t.$t(e.titleKey)),1)],10,o))),128))]),(0,i.Lk)("div",{class:"toggle-button",onClick:e[0]||(e[0]=(...t)=>c.toggleCollapse&&c.toggleCollapse(...t))},[(0,i.bF)(h,{icon:s.isCollapse?"angle-double-right":"angle-double-left"},null,8,["icon"])])],6)}var d={name:"SysConfigTabs",props:{activeIndex:{type:String,default:"status"},isCollapse:{type:Boolean,default:!1}},data(){return{expandedWidth:null,menuItems:[{index:"status",icon:"chart-bar",titleKey:"sysConfigTabs.systemStatus"},{index:"upload",icon:"cloud-upload",titleKey:"sysConfigTabs.uploadSettings"},{index:"security",icon:"shield",titleKey:"sysConfigTabs.securitySettings"},{index:"page",icon:"pager",titleKey:"sysConfigTabs.pageSettings"},{index:"others",icon:"cog",titleKey:"sysConfigTabs.otherSettings"}]}},computed:{collapsedWidth(){return window.innerWidth<=768?50:56},sidebarStyle(){return this.isCollapse?{width:this.collapsedWidth+"px"}:this.expandedWidth?{width:this.expandedWidth+"px"}:{}}},watch:{"$i18n.locale"(){this.$nextTick(()=>this.measureWidth())}},methods:{toggleCollapse(){this.$emit("update:isCollapse",!this.isCollapse)},checkMobile(){const t=window.innerWidth<=768;this.$emit("update:isCollapse",t)},handleSelect(t){this.$emit("update:activeIndex",t)},measureWidth(){const t=this.$refs.sidebar;if(!t)return;const e=t.style.width,s=t.style.transition,i=t.classList.contains("is-collapsed");t.style.transition="none",i&&t.classList.remove("is-collapsed"),t.style.width="auto",t.offsetWidth;const n=t.scrollWidth;t.style.width=e,i&&t.classList.add("is-collapsed"),t.offsetWidth,t.style.transition=s,this.expandedWidth=n}},mounted(){this.checkMobile(),this.$nextTick(()=>this.measureWidth()),window.addEventListener("resize",this.checkMobile)},beforeDestroy(){window.removeEventListener("resize",this.checkMobile)}},c=s(71241);const h=(0,c.A)(d,[["render",r],["__scopeId","data-v-2718059d"]]);var u=h,p=s(54880),g=(s(85331),s(77128),s(78507)),f=(s(213),s(97247));const m={class:"container"},b={class:"header-content"},y={class:"header-action"};function x(t,e,s,a,o,l){const r=f.A,d=(0,i.g2)("font-awesome-icon"),c=g.R7,h=p.bZ,x=u;return(0,i.uX)(),(0,i.CE)("div",m,[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",b,[(0,i.bF)(r,{activeTab:"systemConfig"}),(0,i.Lk)("div",y,[(0,i.bF)(c,{disabled:l.disableTooltip,content:t.$t("sysConfig.logout"),placement:"bottom"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{icon:"sign-out-alt",class:"header-icon",onClick:l.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,i.bF)(x,{activeIndex:o.activeIndex,"onUpdate:activeIndex":e[0]||(e[0]=t=>o.activeIndex=t),isCollapse:o.isSidebarCollapse,"onUpdate:isCollapse":e[1]||(e[1]=t=>o.isSidebarCollapse=t)},null,8,["activeIndex","isCollapse"]),((0,i.uX)(),(0,i.Wv)((0,i.$y)(l.currentComponent),{class:(0,n.C4)(["main-container",{collapsed:o.isSidebarCollapse}])},null,8,["class"]))])}s(44114),s(33110);var v=s(99114),_=(s(30694),s(57009)),k=(s(78450),s(69655)),w=(s(2893),s(9267)),C=(s(15616),s(45130));const S={class:"date-range-calendar"},F={class:"selected-range"},T={class:"selected-range-inputs"},P=["aria-label"],M={class:"date-range-separator"},D=["aria-label"],A={class:"calendar-header"},$=["aria-label"],V={class:"calendar-title"},L=["aria-label"],E={class:"calendar-weekdays"},I={class:"calendar-grid"},U=["onClick"];function O(t,e,s,a,o,l){const r=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",S,[(0,i.Lk)("div",F,[(0,i.Lk)("div",T,[(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":e[0]||(e[0]=t=>o.inputStart=t),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.startDateLabel,onChange:e[1]||(e[1]=(...t)=>l.handleManualInput&&l.handleManualInput(...t))},null,40,P),[[C.Jo,o.inputStart,void 0,{trim:!0}]]),(0,i.Lk)("span",M,(0,n.v_)(l.rangeSeparator),1),(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>o.inputEnd=t),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.endDateLabel,onChange:e[3]||(e[3]=(...t)=>l.handleManualInput&&l.handleManualInput(...t))},null,40,D),[[C.Jo,o.inputEnd,void 0,{trim:!0}]])])]),(0,i.Lk)("div",A,[(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.previousMonthLabel,onClick:e[4]||(e[4]=(...t)=>l.goToPreviousMonth&&l.goToPreviousMonth(...t))},[(0,i.bF)(r,{icon:"chevron-left"})],8,$),(0,i.Lk)("div",V,(0,n.v_)(l.monthTitle),1),(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.nextMonthLabel,onClick:e[5]||(e[5]=(...t)=>l.goToNextMonth&&l.goToNextMonth(...t))},[(0,i.bF)(r,{icon:"chevron-right"})],8,L)]),(0,i.Lk)("div",E,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.weekdayLabels,t=>((0,i.uX)(),(0,i.CE)("span",{key:t},(0,n.v_)(t),1))),128))]),(0,i.Lk)("div",I,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.calendarDays,t=>((0,i.uX)(),(0,i.CE)("button",{key:t.key,type:"button",class:(0,n.C4)(["calendar-day",{"is-muted":!t.isCurrentMonth,"is-today":t.isToday,"is-range-start":t.key===o.draftStart,"is-range-end":t.key===o.draftEnd,"is-in-range":l.isInRange(t.key)}]),onClick:e=>l.selectDay(t.key)},(0,n.v_)(t.dayOfMonth),11,U))),128))])])}const R=864e5;function W(t){return String(t).padStart(2,"0")}function B(t){return`${t.getFullYear()}-${W(t.getMonth()+1)}-${W(t.getDate())}`}function N(t){if("string"!==typeof t)return null;const e=t.trim().match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);if(!e)return null;const s=Number(e[1]),i=Number(e[2])-1,n=Number(e[3]),a=new Date(s,i,n);return a.getFullYear()!==s||a.getMonth()!==i||a.getDate()!==n?null:(a.setHours(0,0,0,0),a)}function z(t,e){return new Date(t.getFullYear(),t.getMonth()+e,1)}var j={name:"DateRangeCalendar",props:{modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue","change"],data(){const t=new Date;return t.setHours(0,0,0,0),{displayYear:t.getFullYear(),displayMonth:t.getMonth(),draftStart:"",draftEnd:"",inputStart:"",inputEnd:"",awaitingEnd:!1}},computed:{previousMonthLabel(){return this.$t("dateRangeCalendar.previousMonth")},nextMonthLabel(){return this.$t("dateRangeCalendar.nextMonth")},startDateLabel(){return this.$t("dateRangeCalendar.startDate")},endDateLabel(){return this.$t("dateRangeCalendar.endDate")},rangeSeparator(){return this.$t("dateRangeCalendar.rangeSeparator")},monthTitle(){return this.$t("dateRangeCalendar.monthTitle",{year:this.displayYear,month:W(this.displayMonth+1)})},weekdayLabels(){return[this.$t("dateRangeCalendar.weekdaySun"),this.$t("dateRangeCalendar.weekdayMon"),this.$t("dateRangeCalendar.weekdayTue"),this.$t("dateRangeCalendar.weekdayWed"),this.$t("dateRangeCalendar.weekdayThu"),this.$t("dateRangeCalendar.weekdayFri"),this.$t("dateRangeCalendar.weekdaySat")]},calendarDays(){const t=new Date(this.displayYear,this.displayMonth,1),e=new Date(this.displayYear,this.displayMonth,1-t.getDay()),s=B(new Date);return Array.from({length:42},(t,i)=>{const n=new Date(e.getTime()+i*R),a=B(n);return{key:a,dayOfMonth:n.getDate(),isCurrentMonth:n.getMonth()===this.displayMonth,isToday:a===s}})}},watch:{modelValue:{immediate:!0,handler(t){this.syncFromModel(t)}}},methods:{syncFromModel(t){const e=N(t?.[0]),s=N(t?.[1]);this.draftStart=e?B(e):"",this.draftEnd=s?B(s):"",this.inputStart=this.draftStart,this.inputEnd=this.draftEnd,this.awaitingEnd=!1;const i=e||s;i&&(this.displayYear=i.getFullYear(),this.displayMonth=i.getMonth())},goToPreviousMonth(){const t=z(new Date(this.displayYear,this.displayMonth,1),-1);this.displayYear=t.getFullYear(),this.displayMonth=t.getMonth()},goToNextMonth(){const t=z(new Date(this.displayYear,this.displayMonth,1),1);this.displayYear=t.getFullYear(),this.displayMonth=t.getMonth()},selectDay(t){if(!this.draftStart||this.draftEnd||!this.awaitingEnd)return this.draftStart=t,this.draftEnd="",this.inputStart=t,this.inputEnd="",void(this.awaitingEnd=!0);const e=tthis.draftStart&&tl.fetchIndexInfo&&l.fetchIndexInfo(...t))},[(0,i.Lk)("div",G,[(0,i.bF)(r,{icon:"database"})]),(0,i.Lk)("div",J,[(0,i.Lk)("div",Z,(0,n.v_)(t.$t("sysStatus.totalFiles")),1),(0,i.Lk)("div",tt,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",et,(0,n.v_)(t.$t("sysStatus.clickToRefresh")),1)])]),(0,i.Lk)("div",st,[(0,i.Lk)("div",it,[(0,i.bF)(r,{icon:"clock"})]),(0,i.Lk)("div",nt,[(0,i.Lk)("div",at,(0,n.v_)(t.$t("sysStatus.indexUpdateTime")),1),(0,i.Lk)("div",ot,(0,n.v_)(l.formatTime(o.indexInfo.lastUpdated)),1),(0,i.Lk)("div",lt,(0,n.v_)(l.getTimeAgo(o.indexInfo.lastUpdated)),1)])]),(0,i.Lk)("div",{class:"overview-card system-version",onClick:e[1]||(e[1]=(...t)=>l.openReleases&&l.openReleases(...t))},[(0,i.Lk)("div",rt,[(0,i.bF)(r,{icon:"code-branch"})]),(0,i.Lk)("div",dt,[(0,i.Lk)("div",ct,(0,n.v_)(t.$t("sysStatus.systemVersion")),1),(0,i.Lk)("div",ht,"v"+(0,n.v_)(o.version),1),(0,i.Lk)("div",ut,(0,n.v_)(t.$t("sysStatus.clickToViewChangelog")),1)])])]),(0,i.Lk)("div",pt,[(0,i.Lk)("div",gt,[(0,i.Lk)("div",ft,[(0,i.Lk)("div",mt,[(0,i.bF)(r,{icon:"chart-line"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.uploadTrend")),1),(0,i.bF)(d,{class:"trend-calendar-btn",circle:"","aria-label":t.$t("sysStatus.selectDateRange"),onClick:l.openTrendDateDialog},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"calendar"})]),_:1},8,["aria-label","onClick"])]),(0,i.Lk)("div",bt,[(0,i.bF)(h,{modelValue:o.trendGroupBy,"onUpdate:modelValue":e[2]||(e[2]=t=>o.trendGroupBy=t),size:"small",class:"trend-group-switch","aria-label":t.$t("sysStatus.uploadTrendGroupBy")},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"channel"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysStatus.byChannelType")),1)]),_:1}),(0,i.bF)(c,{label:"channelName"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysStatus.byChannelName")),1)]),_:1})]),_:1},8,["modelValue","aria-label"])])]),(0,i.bF)(p,{modelValue:o.trendDatePickerVisible,"onUpdate:modelValue":e[4]||(e[4]=t=>o.trendDatePickerVisible=t),title:t.$t("sysStatus.selectDateRange"),width:l.trendDateDialogWidth,class:"trend-date-dialog","align-center":"","append-to-body":""},{default:(0,i.k6)(()=>[(0,i.Lk)("div",yt,[(0,i.bF)(u,{modelValue:o.trendDateRange,"onUpdate:modelValue":e[3]||(e[3]=t=>o.trendDateRange=t),onChange:l.handleTrendDateRangeChange},null,8,["modelValue","onChange"])])]),_:1},8,["modelValue","title","width"]),(0,i.Lk)("div",xt,[l.hasTrendData?((0,i.uX)(),(0,i.CE)("div",_t,[(0,i.bF)(f,{data:l.uploadTrendChartData,options:l.lineChartOptions},null,8,["data","options"])])):((0,i.uX)(),(0,i.CE)("div",vt,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.noData")),1)]))])]),(0,i.Lk)("div",kt,[(0,i.Lk)("div",wt,[(0,i.bF)(r,{icon:"share-alt"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.channelDistribution")),1)]),(0,i.Lk)("div",Ct,[0===Object.keys(o.indexInfo.channelStats||{}).length?((0,i.uX)(),(0,i.CE)("div",St,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Ft,[(0,i.Lk)("div",Tt,[(0,i.bF)(m,{data:l.channelChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Pt,[(0,i.Lk)("div",Mt,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",Dt,(0,n.v_)(t.$t("sysStatus.totalFilesLabel")),1)])]),(0,i.Lk)("div",At,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.indexInfo.channelStats,(t,e,s)=>((0,i.uX)(),(0,i.CE)("div",{key:e,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getChartColor(s)})},null,4),(0,i.Lk)("span",$t,(0,n.v_)(e),1),(0,i.Lk)("span",Vt,(0,n.v_)(t.toLocaleString()),1),(0,i.Lk)("span",Lt,(0,n.v_)(l.getPercentage(t,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])]),(0,i.Lk)("div",Et,[(0,i.Lk)("div",It,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.fileStatusDistribution")),1)]),(0,i.Lk)("div",Ut,[0===Object.keys(o.indexInfo.typeStats||{}).length?((0,i.uX)(),(0,i.CE)("div",Ot,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Rt,[(0,i.Lk)("div",Wt,[(0,i.bF)(m,{data:l.typeChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Bt,[(0,i.Lk)("div",Nt,(0,n.v_)(Object.keys(o.indexInfo.typeStats).length),1),(0,i.Lk)("div",zt,(0,n.v_)(t.$t("sysStatus.statusTypes")),1)])]),(0,i.Lk)("div",jt,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.aggregatedTypeStats,(t,e,s)=>((0,i.uX)(),(0,i.CE)("div",{key:e,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getTypeChartColor(s)})},null,4),(0,i.Lk)("span",qt,(0,n.v_)(e),1),(0,i.Lk)("span",Ht,(0,n.v_)(t.toLocaleString()),1),(0,i.Lk)("span",Xt,(0,n.v_)(l.getPercentage(t,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])])]),(0,i.Lk)("div",Kt,[(0,i.Lk)("div",Qt,[(0,i.Lk)("div",Yt,[(0,i.bF)(r,{icon:"tools"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.systemMaintenance")),1)]),(0,i.Lk)("div",Gt,[o.isProcessing?((0,i.uX)(),(0,i.CE)("div",Jt,[(0,i.Lk)("div",Zt,[(0,i.Lk)("span",te,(0,n.v_)(l.phaseDescription),1),(0,i.Lk)("span",ee,(0,n.v_)(Math.round(o.processingProgress.percentage))+"%",1)]),(0,i.bF)(b,{percentage:o.processingProgress.percentage,"stroke-width":12,"show-text":!1,class:"progress-bar"},null,8,["percentage"]),(0,i.Lk)("div",se,[o.processingProgress.current>0?((0,i.uX)(),(0,i.CE)("span",ie,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.eW)(" "+(0,n.v_)(o.processingProgress.current.toLocaleString())+" ",1),o.processingProgress.total>0?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.eW)(" / "+(0,n.v_)(o.processingProgress.total.toLocaleString()),1)],64)):(0,i.Q3)("",!0),(0,i.eW)(" "+(0,n.v_)(t.$t("sysStatus.records")),1)])):(0,i.Q3)("",!0),l.estimatedTimeRemaining?((0,i.uX)(),(0,i.CE)("span",ne,[(0,i.bF)(r,{icon:"clock"}),(0,i.eW)(" "+(0,n.v_)(l.estimatedTimeRemaining),1)])):(0,i.Q3)("",!0)]),o.processingProgress.message?((0,i.uX)(),(0,i.CE)("div",ae,(0,n.v_)(o.processingProgress.message),1)):(0,i.Q3)("",!0),(0,i.bF)(d,{type:"danger",plain:"",size:"small",onClick:l.cancelOperation,class:"cancel-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"times"}),(0,i.eW)(" "+(0,n.v_)(t.$t("sysStatus.cancelOperation")),1)]),_:1},8,["onClick"])])):o.processingError?((0,i.uX)(),(0,i.CE)("div",oe,[(0,i.Lk)("div",le,[(0,i.bF)(r,{icon:"exclamation-triangle"})]),(0,i.Lk)("div",re,[(0,i.Lk)("div",de,(0,n.v_)(o.processingError.message),1),o.processingError.suggestion?((0,i.uX)(),(0,i.CE)("div",ce,(0,n.v_)(o.processingError.suggestion),1)):(0,i.Q3)("",!0)]),(0,i.Lk)("div",he,[o.processingError.recoverable?((0,i.uX)(),(0,i.Wv)(d,{key:0,type:"primary",size:"small",onClick:l.retryOperation},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"redo"}),(0,i.eW)(" "+(0,n.v_)(t.$t("sysStatus.retry")),1)]),_:1},8,["onClick"])):(0,i.Q3)("",!0),(0,i.bF)(d,{type:"default",size:"small",onClick:l.dismissError},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysStatus.close")),1)]),_:1},8,["onClick"])])])):((0,i.uX)(),(0,i.CE)("div",ue,[(0,i.bF)(y,{content:t.$t("sysStatus.rebuildTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{type:"primary",loading:o.rebuilding,disabled:o.isProcessing,onClick:l.rebuildIndex,class:"action-btn rebuild-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"sync-alt"}),(0,i.eW)(" "+(0,n.v_)(o.rebuilding?t.$t("sysStatus.rebuilding"):t.$t("sysStatus.rebuildIndex")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:t.$t("sysStatus.backupTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{type:"success",loading:o.backing,disabled:o.isProcessing,onClick:l.backupData,class:"action-btn backup-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"download"}),(0,i.eW)(" "+(0,n.v_)(o.backing?t.$t("sysStatus.backingUp"):t.$t("sysStatus.backupData")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:t.$t("sysStatus.restoreTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",pe,[(0,i.Lk)("input",{type:"file",ref:"fileInput",accept:".json",onChange:e[5]||(e[5]=(...t)=>l.handleFileSelect&&l.handleFileSelect(...t)),style:{display:"none"}},null,544),(0,i.bF)(d,{type:"warning",loading:o.restoring,disabled:o.isProcessing,onClick:l.selectRestoreFile,class:"action-btn restore-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"upload"}),(0,i.eW)(" "+(0,n.v_)(o.restoring?t.$t("sysStatus.restoring"):t.$t("sysStatus.restoreData")),1)]),_:1},8,["loading","disabled","onClick"])])]),_:1},8,["content"])]))])])]),o.indexInfo.newestFile||o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",ge,[o.indexInfo.newestFile?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"file-info-card info-card-newest",onClick:e[8]||(e[8]=t=>l.openFileInNewTab(o.indexInfo.newestFile))},[l.isImageFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:e[6]||(e[6]=t=>l.handleImageError("newest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:e[7]||(e[7]=t=>l.handleImageError("newest"))},null,40,fe)):((0,i.uX)(),(0,i.CE)("div",me,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",be,[(0,i.bF)(r,{icon:"arrow-up"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.latestUpload")),1)]),(0,i.Lk)("div",ye,[(0,i.Lk)("div",xe,(0,n.v_)(o.indexInfo.newestFile.metadata?.FileName||o.indexInfo.newestFile.id),1),(0,i.Lk)("div",ve,(0,n.v_)(l.formatTime(o.indexInfo.newestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0),o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",{key:1,class:"file-info-card info-card-oldest",onClick:e[11]||(e[11]=t=>l.openFileInNewTab(o.indexInfo.oldestFile))},[l.isImageFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:e[9]||(e[9]=t=>l.handleImageError("oldest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:e[10]||(e[10]=t=>l.handleImageError("oldest"))},null,40,_e)):((0,i.uX)(),(0,i.CE)("div",ke,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",we,[(0,i.bF)(r,{icon:"arrow-down"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.earliestUpload")),1)]),(0,i.Lk)("div",Ce,[(0,i.Lk)("div",Se,(0,n.v_)(o.indexInfo.oldestFile.metadata?.FileName||o.indexInfo.oldestFile.id),1),(0,i.Lk)("div",Fe,(0,n.v_)(l.formatTime(o.indexInfo.oldestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0)])):(0,i.Q3)("",!0)])),[[C,o.loading]])}s(18111),s(7588),s(61701),s(18237),s(17642),s(58004),s(33853),s(45876),s(32475),s(15024),s(31698),s(58335),s(14603),s(47566),s(98721);var Pe=s(70797),Me={rE:"2.7.4"},De=(s(20116),s(91114));s(22489),s(13579); +"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[529],{2893:function(t,e,s){s(85331)},3261:function(t,e,s){s(85331)},4885:function(t,e,s){s(85331)},5802:function(t,e,s){s(85331),s(38736),s(213),s(85970)},15616:function(t,e,s){s(85331),s(97197)},31529:function(t,e,s){s.r(e),s.d(e,{default:function(){return Qg}});var i=s(56768),n=s(24232);const a={class:"menu-list"},o=["onClick"],l={class:"menu-text"};function r(t,e,s,r,d,c){const h=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",{class:(0,n.C4)(["sidebar-container",{"is-collapsed":s.isCollapse}]),ref:"sidebar",style:(0,n.Tr)(c.sidebarStyle)},[(0,i.Lk)("div",a,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.menuItems,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.index,class:(0,n.C4)(["menu-item",{"is-active":s.activeIndex===e.index}]),onClick:t=>c.handleSelect(e.index)},[(0,i.bF)(h,{icon:e.icon,class:"menu-icon"},null,8,["icon"]),(0,i.Lk)("span",l,(0,n.v_)(t.$t(e.titleKey)),1)],10,o))),128))]),(0,i.Lk)("div",{class:"toggle-button",onClick:e[0]||(e[0]=(...t)=>c.toggleCollapse&&c.toggleCollapse(...t))},[(0,i.bF)(h,{icon:s.isCollapse?"angle-double-right":"angle-double-left"},null,8,["icon"])])],6)}var d={name:"SysConfigTabs",props:{activeIndex:{type:String,default:"status"},isCollapse:{type:Boolean,default:!1}},data(){return{expandedWidth:null,menuItems:[{index:"status",icon:"chart-bar",titleKey:"sysConfigTabs.systemStatus"},{index:"upload",icon:"cloud-upload",titleKey:"sysConfigTabs.uploadSettings"},{index:"security",icon:"shield",titleKey:"sysConfigTabs.securitySettings"},{index:"page",icon:"pager",titleKey:"sysConfigTabs.pageSettings"},{index:"others",icon:"cog",titleKey:"sysConfigTabs.otherSettings"}]}},computed:{collapsedWidth(){return window.innerWidth<=768?50:56},sidebarStyle(){return this.isCollapse?{width:this.collapsedWidth+"px"}:this.expandedWidth?{width:this.expandedWidth+"px"}:{}}},watch:{"$i18n.locale"(){this.$nextTick(()=>this.measureWidth())}},methods:{toggleCollapse(){this.$emit("update:isCollapse",!this.isCollapse)},checkMobile(){const t=window.innerWidth<=768;this.$emit("update:isCollapse",t)},handleSelect(t){this.$emit("update:activeIndex",t)},measureWidth(){const t=this.$refs.sidebar;if(!t)return;const e=t.style.width,s=t.style.transition,i=t.classList.contains("is-collapsed");t.style.transition="none",i&&t.classList.remove("is-collapsed"),t.style.width="auto",t.offsetWidth;const n=t.scrollWidth;t.style.width=e,i&&t.classList.add("is-collapsed"),t.offsetWidth,t.style.transition=s,this.expandedWidth=n}},mounted(){this.checkMobile(),this.$nextTick(()=>this.measureWidth()),window.addEventListener("resize",this.checkMobile)},beforeDestroy(){window.removeEventListener("resize",this.checkMobile)}},c=s(71241);const h=(0,c.A)(d,[["render",r],["__scopeId","data-v-2718059d"]]);var u=h,p=s(54880),g=(s(85331),s(77128),s(78507)),f=(s(213),s(36600));const m={class:"container"},b={class:"header-content"},y={class:"header-action"};function x(t,e,s,a,o,l){const r=f.A,d=(0,i.g2)("font-awesome-icon"),c=g.R7,h=p.bZ,x=u;return(0,i.uX)(),(0,i.CE)("div",m,[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",b,[(0,i.bF)(r,{activeTab:"systemConfig"}),(0,i.Lk)("div",y,[(0,i.bF)(c,{disabled:l.disableTooltip,content:t.$t("sysConfig.logout"),placement:"bottom"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{icon:"sign-out-alt",class:"header-icon",onClick:l.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,i.bF)(x,{activeIndex:o.activeIndex,"onUpdate:activeIndex":e[0]||(e[0]=t=>o.activeIndex=t),isCollapse:o.isSidebarCollapse,"onUpdate:isCollapse":e[1]||(e[1]=t=>o.isSidebarCollapse=t)},null,8,["activeIndex","isCollapse"]),((0,i.uX)(),(0,i.Wv)((0,i.$y)(l.currentComponent),{class:(0,n.C4)(["main-container",{collapsed:o.isSidebarCollapse}])},null,8,["class"]))])}s(44114),s(33110);var v=s(99114),_=(s(30694),s(57009)),k=(s(78450),s(69655)),w=(s(2893),s(9267)),C=(s(15616),s(45130));const S={class:"date-range-calendar"},F={class:"selected-range"},T={class:"selected-range-inputs"},P=["aria-label"],M={class:"date-range-separator"},D=["aria-label"],A={class:"calendar-header"},$=["aria-label"],V={class:"calendar-title"},L=["aria-label"],E={class:"calendar-weekdays"},I={class:"calendar-grid"},U=["onClick"];function O(t,e,s,a,o,l){const r=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("div",S,[(0,i.Lk)("div",F,[(0,i.Lk)("div",T,[(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":e[0]||(e[0]=t=>o.inputStart=t),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.startDateLabel,onChange:e[1]||(e[1]=(...t)=>l.handleManualInput&&l.handleManualInput(...t))},null,40,P),[[C.Jo,o.inputStart,void 0,{trim:!0}]]),(0,i.Lk)("span",M,(0,n.v_)(l.rangeSeparator),1),(0,i.bo)((0,i.Lk)("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>o.inputEnd=t),class:"date-input",type:"text",inputmode:"numeric","aria-label":l.endDateLabel,onChange:e[3]||(e[3]=(...t)=>l.handleManualInput&&l.handleManualInput(...t))},null,40,D),[[C.Jo,o.inputEnd,void 0,{trim:!0}]])])]),(0,i.Lk)("div",A,[(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.previousMonthLabel,onClick:e[4]||(e[4]=(...t)=>l.goToPreviousMonth&&l.goToPreviousMonth(...t))},[(0,i.bF)(r,{icon:"chevron-left"})],8,$),(0,i.Lk)("div",V,(0,n.v_)(l.monthTitle),1),(0,i.Lk)("button",{type:"button",class:"calendar-nav","aria-label":l.nextMonthLabel,onClick:e[5]||(e[5]=(...t)=>l.goToNextMonth&&l.goToNextMonth(...t))},[(0,i.bF)(r,{icon:"chevron-right"})],8,L)]),(0,i.Lk)("div",E,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.weekdayLabels,t=>((0,i.uX)(),(0,i.CE)("span",{key:t},(0,n.v_)(t),1))),128))]),(0,i.Lk)("div",I,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.calendarDays,t=>((0,i.uX)(),(0,i.CE)("button",{key:t.key,type:"button",class:(0,n.C4)(["calendar-day",{"is-muted":!t.isCurrentMonth,"is-today":t.isToday,"is-range-start":t.key===o.draftStart,"is-range-end":t.key===o.draftEnd,"is-in-range":l.isInRange(t.key)}]),onClick:e=>l.selectDay(t.key)},(0,n.v_)(t.dayOfMonth),11,U))),128))])])}const R=864e5;function W(t){return String(t).padStart(2,"0")}function B(t){return`${t.getFullYear()}-${W(t.getMonth()+1)}-${W(t.getDate())}`}function N(t){if("string"!==typeof t)return null;const e=t.trim().match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);if(!e)return null;const s=Number(e[1]),i=Number(e[2])-1,n=Number(e[3]),a=new Date(s,i,n);return a.getFullYear()!==s||a.getMonth()!==i||a.getDate()!==n?null:(a.setHours(0,0,0,0),a)}function z(t,e){return new Date(t.getFullYear(),t.getMonth()+e,1)}var j={name:"DateRangeCalendar",props:{modelValue:{type:Array,default:()=>[]}},emits:["update:modelValue","change"],data(){const t=new Date;return t.setHours(0,0,0,0),{displayYear:t.getFullYear(),displayMonth:t.getMonth(),draftStart:"",draftEnd:"",inputStart:"",inputEnd:"",awaitingEnd:!1}},computed:{previousMonthLabel(){return this.$t("dateRangeCalendar.previousMonth")},nextMonthLabel(){return this.$t("dateRangeCalendar.nextMonth")},startDateLabel(){return this.$t("dateRangeCalendar.startDate")},endDateLabel(){return this.$t("dateRangeCalendar.endDate")},rangeSeparator(){return this.$t("dateRangeCalendar.rangeSeparator")},monthTitle(){return this.$t("dateRangeCalendar.monthTitle",{year:this.displayYear,month:W(this.displayMonth+1)})},weekdayLabels(){return[this.$t("dateRangeCalendar.weekdaySun"),this.$t("dateRangeCalendar.weekdayMon"),this.$t("dateRangeCalendar.weekdayTue"),this.$t("dateRangeCalendar.weekdayWed"),this.$t("dateRangeCalendar.weekdayThu"),this.$t("dateRangeCalendar.weekdayFri"),this.$t("dateRangeCalendar.weekdaySat")]},calendarDays(){const t=new Date(this.displayYear,this.displayMonth,1),e=new Date(this.displayYear,this.displayMonth,1-t.getDay()),s=B(new Date);return Array.from({length:42},(t,i)=>{const n=new Date(e.getTime()+i*R),a=B(n);return{key:a,dayOfMonth:n.getDate(),isCurrentMonth:n.getMonth()===this.displayMonth,isToday:a===s}})}},watch:{modelValue:{immediate:!0,handler(t){this.syncFromModel(t)}}},methods:{syncFromModel(t){const e=N(t?.[0]),s=N(t?.[1]);this.draftStart=e?B(e):"",this.draftEnd=s?B(s):"",this.inputStart=this.draftStart,this.inputEnd=this.draftEnd,this.awaitingEnd=!1;const i=e||s;i&&(this.displayYear=i.getFullYear(),this.displayMonth=i.getMonth())},goToPreviousMonth(){const t=z(new Date(this.displayYear,this.displayMonth,1),-1);this.displayYear=t.getFullYear(),this.displayMonth=t.getMonth()},goToNextMonth(){const t=z(new Date(this.displayYear,this.displayMonth,1),1);this.displayYear=t.getFullYear(),this.displayMonth=t.getMonth()},selectDay(t){if(!this.draftStart||this.draftEnd||!this.awaitingEnd)return this.draftStart=t,this.draftEnd="",this.inputStart=t,this.inputEnd="",void(this.awaitingEnd=!0);const e=tthis.draftStart&&tl.fetchIndexInfo&&l.fetchIndexInfo(...t))},[(0,i.Lk)("div",G,[(0,i.bF)(r,{icon:"database"})]),(0,i.Lk)("div",J,[(0,i.Lk)("div",Z,(0,n.v_)(t.$t("sysStatus.totalFiles")),1),(0,i.Lk)("div",tt,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",et,(0,n.v_)(t.$t("sysStatus.clickToRefresh")),1)])]),(0,i.Lk)("div",st,[(0,i.Lk)("div",it,[(0,i.bF)(r,{icon:"clock"})]),(0,i.Lk)("div",nt,[(0,i.Lk)("div",at,(0,n.v_)(t.$t("sysStatus.indexUpdateTime")),1),(0,i.Lk)("div",ot,(0,n.v_)(l.formatTime(o.indexInfo.lastUpdated)),1),(0,i.Lk)("div",lt,(0,n.v_)(l.getTimeAgo(o.indexInfo.lastUpdated)),1)])]),(0,i.Lk)("div",{class:"overview-card system-version",onClick:e[1]||(e[1]=(...t)=>l.openReleases&&l.openReleases(...t))},[(0,i.Lk)("div",rt,[(0,i.bF)(r,{icon:"code-branch"})]),(0,i.Lk)("div",dt,[(0,i.Lk)("div",ct,(0,n.v_)(t.$t("sysStatus.systemVersion")),1),(0,i.Lk)("div",ht,"v"+(0,n.v_)(o.version),1),(0,i.Lk)("div",ut,(0,n.v_)(t.$t("sysStatus.clickToViewChangelog")),1)])])]),(0,i.Lk)("div",pt,[(0,i.Lk)("div",gt,[(0,i.Lk)("div",ft,[(0,i.Lk)("div",mt,[(0,i.bF)(r,{icon:"chart-line"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.uploadTrend")),1),(0,i.bF)(d,{class:"trend-calendar-btn",circle:"","aria-label":t.$t("sysStatus.selectDateRange"),onClick:l.openTrendDateDialog},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"calendar"})]),_:1},8,["aria-label","onClick"])]),(0,i.Lk)("div",bt,[(0,i.bF)(h,{modelValue:o.trendGroupBy,"onUpdate:modelValue":e[2]||(e[2]=t=>o.trendGroupBy=t),size:"small",class:"trend-group-switch","aria-label":t.$t("sysStatus.uploadTrendGroupBy")},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:"channel"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysStatus.byChannelType")),1)]),_:1}),(0,i.bF)(c,{label:"channelName"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysStatus.byChannelName")),1)]),_:1})]),_:1},8,["modelValue","aria-label"])])]),(0,i.bF)(p,{modelValue:o.trendDatePickerVisible,"onUpdate:modelValue":e[4]||(e[4]=t=>o.trendDatePickerVisible=t),title:t.$t("sysStatus.selectDateRange"),width:l.trendDateDialogWidth,class:"trend-date-dialog","align-center":"","append-to-body":""},{default:(0,i.k6)(()=>[(0,i.Lk)("div",yt,[(0,i.bF)(u,{modelValue:o.trendDateRange,"onUpdate:modelValue":e[3]||(e[3]=t=>o.trendDateRange=t),onChange:l.handleTrendDateRangeChange},null,8,["modelValue","onChange"])])]),_:1},8,["modelValue","title","width"]),(0,i.Lk)("div",xt,[l.hasTrendData?((0,i.uX)(),(0,i.CE)("div",_t,[(0,i.bF)(f,{data:l.uploadTrendChartData,options:l.lineChartOptions},null,8,["data","options"])])):((0,i.uX)(),(0,i.CE)("div",vt,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.noData")),1)]))])]),(0,i.Lk)("div",kt,[(0,i.Lk)("div",wt,[(0,i.bF)(r,{icon:"share-alt"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.channelDistribution")),1)]),(0,i.Lk)("div",Ct,[0===Object.keys(o.indexInfo.channelStats||{}).length?((0,i.uX)(),(0,i.CE)("div",St,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Ft,[(0,i.Lk)("div",Tt,[(0,i.bF)(m,{data:l.channelChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Pt,[(0,i.Lk)("div",Mt,(0,n.v_)(o.indexInfo.totalFiles?.toLocaleString()||"0"),1),(0,i.Lk)("div",Dt,(0,n.v_)(t.$t("sysStatus.totalFilesLabel")),1)])]),(0,i.Lk)("div",At,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.indexInfo.channelStats,(t,e,s)=>((0,i.uX)(),(0,i.CE)("div",{key:e,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getChartColor(s)})},null,4),(0,i.Lk)("span",$t,(0,n.v_)(e),1),(0,i.Lk)("span",Vt,(0,n.v_)(t.toLocaleString()),1),(0,i.Lk)("span",Lt,(0,n.v_)(l.getPercentage(t,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])]),(0,i.Lk)("div",Et,[(0,i.Lk)("div",It,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.fileStatusDistribution")),1)]),(0,i.Lk)("div",Ut,[0===Object.keys(o.indexInfo.typeStats||{}).length?((0,i.uX)(),(0,i.CE)("div",Ot,[(0,i.bF)(r,{icon:"inbox"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.noData")),1)])):((0,i.uX)(),(0,i.CE)("div",Rt,[(0,i.Lk)("div",Wt,[(0,i.bF)(m,{data:l.typeChartData,options:l.chartOptions},null,8,["data","options"]),(0,i.Lk)("div",Bt,[(0,i.Lk)("div",Nt,(0,n.v_)(Object.keys(o.indexInfo.typeStats).length),1),(0,i.Lk)("div",zt,(0,n.v_)(t.$t("sysStatus.statusTypes")),1)])]),(0,i.Lk)("div",jt,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.aggregatedTypeStats,(t,e,s)=>((0,i.uX)(),(0,i.CE)("div",{key:e,class:"legend-item"},[(0,i.Lk)("span",{class:"legend-color",style:(0,n.Tr)({background:l.getTypeChartColor(s)})},null,4),(0,i.Lk)("span",qt,(0,n.v_)(e),1),(0,i.Lk)("span",Ht,(0,n.v_)(t.toLocaleString()),1),(0,i.Lk)("span",Xt,(0,n.v_)(l.getPercentage(t,o.indexInfo.totalFiles))+"%",1)]))),128))])]))])])]),(0,i.Lk)("div",Kt,[(0,i.Lk)("div",Qt,[(0,i.Lk)("div",Yt,[(0,i.bF)(r,{icon:"tools"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.systemMaintenance")),1)]),(0,i.Lk)("div",Gt,[o.isProcessing?((0,i.uX)(),(0,i.CE)("div",Jt,[(0,i.Lk)("div",Zt,[(0,i.Lk)("span",te,(0,n.v_)(l.phaseDescription),1),(0,i.Lk)("span",ee,(0,n.v_)(Math.round(o.processingProgress.percentage))+"%",1)]),(0,i.bF)(b,{percentage:o.processingProgress.percentage,"stroke-width":12,"show-text":!1,class:"progress-bar"},null,8,["percentage"]),(0,i.Lk)("div",se,[o.processingProgress.current>0?((0,i.uX)(),(0,i.CE)("span",ie,[(0,i.bF)(r,{icon:"file-alt"}),(0,i.eW)(" "+(0,n.v_)(o.processingProgress.current.toLocaleString())+" ",1),o.processingProgress.total>0?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.eW)(" / "+(0,n.v_)(o.processingProgress.total.toLocaleString()),1)],64)):(0,i.Q3)("",!0),(0,i.eW)(" "+(0,n.v_)(t.$t("sysStatus.records")),1)])):(0,i.Q3)("",!0),l.estimatedTimeRemaining?((0,i.uX)(),(0,i.CE)("span",ne,[(0,i.bF)(r,{icon:"clock"}),(0,i.eW)(" "+(0,n.v_)(l.estimatedTimeRemaining),1)])):(0,i.Q3)("",!0)]),o.processingProgress.message?((0,i.uX)(),(0,i.CE)("div",ae,(0,n.v_)(o.processingProgress.message),1)):(0,i.Q3)("",!0),(0,i.bF)(d,{type:"danger",plain:"",size:"small",onClick:l.cancelOperation,class:"cancel-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"times"}),(0,i.eW)(" "+(0,n.v_)(t.$t("sysStatus.cancelOperation")),1)]),_:1},8,["onClick"])])):o.processingError?((0,i.uX)(),(0,i.CE)("div",oe,[(0,i.Lk)("div",le,[(0,i.bF)(r,{icon:"exclamation-triangle"})]),(0,i.Lk)("div",re,[(0,i.Lk)("div",de,(0,n.v_)(o.processingError.message),1),o.processingError.suggestion?((0,i.uX)(),(0,i.CE)("div",ce,(0,n.v_)(o.processingError.suggestion),1)):(0,i.Q3)("",!0)]),(0,i.Lk)("div",he,[o.processingError.recoverable?((0,i.uX)(),(0,i.Wv)(d,{key:0,type:"primary",size:"small",onClick:l.retryOperation},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"redo"}),(0,i.eW)(" "+(0,n.v_)(t.$t("sysStatus.retry")),1)]),_:1},8,["onClick"])):(0,i.Q3)("",!0),(0,i.bF)(d,{type:"default",size:"small",onClick:l.dismissError},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysStatus.close")),1)]),_:1},8,["onClick"])])])):((0,i.uX)(),(0,i.CE)("div",ue,[(0,i.bF)(y,{content:t.$t("sysStatus.rebuildTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{type:"primary",loading:o.rebuilding,disabled:o.isProcessing,onClick:l.rebuildIndex,class:"action-btn rebuild-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"sync-alt"}),(0,i.eW)(" "+(0,n.v_)(o.rebuilding?t.$t("sysStatus.rebuilding"):t.$t("sysStatus.rebuildIndex")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:t.$t("sysStatus.backupTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(d,{type:"success",loading:o.backing,disabled:o.isProcessing,onClick:l.backupData,class:"action-btn backup-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"download"}),(0,i.eW)(" "+(0,n.v_)(o.backing?t.$t("sysStatus.backingUp"):t.$t("sysStatus.backupData")),1)]),_:1},8,["loading","disabled","onClick"])]),_:1},8,["content"]),(0,i.bF)(y,{content:t.$t("sysStatus.restoreTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",pe,[(0,i.Lk)("input",{type:"file",ref:"fileInput",accept:".json",onChange:e[5]||(e[5]=(...t)=>l.handleFileSelect&&l.handleFileSelect(...t)),style:{display:"none"}},null,544),(0,i.bF)(d,{type:"warning",loading:o.restoring,disabled:o.isProcessing,onClick:l.selectRestoreFile,class:"action-btn restore-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"upload"}),(0,i.eW)(" "+(0,n.v_)(o.restoring?t.$t("sysStatus.restoring"):t.$t("sysStatus.restoreData")),1)]),_:1},8,["loading","disabled","onClick"])])]),_:1},8,["content"])]))])])]),o.indexInfo.newestFile||o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",ge,[o.indexInfo.newestFile?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"file-info-card info-card-newest",onClick:e[8]||(e[8]=t=>l.openFileInNewTab(o.indexInfo.newestFile))},[l.isImageFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:e[6]||(e[6]=t=>l.handleImageError("newest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.newestFile)&&!o.loadErrors["newest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.newestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:e[7]||(e[7]=t=>l.handleImageError("newest"))},null,40,fe)):((0,i.uX)(),(0,i.CE)("div",me,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",be,[(0,i.bF)(r,{icon:"arrow-up"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.latestUpload")),1)]),(0,i.Lk)("div",ye,[(0,i.Lk)("div",xe,(0,n.v_)(o.indexInfo.newestFile.metadata?.FileName||o.indexInfo.newestFile.id),1),(0,i.Lk)("div",ve,(0,n.v_)(l.formatTime(o.indexInfo.newestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0),o.indexInfo.oldestFile?((0,i.uX)(),(0,i.CE)("div",{key:1,class:"file-info-card info-card-oldest",onClick:e[11]||(e[11]=t=>l.openFileInNewTab(o.indexInfo.oldestFile))},[l.isImageFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.Wv)(x,{key:0,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",fit:"cover",class:"card-bg-media",onError:e[9]||(e[9]=t=>l.handleImageError("oldest"))},null,8,["src"])):l.isVideoFile(o.indexInfo.oldestFile)&&!o.loadErrors["oldest"]?((0,i.uX)(),(0,i.CE)("video",{key:1,src:"/file/"+o.indexInfo.oldestFile.id+"?from=admin",class:"card-bg-media",muted:"",loop:"",autoplay:"",onError:e[10]||(e[10]=t=>l.handleImageError("oldest"))},null,40,_e)):((0,i.uX)(),(0,i.CE)("div",ke,[(0,i.bF)(r,{icon:"file-alt",class:"fallback-icon"})])),(0,i.Lk)("div",we,[(0,i.bF)(r,{icon:"arrow-down"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysStatus.earliestUpload")),1)]),(0,i.Lk)("div",Ce,[(0,i.Lk)("div",Se,(0,n.v_)(o.indexInfo.oldestFile.metadata?.FileName||o.indexInfo.oldestFile.id),1),(0,i.Lk)("div",Fe,(0,n.v_)(l.formatTime(o.indexInfo.oldestFile.metadata?.TimeStamp)),1)])])):(0,i.Q3)("",!0)])):(0,i.Q3)("",!0)])),[[C,o.loading]])}s(18111),s(7588),s(61701),s(18237),s(17642),s(58004),s(33853),s(45876),s(32475),s(15024),s(31698),s(58335),s(14603),s(47566),s(98721);var Pe=s(70797),Me={rE:"2.7.4"},De=(s(20116),s(91114));s(22489),s(13579); /*! * @kurkle/color v0.3.4 * https://github.com/kurkle/color#readme @@ -20,4 +20,4 @@ function ks(){}const ws=(()=>{let t=0;return()=>t++})();function Cs(t){return nu * Released under the MIT License */ class eo{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,s,i){const n=e.listeners[i],a=e.duration;n.forEach(i=>i({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=$i.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,i)=>{if(!s.running||!s.items.length)return;const n=s.items;let a,o=n.length-1,l=!1;for(;o>=0;--o)a=n[o],a._active?(a._total>s.duration&&(s.duration=a._total),a.tick(t),l=!0):(n[o]=n[n.length-1],n.pop());l&&(i.draw(),this._notify(i,s,t,"progress")),n.length||(s.running=!1,this._notify(i,s,t,"complete"),s.initial=!1),e+=n.length}),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((t,e)=>Math.max(t,e._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const s=e.items;let i=s.length-1;for(;i>=0;--i)s[i].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var so=new eo;const io="transparent",no={boolean(t,e,s){return s>.5?e:t},color(t,e,s){const i=qi(t||io),n=i.valid&&qi(e||io);return n&&n.valid?n.mix(i,s).hexString():e},number(t,e,s){return t+(e-t)*s}};class ao{constructor(t,e,s,i){const n=e[s];i=Un([t.to,i,n,t.from]);const a=Un([t.from,n,i]);this._active=!0,this._fn=t.fn||no[t.type||typeof a],this._easing=zi[t.easing]||zi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=i,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);const i=this._target[this._prop],n=s-this._start,a=this._duration-n;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Un([t.to,e,i,t.from]),this._from=Un([t.from,i,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,s=this._duration,i=this._prop,n=this._from,a=this._loop,o=this._to;let l;if(this._active=n!==o&&(a||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[i]=this._fn(n,o,l))}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){const e=t?"res":"rej",s=this._promises||[];for(let i=0;i{const n=t[i];if(!Fs(n))return;const a={};for(const t of e)a[t]=n[t];(Ss(n.properties)&&n.properties||[i]).forEach(t=>{t!==i&&s.has(t)||s.set(t,a)})})}_animateOptions(t,e){const s=e.options,i=ro(t,s);if(!i)return[];const n=this._createAnimations(i,s);return s.$shared&&lo(t.options.$animations,s).then(()=>{t.options=s},()=>{}),n}_createAnimations(t,e){const s=this._properties,i=[],n=t.$animations||(t.$animations={}),a=Object.keys(e),o=Date.now();let l;for(l=a.length-1;l>=0;--l){const r=a[l];if("$"===r.charAt(0))continue;if("options"===r){i.push(...this._animateOptions(t,e));continue}const d=e[r];let c=n[r];const h=s.get(r);if(c){if(h&&c.active()){c.update(h,d,o);continue}c.cancel()}h&&h.duration?(n[r]=c=new ao(h,t,r,d),i.push(c)):t[r]=d}return i}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const s=this._createAnimations(t,e);return s.length?(so.add(this._chart,s),!0):void 0}}function lo(t,e){const s=[],i=Object.keys(e);for(let n=0;n0||!s&&e<0)return n.index}return null}function _o(t,e){const{chart:s,_cachedMeta:i}=t,n=s._stacks||(s._stacks={}),{iScale:a,vScale:o,index:l}=i,r=a.axis,d=o.axis,c=bo(a,o,i),h=e.length;let u;for(let p=0;ps[t].axis===e).shift()}function wo(t,e){return Rn(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:"default",type:"dataset"})}function Co(t,e,s){return Rn(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:s,index:e,mode:"default",type:"data"})}function So(t,e){const s=t.controller.index,i=t.vScale&&t.vScale.axis;if(i){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[i]||void 0===e[i][s])return;delete e[i][s],void 0!==e[i]._visualValues&&void 0!==e[i]._visualValues[s]&&delete e[i]._visualValues[s]}}}const Fo=t=>"reset"===t||"none"===t,To=(t,e)=>e?t:Object.assign({},t),Po=(t,e,s)=>t&&!e.hidden&&e._stacked&&{keys:po(s,!0),values:null};class Mo{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=mo(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&So(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,s=this.getDataset(),i=(t,e,s,i)=>"x"===t?e:"r"===t?i:s,n=e.xAxisID=Ms(s.xAxisID,ko(t,"x")),a=e.yAxisID=Ms(s.yAxisID,ko(t,"y")),o=e.rAxisID=Ms(s.rAxisID,ko(t,"r")),l=e.indexAxis,r=e.iAxisID=i(l,n,a,o),d=e.vAxisID=i(l,a,n,o);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(o),e.iScale=this.getScaleForId(r),e.vScale=this.getScaleForId(d)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Di(this._data,this),t._stacked&&So(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(Fs(e)){const t=this._cachedMeta;this._data=fo(e,t)}else if(s!==e){if(s){Di(s,this);const t=this._cachedMeta;So(t),t._parsed=[]}e&&Object.isExtensible(e)&&Mi(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,s=this.getDataset();let i=!1;this._dataCheck();const n=e._stacked;e._stacked=mo(e.vScale,e),e.stack!==s.stack&&(i=!0,So(e),e.stack=s.stack),this._resyncElements(t),(i||n!==e._stacked)&&(_o(this,e._parsed),e._stacked=mo(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:s,_data:i}=this,{iScale:n,_stacked:a}=s,o=n.axis;let l,r,d,c=0===t&&e===i.length||s._sorted,h=t>0&&s._parsed[t-1];if(!1===this._parsing)s._parsed=i,s._sorted=!0,d=i;else{d=Ss(i[t])?this.parseArrayData(s,i,t,e):Fs(i[t])?this.parseObjectData(s,i,t,e):this.parsePrimitiveData(s,i,t,e);const n=()=>null===r[o]||h&&r[o]e||c=0;--h)if(!p()){this.updateRangeFromParsed(r,t,u,l);break}return r}getAllParsedValues(t){const e=this._cachedMeta._parsed,s=[];let i,n,a;for(i=0,n=e.length;i=0&&tthis.getContext(s,i,e),g=r.resolveNamedOptions(h,u,p,c);return g.$shared&&(g.$shared=l,n[a]=Object.freeze(To(g,l))),g}_resolveAnimations(t,e,s){const i=this.chart,n=this._cachedDataOpts,a=`animation-${e}`,o=n[a];if(o)return o;let l;if(!1!==i.options.animation){const i=this.chart.config,n=i.datasetAnimationScopeKeys(this._type,e),a=i.getOptionScopes(this.getDataset(),n);l=i.createResolver(a,this.getContext(t,s,e))}const r=new oo(i,l&&l.animations);return l&&l._cacheable&&(n[a]=Object.freeze(r)),r}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Fo(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const s=this.resolveDataElementOptions(t,e),i=this._sharedOptions,n=this.getSharedOptions(s),a=this.includeOptions(e,n)||n!==i;return this.updateSharedOptions(n,e,s),{sharedOptions:n,includeOptions:a}}updateElement(t,e,s,i){Fo(i)?Object.assign(t,s):this._resolveAnimations(e,i).update(t,s)}updateSharedOptions(t,e,s){t&&!Fo(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,i){t.active=i;const n=this.getStyle(e,i);this._resolveAnimations(e,s,i).update(t,{options:!i&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,s=this._cachedMeta.data;for(const[o,l,r]of this._syncList)this[o](l,r);this._syncList=[];const i=s.length,n=e.length,a=Math.min(n,i);a&&this.parse(0,a),n>i?this._insertElements(i,n-i,t):n{for(t.length+=e,o=t.length-1;o>=a;o--)t[o]=t[o-e]};for(l(n),o=t;ot-e))}return t._cache.$bar}function Ao(t){const e=t.iScale,s=Do(e,t.type);let i,n,a,o,l=e._length;const r=()=>{32767!==a&&-32768!==a&&(Hs(o)&&(l=Math.min(l,Math.abs(a-o)||l)),o=a)};for(i=0,n=s.length;i0?n[t-1]:null,l=tMath.abs(l)&&(r=l,d=o),e[s.axis]=d,e._custom={barStart:r,barEnd:d,start:n,end:a,min:o,max:l}}function Eo(t,e,s,i){return Ss(t)?Lo(t,e,s,i):e[s.axis]=s.parse(t,i),e}function Io(t,e,s,i){const n=t.iScale,a=t.vScale,o=n.getLabels(),l=n===a,r=[];let d,c,h,u;for(d=s,c=s+i;d=s?1:-1)}function Ro(t){let e,s,i,n,a;return t.horizontal?(e=t.base>t.x,s="left",i="right"):(e=t.baset.controller.options.grouped),n=s.options.stacked,a=[],o=this._cachedMeta.controller.getParsed(e),l=o&&o[s.axis],r=t=>{const e=t._parsed.find(t=>t[s.axis]===l),i=e&&e[t.vScale.axis];if(Cs(i)||isNaN(i))return!0};for(const d of i)if((void 0===e||!r(d))&&((!1===n||-1===a.indexOf(d.stack)||void 0===n&&void 0===d.stack)&&a.push(d.stack),d.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter(s=>t[s].axis===e).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const s of this.chart.data.datasets)t[Ms("x"===this.chart.options.indexAxis?s.xAxisID:s.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,s){const i=this._getStacks(t,s),n=void 0!==e?i.indexOf(e):-1;return-1===n?i.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,s=e.iScale,i=[];let n,a;for(n=0,a=e.data.length;n=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:i,yScale:n}=e,a=this.getParsed(t),o=i.getLabelForValue(a.x),l=n.getLabelForValue(a.y),r=a._custom;return{label:s[t]||"",value:"("+o+", "+l+(r?", "+r:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,i){const n="reset"===i,{iScale:a,vScale:o}=this._cachedMeta,{sharedOptions:l,includeOptions:r}=this._getSharedOptions(e,i),d=a.axis,c=o.axis;for(let h=e;hvi(t,l,r,!0)?1:Math.max(e,e*s,i,i*s),g=(t,e,i)=>vi(t,l,r,!0)?-1:Math.min(e,e*s,i,i*s),f=p(0,d,h),m=p(ei,c,u),b=g(Ys,d,h),y=g(Ys+ei,c,u);i=(f-b)/2,n=(m-y)/2,a=-(f+b)/2,o=-(m+y)/2}return{ratioX:i,ratioY:n,offsetX:a,offsetY:o}}(0,De.A)(Ho,"id","bubble"),(0,De.A)(Ho,"defaults",{datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}}),(0,De.A)(Ho,"overrides",{scales:{x:{type:"linear"},y:{type:"linear"}}});class Ko extends Mo{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const s=this.getDataset().data,i=this._cachedMeta;if(!1===this._parsing)i._parsed=s;else{let n,a,o=t=>+s[t];if(Fs(s[t])){const{key:t="value"}=this._parsing;o=e=>+js(s[e],t)}for(n=t,a=t+e;n0&&!isNaN(t)?Gs*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,i=s.data.labels||[],n=Zi(e._parsed[t],s.options.locale);return{label:i[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const s=this.chart;let i,n,a,o,l;if(!t)for(i=0,n=s.data.datasets.length;i"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")}),(0,De.A)(Ko,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data,{labels:{pointStyle:s,textAlign:i,color:n,useBorderRadius:a,borderRadius:o}}=t.legend.options;return e.labels.length&&e.datasets.length?e.labels.map((e,l)=>{const r=t.getDatasetMeta(0),d=r.controller.getStyle(l);return{text:e,fillStyle:d.backgroundColor,fontColor:n,hidden:!t.getDataVisibility(l),lineDash:d.borderDash,lineDashOffset:d.borderDashOffset,lineJoin:d.borderJoinStyle,lineWidth:d.borderWidth,strokeStyle:d.borderColor,textAlign:i,pointStyle:s,borderRadius:a&&(o||d.borderRadius),index:l}}):[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}}});class Qo extends Mo{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:s,data:i=[],_dataset:n}=e,a=this.chart._animationsDisabled;let{start:o,count:l}=Oi(e,i,a);this._drawStart=o,this._drawCount=l,Ri(e)&&(o=0,l=i.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!n._decimated,s.points=i;const r=this.resolveDatasetElementOptions(t);this.options.showLine||(r.borderWidth=0),r.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:r},t),this.updateElements(i,o,l,t)}updateElements(t,e,s,i){const n="reset"===i,{iScale:a,vScale:o,_stacked:l,_dataset:r}=this._cachedMeta,{sharedOptions:d,includeOptions:c}=this._getSharedOptions(e,i),h=a.axis,u=o.axis,{spanGaps:p,segment:g}=this.options,f=ci(p)?p:Number.POSITIVE_INFINITY,m=this.chart._animationsDisabled||n||"none"===i,b=e+s,y=t.length;let x=e>0&&this.getParsed(e-1);for(let v=0;v=b){p.skip=!0;continue}const y=this.getParsed(v),_=Cs(y[u]),k=p[h]=a.getPixelForValue(y[h],v),w=p[u]=n||_?o.getBasePixel():o.getPixelForValue(l?this.applyStack(o,y,l):y[u],v);p.skip=isNaN(k)||isNaN(w)||_,p.stop=v>0&&Math.abs(y[h]-x[h])>f,g&&(p.parsed=y,p.raw=r.data[v]),c&&(p.options=d||this.resolveDataElementOptions(v,s.active?"active":i)),m||this.updateElement(s,v,p,i),x=y}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,i=t.data||[];if(!i.length)return s;const n=i[0].size(this.resolveDataElementOptions(0)),a=i[i.length-1].size(this.resolveDataElementOptions(i.length-1));return Math.max(s,n,a)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}(0,De.A)(Qo,"id","line"),(0,De.A)(Qo,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),(0,De.A)(Qo,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class Yo extends Mo{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,i=s.data.labels||[],n=Zi(e._parsed[t].r,s.options.locale);return{label:i[t]||"",value:n}}parseObjectData(t,e,s,i){return aa.bind(this)(t,e,s,i)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((t,s)=>{const i=this.getParsed(s).r;!isNaN(i)&&this.chart.getDataVisibility(s)&&(ie.max&&(e.max=i))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,s=t.options,i=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(i/2,0),a=Math.max(s.cutoutPercentage?n/100*s.cutoutPercentage:1,0),o=(n-a)/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,s,i){const n="reset"===i,a=this.chart,o=a.options,l=o.animation,r=this._cachedMeta.rScale,d=r.xCenter,c=r.yCenter,h=r.getIndexAngle(0)-.5*Ys;let u,p=h;const g=360/this.countVisibleElements();for(u=0;u{!isNaN(this.getParsed(s).r)&&this.chart.getDataVisibility(s)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?pi(this.resolveDataElementOptions(t,e).angle||s):0}}(0,De.A)(Yo,"id","polarArea"),(0,De.A)(Yo,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),(0,De.A)(Yo,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:s,color:i}}=t.legend.options;return e.labels.map((e,n)=>{const a=t.getDatasetMeta(0),o=a.controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:i,lineWidth:o.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(n),index:n}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class Go extends Ko{}(0,De.A)(Go,"id","pie"),(0,De.A)(Go,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class Jo extends Mo{getLabelAndValue(t){const e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,i){return aa.bind(this)(t,e,s,i)}update(t){const e=this._cachedMeta,s=e.dataset,i=e.data||[],n=e.iScale.getLabels();if(s.points=i,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const a={_loop:!0,_fullLoop:n.length===i.length,options:e};this.updateElement(s,void 0,a,t)}this.updateElements(i,0,i.length,t)}updateElements(t,e,s,i){const n=this._cachedMeta.rScale,a="reset"===i;for(let o=e;o0&&this.getParsed(e-1);for(let x=e;x0&&Math.abs(s[u]-y[u])>m,f&&(d.parsed=s,d.raw=r.data[x]),h&&(d.options=c||this.resolveDataElementOptions(x,e.active?"active":i)),b||this.updateElement(e,x,d,i),y=s}this.updateSharedOptions(c,i,d)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let s=e.length-1;s>=0;--s)t=Math.max(t,e[s].size(this.resolveDataElementOptions(s))/2);return t>0&&t}const s=t.dataset,i=s.options&&s.options.borderWidth||0;if(!e.length)return i;const n=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(i,n,a)/2}}(0,De.A)(Zo,"id","scatter"),(0,De.A)(Zo,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),(0,De.A)(Zo,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});function tl(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class el{static override(t){Object.assign(el.prototype,t)}constructor(t){(0,De.A)(this,"options",void 0),this.options=t||{}}init(){}formats(){return tl()}parse(){return tl()}format(){return tl()}add(){return tl()}diff(){return tl()}startOf(){return tl()}endOf(){return tl()}}var sl={_date:el};function il(t,e,s,i){const{controller:n,data:a,_sorted:o}=t,l=n._cachedMeta.iScale,r=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null;if(l&&e===l.axis&&"r"!==e&&o&&a.length){const o=l._reversePixels?Fi:Si;if(!i){const i=o(a,e,s);if(r){const{vScale:e}=n._cachedMeta,{_parsed:s}=t,a=s.slice(0,i.lo+1).reverse().findIndex(t=>!Cs(t[e.axis]));i.lo-=Math.max(0,a);const o=s.slice(i.hi).findIndex(t=>!Cs(t[e.axis]));i.hi+=Math.max(0,o)}return i}if(n._sharedOptions){const t=a[0],i="function"===typeof t.getRange&&t.getRange(e);if(i){const t=o(a,e,s-i),n=o(a,e,s+i);return{lo:t.lo,hi:n.hi}}}}return{lo:0,hi:a.length-1}}function nl(t,e,s,i,n){const a=t.getSortedVisibleDatasetMetas(),o=s[e];for(let l=0,r=a.length;l{t[o]&&t[o](e[s],n)&&(a.push({element:t,datasetIndex:i,index:r}),l=l||t.inRange(e.x,e.y,n))}),i&&!l?[]:a}var hl={evaluateInteractionItems:nl,modes:{index(t,e,s,i){const n=Sa(e,t),a=s.axis||"x",o=s.includeInvisible||!1,l=s.intersect?ol(t,n,a,i,o):dl(t,n,a,!1,i,o),r=[];return l.length?(t.getSortedVisibleDatasetMetas().forEach(t=>{const e=l[0].index,s=t.data[e];s&&!s.skip&&r.push({element:s,datasetIndex:t.index,index:e})}),r):[]},dataset(t,e,s,i){const n=Sa(e,t),a=s.axis||"xy",o=s.includeInvisible||!1;let l=s.intersect?ol(t,n,a,i,o):dl(t,n,a,!1,i,o);if(l.length>0){const e=l[0].datasetIndex,s=t.getDatasetMeta(e).data;l=[];for(let t=0;tt.pos===e)}function gl(t,e){return t.filter(t=>-1===ul.indexOf(t.pos)&&t.box.axis===e)}function fl(t,e){return t.sort((t,s)=>{const i=e?s:t,n=e?t:s;return i.weight===n.weight?i.index-n.index:i.weight-n.weight})}function ml(t){const e=[];let s,i,n,a,o,l;for(s=0,i=(t||[]).length;st.box.fullSize),!0),i=fl(pl(e,"left"),!0),n=fl(pl(e,"right")),a=fl(pl(e,"top"),!0),o=fl(pl(e,"bottom")),l=gl(e,"x"),r=gl(e,"y");return{fullSize:s,leftAndTop:i.concat(a),rightAndBottom:n.concat(r).concat(o).concat(l),chartArea:pl(e,"chartArea"),vertical:i.concat(n).concat(r),horizontal:a.concat(o).concat(l)}}function vl(t,e,s,i){return Math.max(t[s],e[s])+Math.max(t[i],e[i])}function _l(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function kl(t,e,s,i){const{pos:n,box:a}=s,o=t.maxPadding;if(!Fs(n)){s.size&&(t[n]-=s.size);const e=i[s.stack]||{size:0,count:1};e.size=Math.max(e.size,s.horizontal?a.height:a.width),s.size=e.size/e.count,t[n]+=s.size}a.getPadding&&_l(o,a.getPadding());const l=Math.max(0,e.outerWidth-vl(o,t,"left","right")),r=Math.max(0,e.outerHeight-vl(o,t,"top","bottom")),d=l!==t.w,c=r!==t.h;return t.w=l,t.h=r,s.horizontal?{same:d,other:c}:{same:c,other:d}}function wl(t){const e=t.maxPadding;function s(s){const i=Math.max(e[s]-t[s],0);return t[s]+=i,i}t.y+=s("top"),t.x+=s("left"),s("right"),s("bottom")}function Cl(t,e){const s=e.maxPadding;function i(t){const i={left:0,top:0,right:0,bottom:0};return t.forEach(t=>{i[t]=Math.max(e[t],s[t])}),i}return i(t?["left","right"]:["top","bottom"])}function Sl(t,e,s,i){const n=[];let a,o,l,r,d,c;for(a=0,o=t.length,d=0;a{"function"===typeof t.beforeLayout&&t.beforeLayout()});const c=r.reduce((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1,0)||1,h=Object.freeze({outerWidth:e,outerHeight:s,padding:n,availableWidth:a,availableHeight:o,vBoxMaxWidth:a/2/c,hBoxMaxHeight:o/2}),u=Object.assign({},n);_l(u,En(i));const p=Object.assign({maxPadding:u,w:a,h:o,x:n.left,y:n.top},n),g=yl(r.concat(d),h);Sl(l.fullSize,p,h,g),Sl(r,p,h,g),Sl(d,p,h,g)&&Sl(r,p,h,g),wl(p),Tl(l.leftAndTop,p,h,g),p.x+=p.w,p.y+=p.h,Tl(l.rightAndBottom,p,h,g),t.chartArea={left:p.left,top:p.top,right:p.left+p.w,bottom:p.top+p.h,height:p.h,width:p.w},Vs(l.chartArea,e=>{const s=e.box;Object.assign(s,t.chartArea),s.update(p.w,p.h,{left:0,top:0,right:0,bottom:0})})}};class Ml{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,i){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,i?Math.floor(e/i):s)}}isAttached(t){return!0}updateConfig(t){}}class Dl extends Ml{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const Al="$chartjs",$l={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Vl=t=>null===t||""===t;function Ll(t,e){const s=t.style,i=t.getAttribute("height"),n=t.getAttribute("width");if(t[Al]={initial:{height:i,width:n,style:{display:s.display,height:s.height,width:s.width}}},s.display=s.display||"block",s.boxSizing=s.boxSizing||"border-box",Vl(n)){const e=Aa(t,"width");void 0!==e&&(t.width=e)}if(Vl(i))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Aa(t,"height");void 0!==e&&(t.height=e)}return t}const El=!!Da&&{passive:!0};function Il(t,e,s){t&&t.addEventListener(e,s,El)}function Ul(t,e,s){t&&t.canvas&&t.canvas.removeEventListener(e,s,El)}function Ol(t,e){const s=$l[t.type]||t.type,{x:i,y:n}=Sa(t,e);return{type:s,chart:e,native:t,x:void 0!==i?i:null,y:void 0!==n?n:null}}function Rl(t,e){for(const s of t)if(s===e||s.contains(e))return!0}function Wl(t,e,s){const i=t.canvas,n=new MutationObserver(t=>{let e=!1;for(const s of t)e=e||Rl(s.addedNodes,i),e=e&&!Rl(s.removedNodes,i);e&&s()});return n.observe(document,{childList:!0,subtree:!0}),n}function Bl(t,e,s){const i=t.canvas,n=new MutationObserver(t=>{let e=!1;for(const s of t)e=e||Rl(s.removedNodes,i),e=e&&!Rl(s.addedNodes,i);e&&s()});return n.observe(document,{childList:!0,subtree:!0}),n}const Nl=new Map;let zl=0;function jl(){const t=window.devicePixelRatio;t!==zl&&(zl=t,Nl.forEach((e,s)=>{s.currentDevicePixelRatio!==t&&e()}))}function ql(t,e){Nl.size||window.addEventListener("resize",jl),Nl.set(t,e)}function Hl(t){Nl.delete(t),Nl.size||window.removeEventListener("resize",jl)}function Xl(t,e,s){const i=t.canvas,n=i&&ba(i);if(!n)return;const a=Vi((t,e)=>{const i=n.clientWidth;s(t,e),i{const e=t[0],s=e.contentRect.width,i=e.contentRect.height;0===s&&0===i||a(s,i)});return o.observe(n),ql(t,a),o}function Kl(t,e,s){s&&s.disconnect(),"resize"===e&&Hl(t)}function Ql(t,e,s){const i=t.canvas,n=Vi(e=>{null!==t.ctx&&s(Ol(e,t))},t);return Il(i,e,n),n}class Yl extends Ml{acquireContext(t,e){const s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(Ll(t,e),s):null}releaseContext(t){const e=t.canvas;if(!e[Al])return!1;const s=e[Al].initial;["height","width"].forEach(t=>{const i=s[t];Cs(i)?e.removeAttribute(t):e.setAttribute(t,i)});const i=s.style||{};return Object.keys(i).forEach(t=>{e.style[t]=i[t]}),e.width=e.width,delete e[Al],!0}addEventListener(t,e,s){this.removeEventListener(t,e);const i=t.$proxies||(t.$proxies={}),n={attach:Wl,detach:Bl,resize:Xl},a=n[e]||Ql;i[e]=a(t,e,s)}removeEventListener(t,e){const s=t.$proxies||(t.$proxies={}),i=s[e];if(!i)return;const n={attach:Kl,detach:Kl,resize:Kl},a=n[e]||Ul;a(t,e,i),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,i){return Pa(t,e,s,i)}isAttached(t){const e=t&&ba(t);return!(!e||!e.isConnected)}}function Gl(t){return!ma()||"undefined"!==typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Dl:Yl}class Jl{constructor(){(0,De.A)(this,"x",void 0),(0,De.A)(this,"y",void 0),(0,De.A)(this,"active",!1),(0,De.A)(this,"options",void 0),(0,De.A)(this,"$animations",void 0)}tooltipPosition(t){const{x:e,y:s}=this.getProps(["x","y"],t);return{x:e,y:s}}hasValue(){return ci(this.x)&&ci(this.y)}getProps(t,e){const s=this.$animations;if(!e||!s)return this;const i={};return t.forEach(t=>{i[t]=s[t]&&s[t].active()?s[t]._to:this[t]}),i}}function Zl(t,e){const s=t.options.ticks,i=tr(t),n=Math.min(s.maxTicksLimit||i,i),a=s.major.enabled?sr(e):[],o=a.length,l=a[0],r=a[o-1],d=[];if(o>n)return ir(e,d,a,o/n),d;const c=er(a,e,n);if(o>0){let t,s;const i=o>1?Math.round((r-l)/(o-1)):null;for(nr(e,d,c,Cs(i)?0:l-i,l),t=0,s=o-1;tn)return t}return Math.max(n,1)}function sr(t){const e=[];let s,i;for(s=0,i=t.length;s"left"===t?"right":"right"===t?"left":t,lr=(t,e,s)=>"top"===e||"left"===e?t[e]+s:t[e]-s,rr=(t,e)=>Math.min(e||t,t);function dr(t,e){const s=[],i=t.length/e,n=t.length;let a=0;for(;ao+l)))return d}function hr(t,e){Vs(t,t=>{const s=t.gc,i=s.length/2;let n;if(i>e){for(n=0;ni?i:s,i=n&&s>i?s:i,{min:Ps(s,Ps(i,s)),max:Ps(i,Ps(s,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){const e=this._labelItems||(this._labelItems=this._computeLabelItems(t));return e}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){$s(this.options.beforeUpdate,[this])}update(t,e,s){const{beginAtZero:i,grace:n,ticks:a}=this.options,o=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=On(this,n,i),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=o=n||s<=1||!this.isHorizontal())return void(this.labelRotation=i);const d=this._getLabelSizes(),c=d.widest.width,h=d.highest.height,u=_i(this.chart.width-c,0,this.maxWidth);a=t.offset?this.maxWidth/s:u/(s-1),c+6>a&&(a=u/(s-(t.offset?.5:1)),o=this.maxHeight-ur(t.grid)-e.padding-pr(t.title,this.chart.options.font),l=Math.sqrt(c*c+h*h),r=gi(Math.min(Math.asin(_i((d.highest.height+6)/a,-1,1)),Math.asin(_i(o/l,-1,1))-Math.asin(_i(h/l,-1,1)))),r=Math.max(i,Math.min(n,r))),this.labelRotation=r}afterCalculateLabelRotation(){$s(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){$s(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:s,title:i,grid:n}}=this,a=this._isVisible(),o=this.isHorizontal();if(a){const a=pr(i,e.options.font);if(o?(t.width=this.maxWidth,t.height=ur(n)+a):(t.height=this.maxHeight,t.width=ur(n)+a),s.display&&this.ticks.length){const{first:e,last:i,widest:n,highest:a}=this._getLabelSizes(),l=2*s.padding,r=pi(this.labelRotation),d=Math.cos(r),c=Math.sin(r);if(o){const e=s.mirror?0:c*n.width+d*a.height;t.height=Math.min(this.maxHeight,t.height+e+l)}else{const e=s.mirror?0:d*n.width+c*a.height;t.width=Math.min(this.maxWidth,t.width+e+l)}this._calculatePadding(e,i,c,d)}}this._handleMargins(),o?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,i){const{ticks:{align:n,padding:a},position:o}=this.options,l=0!==this.labelRotation,r="top"!==o&&"x"===this.axis;if(this.isHorizontal()){const o=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,h=0;l?r?(c=i*t.width,h=s*e.height):(c=s*t.height,h=i*e.width):"start"===n?h=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,h=e.width/2),this.paddingLeft=Math.max((c-o+a)*this.width/(this.width-o),0),this.paddingRight=Math.max((h-d+a)*this.width/(this.width-d),0)}else{let s=e.height/2,i=t.height/2;"start"===n?(s=0,i=t.height):"end"===n&&(s=e.height,i=0),this.paddingTop=s+a,this.paddingBottom=i+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){$s(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,s;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,s=t.length;e({width:a[t]||0,height:o[t]||0});return{first:w(0),last:w(e-1),widest:w(_),highest:w(k),widths:a,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return ki(this._alignToPixels?gn(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&to*i?o/s:l/i:l*i0}_computeGridLineItems(t){const e=this.axis,s=this.chart,i=this.options,{grid:n,position:a,border:o}=i,l=n.offset,r=this.isHorizontal(),d=this.ticks,c=d.length+(l?1:0),h=ur(n),u=[],p=o.setContext(this.getContext()),g=p.display?p.width:0,f=g/2,m=function(t){return gn(s,t,g)};let b,y,x,v,_,k,w,C,S,F,T,P;if("top"===a)b=m(this.bottom),k=this.bottom-h,C=b-f,F=m(t.top)+f,P=t.bottom;else if("bottom"===a)b=m(this.top),F=t.top,P=m(t.bottom)-f,k=b+f,C=this.top+h;else if("left"===a)b=m(this.right),_=this.right-h,w=b-f,S=m(t.left)+f,T=t.right;else if("right"===a)b=m(this.left),S=t.left,T=m(t.right)-f,_=b+f,w=this.left+h;else if("x"===e){if("center"===a)b=m((t.top+t.bottom)/2+.5);else if(Fs(a)){const t=Object.keys(a)[0],e=a[t];b=m(this.chart.scales[t].getPixelForValue(e))}F=t.top,P=t.bottom,k=b+f,C=k+h}else if("y"===e){if("center"===a)b=m((t.left+t.right)/2);else if(Fs(a)){const t=Object.keys(a)[0],e=a[t];b=m(this.chart.scales[t].getPixelForValue(e))}_=b-f,w=_-h,S=t.left,T=t.right}const M=Ms(i.ticks.maxTicksLimit,c),D=Math.max(1,Math.ceil(c/M));for(y=0;y0&&(a-=i/2);break}h={left:a,top:n,width:i+e.width,height:s+e.height,color:t.backdropColor}}f.push({label:x,font:C,textOffset:T,options:{rotation:g,color:s,strokeColor:l,strokeWidth:d,textAlign:u,textBaseline:P,translation:[v,_],backdrop:h}})}return f}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options,s=-pi(this.labelRotation);if(s)return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:s,mirror:i,padding:n}}=this.options,a=this._getLabelSizes(),o=t+n,l=a.widest.width;let r,d;return"left"===e?i?(d=this.right+n,"near"===s?r="left":"center"===s?(r="center",d+=l/2):(r="right",d+=l)):(d=this.right-o,"near"===s?r="right":"center"===s?(r="center",d-=l/2):(r="left",d=this.left)):"right"===e?i?(d=this.left+n,"near"===s?r="right":"center"===s?(r="center",d-=l/2):(r="left",d-=l)):(d=this.left+o,"near"===s?r="left":"center"===s?(r="center",d+=l/2):(r="right",d=this.right)):r="right",{textAlign:r,x:d}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:s,top:i,width:n,height:a}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(s,i,n,a),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const s=this.ticks,i=s.findIndex(e=>e.value===t);if(i>=0){const t=e.setContext(this.getContext(i));return t.lineWidth}return 0}drawGrid(t){const e=this.options.grid,s=this.ctx,i=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,a;const o=(t,e,i)=>{i.width&&i.color&&(s.save(),s.lineWidth=i.width,s.strokeStyle=i.color,s.setLineDash(i.borderDash||[]),s.lineDashOffset=i.borderDashOffset,s.beginPath(),s.moveTo(t.x,t.y),s.lineTo(e.x,e.y),s.stroke(),s.restore())};if(e.display)for(n=0,a=i.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",i=[];let n,a;for(n=0,a=e.length;n{const i=s.split("."),n=i.pop(),a=[t].concat(i).join("."),o=e[s].split("."),l=o.pop(),r=o.join(".");cn.route(a,n,r,l)})}function kr(t){return"id"in t&&"defaults"in t}class wr{constructor(){this.controllers=new xr(Mo,"datasets",!0),this.elements=new xr(Jl,"elements"),this.plugins=new xr(Object,"plugins"),this.scales=new xr(yr,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(e=>{const i=s||this._getRegistryForType(e);s||i.isForType(e)||i===this.plugins&&e.id?this._exec(t,i,e):Vs(e,e=>{const i=s||this._getRegistryForType(e);this._exec(t,i,e)})})}_exec(t,e,s){const i=qs(t);$s(s["before"+i],[],s),e[t](s),$s(s["after"+i],[],s)}_getRegistryForType(t){for(let e=0;et.filter(t=>!e.some(e=>t.plugin.id===e.plugin.id));this._notify(i(e,s),t,"stop"),this._notify(i(s,e),t,"start")}}function Fr(t){const e={},s=[],i=Object.keys(Cr.plugins.items);for(let a=0;a1&&Vr(t[0].toLowerCase());if(e)return e}throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function Ir(t,e,s){if(s[e+"AxisID"]===t)return{axis:e}}function Ur(t,e){if(e.data&&e.data.datasets){const s=e.data.datasets.filter(e=>e.xAxisID===t||e.yAxisID===t);if(s.length)return Ir(t,"x",s[0])||Ir(t,"y",s[0])}return{}}function Or(t,e){const s=an[t.type]||{scales:{}},i=e.scales||{},n=Dr(t.type,e),a=Object.create(null);return Object.keys(i).forEach(e=>{const o=i[e];if(!Fs(o))return console.error(`Invalid scale configuration for scale: ${e}`);if(o._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const l=Er(e,o,Ur(e,t),cn.scales[o.type]),r=$r(l,n),d=s.scales||{};a[e]=Rs(Object.create(null),[{axis:l},o,d[l],d[r]])}),t.data.datasets.forEach(s=>{const n=s.type||t.type,o=s.indexAxis||Dr(n,e),l=an[n]||{},r=l.scales||{};Object.keys(r).forEach(t=>{const e=Ar(t,o),n=s[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),Rs(a[n],[{axis:e},i[n],r[t]])})}),Object.keys(a).forEach(t=>{const e=a[t];Rs(e,[cn.scales[e.type],cn.scale])}),a}function Rr(t){const e=t.options||(t.options={});e.plugins=Ms(e.plugins,{}),e.scales=Or(t,e)}function Wr(t){return t=t||{},t.datasets=t.datasets||[],t.labels=t.labels||[],t}function Br(t){return t=t||{},t.data=Wr(t.data),Rr(t),t}const Nr=new Map,zr=new Set;function jr(t,e){let s=Nr.get(t);return s||(s=e(),Nr.set(t,s),zr.add(s)),s}const qr=(t,e,s)=>{const i=js(e,s);void 0!==i&&t.add(i)};class Hr{constructor(t){this._config=Br(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Wr(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Rr(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return jr(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return jr(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return jr(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,s=this.type;return jr(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const s=this._scopeCache;let i=s.get(t);return i&&!e||(i=new Map,s.set(t,i)),i}getOptionScopes(t,e,s){const{options:i,type:n}=this,a=this._cachedScopes(t,s),o=a.get(e);if(o)return o;const l=new Set;e.forEach(e=>{t&&(l.add(t),e.forEach(e=>qr(l,t,e))),e.forEach(t=>qr(l,i,t)),e.forEach(t=>qr(l,an[n]||{},t)),e.forEach(t=>qr(l,cn,t)),e.forEach(t=>qr(l,on,t))});const r=Array.from(l);return 0===r.length&&r.push(Object.create(null)),zr.has(e)&&a.set(e,r),r}chartOptionScopes(){const{options:t,type:e}=this;return[t,an[e]||{},cn.datasets[e]||{},{type:e},cn,on]}resolveNamedOptions(t,e,s,i=[""]){const n={$shared:!0},{resolver:a,subPrefixes:o}=Xr(this._resolverCache,t,i);let l=a;if(Qr(a,e)){n.$shared=!1,s=Xs(s)?s():s;const e=this.createResolver(t,s,o);l=Bn(a,s,e)}for(const r of e)n[r]=l[r];return n}createResolver(t,e,s=[""],i){const{resolver:n}=Xr(this._resolverCache,t,s);return Fs(e)?Bn(n,e,void 0,i):n}}function Xr(t,e,s){let i=t.get(e);i||(i=new Map,t.set(e,i));const n=s.join();let a=i.get(n);if(!a){const t=Wn(e,s);a={resolver:t,subPrefixes:s.filter(t=>!t.toLowerCase().includes("hover"))},i.set(n,a)}return a}const Kr=t=>Fs(t)&&Object.getOwnPropertyNames(t).some(e=>Xs(t[e]));function Qr(t,e){const{isScriptable:s,isIndexable:i}=Nn(t);for(const n of e){const e=s(n),a=i(n),o=(a||e)&&t[n];if(e&&(Xs(o)||Kr(o))||a&&Ss(o))return!0}return!1}var Yr="4.5.1";const Gr=["top","bottom","left","right","chartArea"];function Jr(t,e){return"top"===t||"bottom"===t||-1===Gr.indexOf(t)&&"x"===e}function Zr(t,e){return function(s,i){return s[t]===i[t]?s[e]-i[e]:s[t]-i[t]}}function td(t){const e=t.chart,s=e.options.animation;e.notifyPlugins("afterRender"),$s(s&&s.onComplete,[t],e)}function ed(t){const e=t.chart,s=e.options.animation;$s(s&&s.onProgress,[t],e)}function sd(t){return ma()&&"string"===typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const id={},nd=t=>{const e=sd(t);return Object.values(id).filter(t=>t.canvas===e).pop()};function ad(t,e,s){const i=Object.keys(t);for(const n of i){const i=+n;if(i>=e){const a=t[n];delete t[n],(s>0||i>e)&&(t[i+s]=a)}}}function od(t,e,s,i){return s&&"mouseout"!==t.type?i?e:t:null}class ld{static register(...t){Cr.add(...t),rd()}static unregister(...t){Cr.remove(...t),rd()}constructor(t,e){const s=this.config=new Hr(e),i=sd(t),n=nd(i);if(n)throw new Error("Canvas is already in use. Chart with ID '"+n.id+"' must be destroyed before the canvas with ID '"+n.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||Gl(i)),this.platform.updateConfig(s);const o=this.platform.acquireContext(i,a.aspectRatio),l=o&&o.canvas,r=l&&l.height,d=l&&l.width;this.id=ws(),this.ctx=o,this.canvas=l,this.width=d,this.height=r,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Sr,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Li(t=>this.update(t),a.resizeDelay||0),this._dataChanges=[],id[this.id]=this,o&&l?(so.listen(this,"complete",td),so.listen(this,"progress",ed),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:i,_aspectRatio:n}=this;return Cs(t)?e&&n?n:i?s/i:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Cr}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Ma(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return fn(this.canvas,this.ctx),this}stop(){return so.stop(this),this}resize(t,e){so.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const s=this.options,i=this.canvas,n=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(i,t,e,n),o=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,Ma(this,o,!0)&&(this.notifyPlugins("resize",{size:a}),$s(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const t=this.options,e=t.scales||{};Vs(e,(t,e)=>{t.id=e})}buildOrUpdateScales(){const t=this.options,e=t.scales,s=this.scales,i=Object.keys(s).reduce((t,e)=>(t[e]=!1,t),{});let n=[];e&&(n=n.concat(Object.keys(e).map(t=>{const s=e[t],i=Er(t,s),n="r"===i,a="x"===i;return{options:s,dposition:n?"chartArea":a?"bottom":"left",dtype:n?"radialLinear":a?"category":"linear"}}))),Vs(n,e=>{const n=e.options,a=n.id,o=Er(a,n),l=Ms(n.type,e.dtype);void 0!==n.position&&Jr(n.position,o)===Jr(e.dposition)||(n.position=e.dposition),i[a]=!0;let r=null;if(a in s&&s[a].type===l)r=s[a];else{const t=Cr.getScale(l);r=new t({id:a,type:l,ctx:this.ctx,chart:this}),s[r.id]=r}r.init(n,t)}),Vs(i,(t,e)=>{t||delete s[e]}),Vs(s,t=>{Pl.configure(this,t,t.options),Pl.addBox(this,t)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((t,e)=>t.index-e.index),s>e){for(let t=e;te.length&&delete this._stacks,t.forEach((t,s)=>{0===e.filter(e=>e===t._dataset).length&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let s,i;for(this._removeUnreferencedMetasets(),s=0,i=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),i=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let r=0,d=this.data.datasets.length;r{t.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(Zr("z","_idx"));const{_active:o,_lastEvent:l}=this;l?this._eventHandler(l,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){Vs(this.scales,t=>{Pl.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);Ks(e,s)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:s,start:i,count:n}of e){const e="_removeElements"===s?-n:n;ad(t,i,e)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,s=e=>new Set(t.filter(t=>t[0]===e).map((t,e)=>e+","+t.splice(1).join(","))),i=s(0);for(let n=1;nt.split(",")).map(t=>({method:t[1],start:+t[2],count:+t[3]}))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;Pl.update(this,this.width,this.height,t);const e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],Vs(this.boxes,t=>{s&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))},this),this._layers.forEach((t,e)=>{t._idx=e}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,s={meta:t,index:t.index,cancelable:!0},i=to(this,t);!1!==this.notifyPlugins("beforeDatasetDraw",s)&&(i&&xn(e,i),t.controller.draw(),i&&vn(e),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(t){return yn(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,i){const n=hl.modes[e];return"function"===typeof n?n(this,t,s,i):[]}getDatasetMeta(t){const e=this.data.datasets[t],s=this._metasets;let i=s.filter(t=>t&&t._dataset===e).pop();return i||(i={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(i)),i}getContext(){return this.$context||(this.$context=Rn(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const s=this.getDatasetMeta(t);return"boolean"===typeof s.hidden?!s.hidden:!e.hidden}setDatasetVisibility(t,e){const s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){const i=s?"show":"hide",n=this.getDatasetMeta(t),a=n.controller._resolveAnimations(void 0,i);Hs(e)?(n.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(n,{visible:s}),this.update(e=>e.datasetIndex===t?i:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),so.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,s,i),t[s]=i},i=(t,e,s)=>{t.offsetX=e,t.offsetY=s,this._eventHandler(t)};Vs(this.options.events,t=>s(t,i))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,s=(s,i)=>{e.addEventListener(this,s,i),t[s]=i},i=(s,i)=>{t[s]&&(e.removeEventListener(this,s,i),delete t[s])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let a;const o=()=>{i("attach",o),this.attached=!0,this.resize(),s("resize",n),s("detach",a)};a=()=>{this.attached=!1,i("resize",n),this._stop(),this._resize(0,0),s("attach",o)},e.isAttached(this.canvas)?o():a()}unbindEvents(){Vs(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},Vs(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){const i=s?"set":"remove";let n,a,o,l;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+i+"DatasetHoverStyle"]()),o=0,l=t.length;o{const s=this.getDatasetMeta(t);if(!s)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:s.data[e],index:e}}),i=!Ls(s,e);i&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}isPluginEnabled(t){return 1===this._plugins._cache.filter(e=>e.plugin.id===t).length}_updateHoverStyles(t,e,s){const i=this.options.hover,n=(t,e)=>t.filter(t=>!e.some(e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)),a=n(e,t),o=s?t:n(t,e);a.length&&this.updateHoverStyle(a,i.mode,!1),o.length&&i.mode&&this.updateHoverStyle(o,i.mode,!0)}_eventHandler(t,e){const s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},i=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",s,i))return;const n=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,i),(n||s.changed)&&this.render(),this}_handleEvent(t,e,s){const{_active:i=[],options:n}=this,a=e,o=this._getActiveElements(t,i,s,a),l=Qs(t),r=od(t,this._lastEvent,s,l);s&&(this._lastEvent=null,$s(n.onHover,[t,o,this],this),l&&$s(n.onClick,[t,o,this],this));const d=!Ls(o,i);return(d||e)&&(this._active=o,this._updateHoverStyles(o,i,e)),this._lastEvent=r,d}_getActiveElements(t,e,s,i){if("mouseout"===t.type)return[];if(!s)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,i)}}function rd(){return Vs(ld.instances,t=>t._plugins.invalidate())}function dd(t,e,s){const{startAngle:i,x:n,y:a,outerRadius:o,innerRadius:l,options:r}=e,{borderWidth:d,borderJoinStyle:c}=r,h=Math.min(d/o,xi(i-s));if(t.beginPath(),t.arc(n,a,o-d/2,i+h/2,s-h/2),l>0){const e=Math.min(d/l,xi(i-s));t.arc(n,a,l+d/2,s-e/2,i+e/2,!0)}else{const e=Math.min(d/2,o*xi(i-s));if("round"===c)t.arc(n,a,e,s-Ys/2,i+Ys/2,!0);else if("bevel"===c){const o=2*e*e,l=-o*Math.cos(s+Ys/2)+n,r=-o*Math.sin(s+Ys/2)+a,d=o*Math.cos(i+Ys/2)+n,c=o*Math.sin(i+Ys/2)+a;t.lineTo(l,r),t.lineTo(d,c)}}t.closePath(),t.moveTo(0,0),t.rect(0,0,t.canvas.width,t.canvas.height),t.clip("evenodd")}function cd(t,e,s){const{startAngle:i,pixelMargin:n,x:a,y:o,outerRadius:l,innerRadius:r}=e;let d=n/l;t.beginPath(),t.arc(a,o,l,i-d,s+d),r>n?(d=n/r,t.arc(a,o,r,s+d,i-d,!0)):t.arc(a,o,n,s+ei,i-ei),t.closePath(),t.clip()}function hd(t){return $n(t,["outerStart","outerEnd","innerStart","innerEnd"])}function ud(t,e,s,i){const n=hd(t.options.borderRadius),a=(s-e)/2,o=Math.min(a,i*e/2),l=t=>{const e=(s-Math.min(a,t))*i/2;return _i(t,0,Math.min(a,e))};return{outerStart:l(n.outerStart),outerEnd:l(n.outerEnd),innerStart:_i(n.innerStart,0,o),innerEnd:_i(n.innerEnd,0,o)}}function pd(t,e,s,i){return{x:s+t*Math.cos(e),y:i+t*Math.sin(e)}}function gd(t,e,s,i,n,a){const{x:o,y:l,startAngle:r,pixelMargin:d,innerRadius:c}=e,h=Math.max(e.outerRadius+i+s-d,0),u=c>0?c+i+s+d:0;let p=0;const g=n-r;if(i){const t=c>0?c-i:0,e=h>0?h-i:0,s=(t+e)/2,n=0!==s?g*s/(s+i):g;p=(g-n)/2}const f=Math.max(.001,g*h-s/Ys)/h,m=(g-f)/2,b=r+m+p,y=n-m-p,{outerStart:x,outerEnd:v,innerStart:_,innerEnd:k}=ud(e,u,h,y-b),w=h-x,C=h-v,S=b+x/w,F=y-v/C,T=u+_,P=u+k,M=b+_/T,D=y-k/P;if(t.beginPath(),a){const e=(S+F)/2;if(t.arc(o,l,h,S,e),t.arc(o,l,h,e,F),v>0){const e=pd(C,F,o,l);t.arc(e.x,e.y,v,F,y+ei)}const s=pd(P,y,o,l);if(t.lineTo(s.x,s.y),k>0){const e=pd(P,D,o,l);t.arc(e.x,e.y,k,y+ei,D+Math.PI)}const i=(y-k/u+(b+_/u))/2;if(t.arc(o,l,u,y-k/u,i,!0),t.arc(o,l,u,i,b+_/u,!0),_>0){const e=pd(T,M,o,l);t.arc(e.x,e.y,_,M+Math.PI,b-ei)}const n=pd(w,b,o,l);if(t.lineTo(n.x,n.y),x>0){const e=pd(w,S,o,l);t.arc(e.x,e.y,x,b-ei,S)}}else{t.moveTo(o,l);const e=Math.cos(S)*h+o,s=Math.sin(S)*h+l;t.lineTo(e,s);const i=Math.cos(F)*h+o,n=Math.sin(F)*h+l;t.lineTo(i,n)}t.closePath()}function fd(t,e,s,i,n){const{fullCircles:a,startAngle:o,circumference:l}=e;let r=e.endAngle;if(a){gd(t,e,s,i,r,n);for(let e=0;e=Ys&&0===p&&"miter"!==c&&dd(t,e,f),a||(gd(t,e,s,i,f,n),t.stroke())}(0,De.A)(ld,"defaults",cn),(0,De.A)(ld,"instances",id),(0,De.A)(ld,"overrides",an),(0,De.A)(ld,"registry",Cr),(0,De.A)(ld,"version",Yr),(0,De.A)(ld,"getChart",nd);class bd extends Jl{constructor(t){super(),(0,De.A)(this,"circumference",void 0),(0,De.A)(this,"endAngle",void 0),(0,De.A)(this,"fullCircles",void 0),(0,De.A)(this,"innerRadius",void 0),(0,De.A)(this,"outerRadius",void 0),(0,De.A)(this,"pixelMargin",void 0),(0,De.A)(this,"startAngle",void 0),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,s){const i=this.getProps(["x","y"],s),{angle:n,distance:a}=mi(i,{x:t,y:e}),{startAngle:o,endAngle:l,innerRadius:r,outerRadius:d,circumference:c}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],s),h=(this.options.spacing+this.options.borderWidth)/2,u=Ms(c,l-o),p=vi(n,o,l)&&o!==l,g=u>=Gs||p,f=wi(a,r+h,d+h);return g&&f}getCenterPoint(t){const{x:e,y:s,startAngle:i,endAngle:n,innerRadius:a,outerRadius:o}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:l,spacing:r}=this.options,d=(i+n)/2,c=(a+o+r+l)/2;return{x:e+Math.cos(d)*c,y:s+Math.sin(d)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:s}=this,i=(e.offset||0)/4,n=(e.spacing||0)/2,a=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=s>Gs?Math.floor(s/Gs):0,0===s||this.innerRadius<0||this.outerRadius<0)return;t.save();const o=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(o)*i,Math.sin(o)*i);const l=1-Math.sin(Math.min(Ys,s||0)),r=i*l;t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,fd(t,this,r,n,a),md(t,this,r,n,a),t.restore()}}function yd(t,e,s=e){t.lineCap=Ms(s.borderCapStyle,e.borderCapStyle),t.setLineDash(Ms(s.borderDash,e.borderDash)),t.lineDashOffset=Ms(s.borderDashOffset,e.borderDashOffset),t.lineJoin=Ms(s.borderJoinStyle,e.borderJoinStyle),t.lineWidth=Ms(s.borderWidth,e.borderWidth),t.strokeStyle=Ms(s.borderColor,e.borderColor)}function xd(t,e,s){t.lineTo(s.x,s.y)}function vd(t){return t.stepped?_n:t.tension||"monotone"===t.cubicInterpolationMode?kn:xd}function _d(t,e,s={}){const i=t.length,{start:n=0,end:a=i-1}=s,{start:o,end:l}=e,r=Math.max(n,o),d=Math.min(a,l),c=nl&&a>l;return{count:i,start:r,loop:e.loop,ilen:d(o+(d?l-t:t))%a,x=()=>{p!==g&&(t.lineTo(m,g),t.lineTo(m,p),t.lineTo(m,f))};for(r&&(h=n[y(0)],t.moveTo(h.x,h.y)),c=0;c<=l;++c){if(h=n[y(c)],h.skip)continue;const e=h.x,s=h.y,i=0|e;i===u?(sg&&(g=s),m=(b*m+e)/++b):(x(),t.lineTo(e,s),u=i,b=0,p=g=s),f=s}x()}function Cd(t){const e=t.options,s=e.borderDash&&e.borderDash.length,i=!t._decimated&&!t._loop&&!e.tension&&"monotone"!==e.cubicInterpolationMode&&!e.stepped&&!s;return i?wd:kd}function Sd(t){return t.stepped?Va:t.tension||"monotone"===t.cubicInterpolationMode?La:$a}function Fd(t,e,s,i){let n=e._path;n||(n=e._path=new Path2D,e.path(n,s,i)&&n.closePath()),yd(t,e.options),t.stroke(n)}function Td(t,e,s,i){const{segments:n,options:a}=e,o=Cd(e);for(const l of n)yd(t,a,l.style),t.beginPath(),o(t,e,l,{start:s,end:s+i-1})&&t.closePath(),t.stroke()}(0,De.A)(bd,"id","arc"),(0,De.A)(bd,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),(0,De.A)(bd,"defaultRoutes",{backgroundColor:"backgroundColor"}),(0,De.A)(bd,"descriptors",{_scriptable:!0,_indexable:t=>"borderDash"!==t});const Pd="function"===typeof Path2D;function Md(t,e,s,i){Pd&&!e.options.segment?Fd(t,e,s,i):Td(t,e,s,i)}class Dd extends Jl{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const s=this.options;if((s.tension||"monotone"===s.cubicInterpolationMode)&&!s.stepped&&!this._pointsUpdated){const i=s.spanGaps?this._loop:this._fullLoop;fa(this._points,s,t,i,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Xa(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){const s=this.options,i=t[e],n=this.points,a=ja(this,{property:e,start:i,end:i});if(!a.length)return;const o=[],l=Sd(s);let r,d;for(r=0,d=a.length;r"borderDash"!==t&&"fill"!==t});class $d extends Jl{constructor(t){super(),(0,De.A)(this,"parsed",void 0),(0,De.A)(this,"skip",void 0),(0,De.A)(this,"stop",void 0),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,s){const i=this.options,{x:n,y:a}=this.getProps(["x","y"],s);return Math.pow(t-n,2)+Math.pow(e-a,2){e=Hd(t,e,n);const o=n[t],l=n[e];null!==i?(a.push({x:o.x,y:i}),a.push({x:l.x,y:i})):null!==s&&(a.push({x:s,y:o.y}),a.push({x:s,y:l.y}))}),a}function Hd(t,e,s){for(;e>t;e--){const t=s[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function Xd(t,e,s,i){return t&&e?i(t[s],e[s]):t?t[s]:e?e[s]:0}function Kd(t,e){let s=[],i=!1;return Ss(t)?(i=!0,s=t):s=qd(t,e),s.length?new Dd({points:s,options:{tension:0},_loop:i,_fullLoop:i}):null}function Qd(t){return t&&!1!==t.fill}function Yd(t,e,s){const i=t[e];let n=i.fill;const a=[e];let o;if(!s)return n;while(!1!==n&&-1===a.indexOf(n)){if(!Ts(n))return n;if(o=t[n],!o)return!1;if(o.visible)return n;a.push(n),n=o.fill}return!1}function Gd(t,e,s){const i=ec(t);if(Fs(i))return!isNaN(i.value)&&i;let n=parseFloat(i);return Ts(n)&&Math.floor(n)===n?Jd(i[0],e,n,s):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function Jd(t,e,s,i){return"-"!==t&&"+"!==t||(s=e+s),!(s===e||s<0||s>=i)&&s}function Zd(t,e){let s=null;return"start"===t?s=e.bottom:"end"===t?s=e.top:Fs(t)?s=e.getPixelForValue(t.value):e.getBasePixel&&(s=e.getBasePixel()),s}function tc(t,e,s){let i;return i="start"===t?s:"end"===t?e.options.reverse?e.min:e.max:Fs(t)?t.value:e.getBaseValue(),i}function ec(t){const e=t.options,s=e.fill;let i=Ms(s&&s.target,s);return void 0===i&&(i=!!e.backgroundColor),!1!==i&&null!==i&&(!0===i?"origin":i)}function sc(t){const{scale:e,index:s,line:i}=t,n=[],a=i.segments,o=i.points,l=ic(e,s);l.push(Kd({x:null,y:e.bottom},i));for(let r=0;r=0;--o){const e=n[o].$filler;e&&(e.line.updateControlPoints(a,e.axis),i&&e.fill&&uc(t.ctx,e,a))}},beforeDatasetsDraw(t,e,s){if("beforeDatasetsDraw"!==s.drawTime)return;const i=t.getSortedVisibleDatasetMetas();for(let n=i.length-1;n>=0;--n){const e=i[n].$filler;Qd(e)&&uc(t.ctx,e,t.chartArea)}},beforeDatasetDraw(t,e,s){const i=e.meta.$filler;Qd(i)&&"beforeDatasetDraw"===s.drawTime&&uc(t.ctx,i,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const vc=(t,e)=>{let{boxHeight:s=e,boxWidth:i=e}=t;return t.usePointStyle&&(s=Math.min(s,e),i=t.pointStyleWidth||Math.min(i,e)),{boxWidth:i,boxHeight:s,itemHeight:Math.max(e,s)}},_c=(t,e)=>null!==t&&null!==e&&t.datasetIndex===e.datasetIndex&&t.index===e.index;class kc extends Jl{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=$s(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(e=>t.filter(e,this.chart.data))),t.sort&&(e=e.sort((e,s)=>t.sort(e,s,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const s=t.labels,i=In(s.font),n=i.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:l}=vc(s,n);let r,d;e.font=i.string,this.isHorizontal()?(r=this.maxWidth,d=this._fitRows(a,n,o,l)+10):(d=this.maxHeight,r=this._fitCols(a,i,o,l)+10),this.width=Math.min(r,t.maxWidth||this.maxWidth),this.height=Math.min(d,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,i){const{ctx:n,maxWidth:a,options:{labels:{padding:o}}}=this,l=this.legendHitBoxes=[],r=this.lineWidths=[0],d=i+o;let c=t;n.textAlign="left",n.textBaseline="middle";let h=-1,u=-d;return this.legendItems.forEach((t,p)=>{const g=s+e/2+n.measureText(t.text).width;(0===p||r[r.length-1]+g+2*o>a)&&(c+=d,r[r.length-(p>0?0:1)]=0,u+=d,h++),l[p]={left:0,top:u,row:h,width:g,height:i},r[r.length-1]+=g+o}),c}_fitCols(t,e,s,i){const{ctx:n,maxHeight:a,options:{labels:{padding:o}}}=this,l=this.legendHitBoxes=[],r=this.columnSizes=[],d=a-t;let c=o,h=0,u=0,p=0,g=0;return this.legendItems.forEach((t,a)=>{const{itemWidth:f,itemHeight:m}=wc(s,e,n,t,i);a>0&&u+m+2*o>d&&(c+=h+o,r.push({width:h,height:u}),p+=h+o,g++,h=u=0),l[a]={left:p,top:u,col:g,width:f,height:m},h=Math.max(h,f),u+=m+o}),c+=h,r.push({width:h,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:i},rtl:n}}=this,a=Ua(n,this.left,this.width);if(this.isHorizontal()){let n=0,o=Ii(s,this.left+i,this.right-this.lineWidths[n]);for(const l of e)n!==l.row&&(n=l.row,o=Ii(s,this.left+i,this.right-this.lineWidths[n])),l.top+=this.top+t+i,l.left=a.leftForLtr(a.x(o),l.width),o+=l.width+i}else{let n=0,o=Ii(s,this.top+t+i,this.bottom-this.columnSizes[n].height);for(const l of e)l.col!==n&&(n=l.col,o=Ii(s,this.top+t+i,this.bottom-this.columnSizes[n].height)),l.top=o,l.left+=this.left+i,l.left=a.leftForLtr(a.x(l.left),l.width),o+=l.height+i}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;xn(t,this),this._draw(),vn(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:s,ctx:i}=this,{align:n,labels:a}=t,o=cn.color,l=Ua(t.rtl,this.left,this.width),r=In(a.font),{padding:d}=a,c=r.size,h=c/2;let u;this.drawTitle(),i.textAlign=l.textAlign("left"),i.textBaseline="middle",i.lineWidth=.5,i.font=r.string;const{boxWidth:p,boxHeight:g,itemHeight:f}=vc(a,c),m=function(t,e,s){if(isNaN(p)||p<=0||isNaN(g)||g<0)return;i.save();const n=Ms(s.lineWidth,1);if(i.fillStyle=Ms(s.fillStyle,o),i.lineCap=Ms(s.lineCap,"butt"),i.lineDashOffset=Ms(s.lineDashOffset,0),i.lineJoin=Ms(s.lineJoin,"miter"),i.lineWidth=n,i.strokeStyle=Ms(s.strokeStyle,o),i.setLineDash(Ms(s.lineDash,[])),a.usePointStyle){const o={radius:g*Math.SQRT2/2,pointStyle:s.pointStyle,rotation:s.rotation,borderWidth:n},r=l.xPlus(t,p/2),d=e+h;bn(i,o,r,d,a.pointStyleWidth&&p)}else{const a=e+Math.max((c-g)/2,0),o=l.leftForLtr(t,p),r=Ln(s.borderRadius);i.beginPath(),Object.values(r).some(t=>0!==t)?Tn(i,{x:o,y:a,w:p,h:g,radius:r}):i.rect(o,a,p,g),i.fill(),0!==n&&i.stroke()}i.restore()},b=function(t,e,s){Fn(i,s.text,t,e+f/2,r,{strikethrough:s.hidden,textAlign:l.textAlign(s.textAlign)})},y=this.isHorizontal(),x=this._computeTitleHeight();u=y?{x:Ii(n,this.left+d,this.right-s[0]),y:this.top+d+x,line:0}:{x:this.left+d,y:Ii(n,this.top+x+d,this.bottom-e[0].height),line:0},Oa(this.ctx,t.textDirection);const v=f+d;this.legendItems.forEach((o,c)=>{i.strokeStyle=o.fontColor,i.fillStyle=o.fontColor;const g=i.measureText(o.text).width,f=l.textAlign(o.textAlign||(o.textAlign=a.textAlign)),_=p+h+g;let k=u.x,w=u.y;l.setWidth(this.width),y?c>0&&k+_+d>this.right&&(w=u.y+=v,u.line++,k=u.x=Ii(n,this.left+d,this.right-s[u.line])):c>0&&w+v>this.bottom&&(k=u.x=k+e[u.line].width+d,u.line++,w=u.y=Ii(n,this.top+x+d,this.bottom-e[u.line].height));const C=l.x(k);if(m(C,w,o),k=Ui(f,k+p+h,y?k+_:this.right,t.rtl),b(l.x(k),w,o),y)u.x+=_+d;else if("string"!==typeof o.text){const t=r.lineHeight;u.y+=Fc(o,t)+d}else u.y+=v}),Ra(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,s=In(e.font),i=En(e.padding);if(!e.display)return;const n=Ua(t.rtl,this.left,this.width),a=this.ctx,o=e.position,l=s.size/2,r=i.top+l;let d,c=this.left,h=this.width;if(this.isHorizontal())h=Math.max(...this.lineWidths),d=this.top+r,c=Ii(t.align,c,this.right-h);else{const e=this.columnSizes.reduce((t,e)=>Math.max(t,e.height),0);d=r+Ii(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=Ii(o,c,c+h);a.textAlign=n.textAlign(Ei(o)),a.textBaseline="middle",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,Fn(a,e.text,u,d,s)}_computeTitleHeight(){const t=this.options.title,e=In(t.font),s=En(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,i,n;if(wi(t,this.left,this.right)&&wi(e,this.top,this.bottom))for(n=this.legendHitBoxes,s=0;st.length>e.length?t:e)),e+s.size/2+i.measureText(n).width}function Sc(t,e,s){let i=t;return"string"!==typeof e.text&&(i=Fc(e,s)),i}function Fc(t,e){const s=t.text?t.text.length:0;return e*s}function Tc(t,e){return!("mousemove"!==t&&"mouseout"!==t||!e.onHover&&!e.onLeave)||!(!e.onClick||"click"!==t&&"mouseup"!==t)}var Pc={id:"legend",_element:kc,start(t,e,s){const i=t.legend=new kc({ctx:t.ctx,options:s,chart:t});Pl.configure(t,i,s),Pl.addBox(t,i)},stop(t){Pl.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,s){const i=t.legend;Pl.configure(t,i,s),i.options=s},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,s){const i=e.datasetIndex,n=s.chart;n.isDatasetVisible(i)?(n.hide(i),e.hidden=!0):(n.show(i),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:s,pointStyle:i,textAlign:n,color:a,useBorderRadius:o,borderRadius:l}}=t.legend.options;return t._getSortedDatasetMetas().map(t=>{const r=t.controller.getStyle(s?0:void 0),d=En(r.borderWidth);return{text:e[t.index].label,fillStyle:r.backgroundColor,fontColor:a,hidden:!t.visible,lineCap:r.borderCapStyle,lineDash:r.borderDash,lineDashOffset:r.borderDashOffset,lineJoin:r.borderJoinStyle,lineWidth:(d.width+d.height)/4,strokeStyle:r.borderColor,pointStyle:i||r.pointStyle,rotation:r.rotation,textAlign:n||r.textAlign,borderRadius:o&&(l||r.borderRadius),datasetIndex:t.index}},this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};new WeakMap;const Mc={average(t){if(!t.length)return!1;let e,s,i=new Set,n=0,a=0;for(e=0,s=t.length;et+e)/i.size;return{x:o,y:n/a}},nearest(t,e){if(!t.length)return!1;let s,i,n,a=e.x,o=e.y,l=Number.POSITIVE_INFINITY;for(s=0,i=t.length;s-1?t.split("\n"):t}function $c(t,e){const{element:s,datasetIndex:i,index:n}=e,a=t.getDatasetMeta(i).controller,{label:o,value:l}=a.getLabelAndValue(n);return{chart:t,label:o,parsed:a.getParsed(n),raw:t.data.datasets[i].data[n],formattedValue:l,dataset:a.getDataset(),dataIndex:n,datasetIndex:i,element:s}}function Vc(t,e){const s=t.chart.ctx,{body:i,footer:n,title:a}=t,{boxWidth:o,boxHeight:l}=e,r=In(e.bodyFont),d=In(e.titleFont),c=In(e.footerFont),h=a.length,u=n.length,p=i.length,g=En(e.padding);let f=g.height,m=0,b=i.reduce((t,e)=>t+e.before.length+e.lines.length+e.after.length,0);if(b+=t.beforeBody.length+t.afterBody.length,h&&(f+=h*d.lineHeight+(h-1)*e.titleSpacing+e.titleMarginBottom),b){const t=e.displayColors?Math.max(l,r.lineHeight):r.lineHeight;f+=p*t+(b-p)*r.lineHeight+(b-1)*e.bodySpacing}u&&(f+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let y=0;const x=function(t){m=Math.max(m,s.measureText(t).width+y)};return s.save(),s.font=d.string,Vs(t.title,x),s.font=r.string,Vs(t.beforeBody.concat(t.afterBody),x),y=e.displayColors?o+2+e.boxPadding:0,Vs(i,t=>{Vs(t.before,x),Vs(t.lines,x),Vs(t.after,x)}),y=0,s.font=c.string,Vs(t.footer,x),s.restore(),m+=g.width,{width:m,height:f}}function Lc(t,e){const{y:s,height:i}=e;return st.height-i/2?"bottom":"center"}function Ec(t,e,s,i){const{x:n,width:a}=i,o=s.caretSize+s.caretPadding;return"left"===t&&n+a+o>e.width||("right"===t&&n-a-o<0||void 0)}function Ic(t,e,s,i){const{x:n,width:a}=s,{width:o,chartArea:{left:l,right:r}}=t;let d="center";return"center"===i?d=n<=(l+r)/2?"left":"right":n<=a/2?d="left":n>=o-a/2&&(d="right"),Ec(d,t,e,s)&&(d="center"),d}function Uc(t,e,s){const i=s.yAlign||e.yAlign||Lc(t,s);return{xAlign:s.xAlign||e.xAlign||Ic(t,e,s,i),yAlign:i}}function Oc(t,e){let{x:s,width:i}=t;return"right"===e?s-=i:"center"===e&&(s-=i/2),s}function Rc(t,e,s){let{y:i,height:n}=t;return"top"===e?i+=s:i-="bottom"===e?n+s:n/2,i}function Wc(t,e,s,i){const{caretSize:n,caretPadding:a,cornerRadius:o}=t,{xAlign:l,yAlign:r}=s,d=n+a,{topLeft:c,topRight:h,bottomLeft:u,bottomRight:p}=Ln(o);let g=Oc(e,l);const f=Rc(e,r,d);return"center"===r?"left"===l?g+=d:"right"===l&&(g-=d):"left"===l?g-=Math.max(c,u)+n:"right"===l&&(g+=Math.max(h,p)+n),{x:_i(g,0,i.width-e.width),y:_i(f,0,i.height-e.height)}}function Bc(t,e,s){const i=En(s.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-i.right:t.x+i.left}function Nc(t){return Dc([],Ac(t))}function zc(t,e,s){return Rn(t,{tooltip:e,tooltipItems:s,type:"tooltip"})}function jc(t,e){const s=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return s?t.override(s):t}const qc={beforeTitle:ks,title(t){if(t.length>0){const e=t[0],s=e.chart.data.labels,i=s?s.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(i>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=jc(s,t);Dc(e.before,Ac(Hc(n,"beforeLabel",this,t))),Dc(e.lines,Hc(n,"label",this,t)),Dc(e.after,Ac(Hc(n,"afterLabel",this,t))),i.push(e)}),i}getAfterBody(t,e){return Nc(Hc(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:s}=e,i=Hc(s,"beforeFooter",this,t),n=Hc(s,"footer",this,t),a=Hc(s,"afterFooter",this,t);let o=[];return o=Dc(o,Ac(i)),o=Dc(o,Ac(n)),o=Dc(o,Ac(a)),o}_createItems(t){const e=this._active,s=this.chart.data,i=[],n=[],a=[];let o,l,r=[];for(o=0,l=e.length;ot.filter(e,i,n,s))),t.itemSort&&(r=r.sort((e,i)=>t.itemSort(e,i,s))),Vs(r,e=>{const s=jc(t.callbacks,e);i.push(Hc(s,"labelColor",this,e)),n.push(Hc(s,"labelPointStyle",this,e)),a.push(Hc(s,"labelTextColor",this,e))}),this.labelColors=i,this.labelPointStyles=n,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){const s=this.options.setContext(this.getContext()),i=this._active;let n,a=[];if(i.length){const t=Mc[s.position].call(this,i,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const e=this._size=Vc(this,s),o=Object.assign({},t,e),l=Uc(this.chart,s,o),r=Wc(s,o,l,this.chart);this.xAlign=l.xAlign,this.yAlign=l.yAlign,n={opacity:1,x:r.x,y:r.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=a,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,i){const n=this.getCaretPosition(t,s,i);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,s){const{xAlign:i,yAlign:n}=this,{caretSize:a,cornerRadius:o}=s,{topLeft:l,topRight:r,bottomLeft:d,bottomRight:c}=Ln(o),{x:h,y:u}=t,{width:p,height:g}=e;let f,m,b,y,x,v;return"center"===n?(x=u+g/2,"left"===i?(f=h,m=f-a,y=x+a,v=x-a):(f=h+p,m=f+a,y=x-a,v=x+a),b=f):(m="left"===i?h+Math.max(l,d)+a:"right"===i?h+p-Math.max(r,c)-a:this.caretX,"top"===n?(y=u,x=y-a,f=m-a,b=m+a):(y=u+g,x=y+a,f=m+a,b=m-a),v=y),{x1:f,x2:m,x3:b,y1:y,y2:x,y3:v}}drawTitle(t,e,s){const i=this.title,n=i.length;let a,o,l;if(n){const r=Ua(s.rtl,this.x,this.width);for(t.x=Bc(this,s.titleAlign,s),e.textAlign=r.textAlign(s.titleAlign),e.textBaseline="middle",a=In(s.titleFont),o=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;l0!==t)?(t.beginPath(),t.fillStyle=n.multiKeyBackground,Tn(t,{x:e,y:p,w:r,h:l,radius:o}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),Tn(t,{x:s,y:p+1,w:r-2,h:l-2,radius:o}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,p,r,l),t.strokeRect(e,p,r,l),t.fillStyle=a.backgroundColor,t.fillRect(s,p+1,r-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){const{body:i}=this,{bodySpacing:n,bodyAlign:a,displayColors:o,boxHeight:l,boxWidth:r,boxPadding:d}=s,c=In(s.bodyFont);let h=c.lineHeight,u=0;const p=Ua(s.rtl,this.x,this.width),g=function(s){e.fillText(s,p.x(t.x+u),t.y+h/2),t.y+=h+n},f=p.textAlign(a);let m,b,y,x,v,_,k;for(e.textAlign=a,e.textBaseline="middle",e.font=c.string,t.x=Bc(this,f,s),e.fillStyle=s.bodyColor,Vs(this.beforeBody,g),u=o&&"right"!==f?"center"===a?r/2+d:r+2+d:0,x=0,_=i.length;x<_;++x){for(m=i[x],b=this.labelTextColors[x],e.fillStyle=b,Vs(m.before,g),y=m.lines,o&&y.length&&(this._drawColorBox(e,t,x,p,s),h=Math.max(c.lineHeight,l)),v=0,k=y.length;v0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,s=this.$animations,i=s&&s.x,n=s&&s.y;if(i||n){const s=Mc[t.position].call(this,this._active,this._eventPosition);if(!s)return;const a=this._size=Vc(this,t),o=Object.assign({},s,this._size),l=Uc(e,t,o),r=Wc(t,o,l,e);i._to===r.x&&n._to===r.y||(this.xAlign=l.xAlign,this.yAlign=l.yAlign,this.width=a.width,this.height=a.height,this.caretX=s.x,this.caretY=s.y,this._resolveAnimations().update(this,r))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(e);const i={width:this.width,height:this.height},n={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=En(e.padding),o=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&o&&(t.save(),t.globalAlpha=s,this.drawBackground(n,t,i,e),Oa(t,e.textDirection),n.y+=a.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Ra(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const s=this._active,i=t.map(({datasetIndex:t,index:e})=>{const s=this.chart.getDatasetMeta(t);if(!s)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:s.data[e],index:e}}),n=!Ls(s,i),a=this._positionChanged(i,e);(n||a)&&(this._active=i,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const i=this.options,n=this._active||[],a=this._getActiveElements(t,n,e,s),o=this._positionChanged(a,t),l=e||!Ls(a,n)||o;return l&&(this._active=a,(i.enabled||i.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,i){const n=this.options;if("mouseout"===t.type)return[];if(!i)return e.filter(t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index));const a=this.chart.getElementsAtEventForMode(t,n.mode,n,s);return n.reverse&&a.reverse(),a}_positionChanged(t,e){const{caretX:s,caretY:i,options:n}=this,a=Mc[n.position].call(this,t,e);return!1!==a&&(s!==a.x||i!==a.y)}}(0,De.A)(Xc,"positioners",Mc);var Kc={id:"tooltip",_element:Xc,positioners:Mc,afterInit(t,e,s){s&&(t.tooltip=new Xc({chart:t,options:s}))},beforeUpdate(t,e,s){t.tooltip&&t.tooltip.initialize(s)},reset(t,e,s){t.tooltip&&t.tooltip.initialize(s)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const s={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...s,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",s)}},afterEvent(t,e){if(t.tooltip){const s=e.replay;t.tooltip.handleEvent(e.event,s,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:qc},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};const Qc=(t,e,s,i)=>("string"===typeof e?(s=t.push(e)-1,i.unshift({index:s,label:e})):isNaN(e)&&(s=null),s);function Yc(t,e,s,i){const n=t.indexOf(e);if(-1===n)return Qc(t,e,s,i);const a=t.lastIndexOf(e);return n!==a?s:n}const Gc=(t,e)=>null===t?null:_i(Math.round(t),0,e);function Jc(t){const e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function th(t,e){const s=[],i=1e-14,{bounds:n,step:a,min:o,max:l,precision:r,count:d,maxTicks:c,maxDigits:h,includeBounds:u}=t,p=a||1,g=c-1,{min:f,max:m}=e,b=!Cs(o),y=!Cs(l),x=!Cs(d),v=(m-f)/(h+1);let _,k,w,C,S=li((m-f)/g/p)*p;if(Sg&&(S=li(C*S/g/p)*p),Cs(r)||(_=Math.pow(10,r),S=Math.ceil(S*_)/_),"ticks"===n?(k=Math.floor(f/S)*S,w=Math.ceil(m/S)*S):(k=f,w=m),b&&y&&a&&hi((l-o)/a,S/1e3)?(C=Math.round(Math.min((l-o)/S,c)),S=(l-o)/C,k=o,w=l):x?(k=b?o:k,w=y?l:w,C=d-1,S=(w-k)/C):(C=(w-k)/S,C=oi(C,Math.round(C),S/1e3)?Math.round(C):Math.ceil(C));const F=Math.max(fi(S),fi(k));_=Math.pow(10,Cs(r)?F:r),k=Math.round(k*_)/_,w=Math.round(w*_)/_;let T=0;for(b&&(u&&k!==o?(s.push({value:o}),kl)break;s.push({value:t})}return y&&u&&w!==l?s.length&&oi(s[s.length-1].value,l,eh(l,v,t))?s[s.length-1].value=l:s.push({value:l}):y&&w!==l||s.push({value:w}),s}function eh(t,e,{horizontal:s,minRotation:i}){const n=pi(i),a=(s?Math.sin(n):Math.cos(n))||.001,o=.75*e*(""+t).length;return Math.min(e/a,o)}(0,De.A)(Zc,"id","category"),(0,De.A)(Zc,"defaults",{ticks:{callback:Jc}});class sh extends yr{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return Cs(t)||("number"===typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds();let{min:i,max:n}=this;const a=t=>i=e?i:t,o=t=>n=s?n:t;if(t){const t=ai(i),e=ai(n);t<0&&e<0?o(0):t>0&&e>0&&a(0)}if(i===n){let e=0===n?1:Math.abs(.05*n);o(n+e),t||a(i-e)}this.min=i,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:s,stepSize:i}=t;return i?(e=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),s=s||11),s&&(e=Math.min(s,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const i={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},n=this._range||this,a=th(i,n);return"ticks"===t.bounds&&ui(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const t=this.ticks;let e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){const i=(s-e)/Math.max(t.length-1,1)/2;e-=i,s+=i}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return Zi(t,this.chart.options.locale,this.options.ticks.format)}}class ih extends sh{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=Ts(t)?t:0,this.max=Ts(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,s=pi(this.options.ticks.minRotation),i=(t?Math.sin(s):Math.cos(s))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/i))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}(0,De.A)(ih,"id","linear"),(0,De.A)(ih,"defaults",{ticks:{callback:sn.formatters.numeric}});const nh=t=>Math.floor(ni(t)),ah=(t,e)=>Math.pow(10,nh(t)+e);function oh(t){const e=t/Math.pow(10,nh(t));return 1===e}function lh(t,e,s){const i=Math.pow(10,s),n=Math.floor(t/i),a=Math.ceil(e/i);return a-n}function rh(t,e){const s=e-t;let i=nh(s);while(lh(t,e,i)>10)i++;while(lh(t,e,i)<10)i--;return Math.min(i,nh(t))}function dh(t,{min:e,max:s}){e=Ps(t.min,e);const i=[],n=nh(e);let a=rh(e,s),o=a<0?Math.pow(10,Math.abs(a)):1;const l=Math.pow(10,a),r=n>a?Math.pow(10,n):0,d=Math.round((e-r)*o)/o,c=Math.floor((e-r)/l/10)*l*10;let h=Math.floor((d-c)/Math.pow(10,a)),u=Ps(t.min,Math.round((r+c+h*Math.pow(10,a))*o)/o);while(u=10?h=h<15?15:20:h++,h>=20&&(a++,h=2,o=a>=0?1:o),u=Math.round((r+c+h*Math.pow(10,a))*o)/o;const p=Ps(t.max,u);return i.push({value:p,major:oh(p),significand:h}),i}class ch extends yr{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const s=sh.prototype.parse.apply(this,[t,e]);if(0!==s)return Ts(s)&&s>0?s:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=Ts(t)?Math.max(0,t):null,this.max=Ts(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Ts(this._userMin)&&(this.min=t===ah(this.min,0)?ah(this.min,-1):ah(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let s=this.min,i=this.max;const n=e=>s=t?s:e,a=t=>i=e?i:t;s===i&&(s<=0?(n(1),a(10)):(n(ah(s,-1)),a(ah(i,1)))),s<=0&&n(ah(i,-1)),i<=0&&a(ah(s,1)),this.min=s,this.max=i}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},s=dh(e,this);return"ticks"===t.bounds&&ui(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return void 0===t?"0":Zi(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=ni(t),this._valueRange=ni(this.max)-ni(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(ni(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function hh(t){const e=t.ticks;if(e.display&&t.display){const t=En(e.backdropPadding);return Ms(e.font&&e.font.size,cn.font.size)+t.height}return 0}function uh(t,e,s){return s=Ss(s)?s:[s],{w:pn(t,e.string,s),h:s.length*e.lineHeight}}function ph(t,e,s,i,n){return t===i||t===n?{start:e-s/2,end:e+s/2}:tn?{start:e-s,end:e}:{start:e,end:e+s}}function gh(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},s=Object.assign({},e),i=[],n=[],a=t._pointLabels.length,o=t.options.pointLabels,l=o.centerPointLabels?Ys/a:0;for(let r=0;re.r&&(l=(i.end-e.r)/a,t.r=Math.max(t.r,e.r+l)),n.starte.b&&(r=(n.end-e.b)/o,t.b=Math.max(t.b,e.b+r))}function mh(t,e,s){const i=t.drawingArea,{extra:n,additionalAngle:a,padding:o,size:l}=s,r=t.getPointPosition(e,i+n+o,a),d=Math.round(gi(xi(r.angle+ei))),c=_h(r.y,l.h,d),h=xh(d),u=vh(r.x,l.w,h);return{visible:!0,x:r.x,y:c,textAlign:h,left:u,top:c,right:u+l.w,bottom:c+l.h}}function bh(t,e){if(!e)return!0;const{left:s,top:i,right:n,bottom:a}=t,o=yn({x:s,y:i},e)||yn({x:s,y:a},e)||yn({x:n,y:i},e)||yn({x:n,y:a},e);return!o}function yh(t,e,s){const i=[],n=t._pointLabels.length,a=t.options,{centerPointLabels:o,display:l}=a.pointLabels,r={extra:hh(a)/2,additionalAngle:o?Ys/n:0};let d;for(let c=0;c270||s<90)&&(t-=e),t}function kh(t,e,s){const{left:i,top:n,right:a,bottom:o}=s,{backdropColor:l}=e;if(!Cs(l)){const s=Ln(e.borderRadius),r=En(e.backdropPadding);t.fillStyle=l;const d=i-r.left,c=n-r.top,h=a-i+r.width,u=o-n+r.height;Object.values(s).some(t=>0!==t)?(t.beginPath(),Tn(t,{x:d,y:c,w:h,h:u,radius:s}),t.fill()):t.fillRect(d,c,h,u)}}function wh(t,e){const{ctx:s,options:{pointLabels:i}}=t;for(let n=e-1;n>=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const a=i.setContext(t.getPointLabelContext(n));kh(s,a,e);const o=In(a.font),{x:l,y:r,textAlign:d}=e;Fn(s,t._pointLabels[n],l,r+o.lineHeight/2,o,{color:a.color,textAlign:d,textBaseline:"middle"})}}function Ch(t,e,s,i){const{ctx:n}=t;if(s)n.arc(t.xCenter,t.yCenter,e,0,Gs);else{let s=t.getPointPosition(0,e);n.moveTo(s.x,s.y);for(let a=1;a{const s=$s(this.options.pointLabels.callback,[t,e],this);return s||0===s?s:""}).filter((t,e)=>this.chart.getDataVisibility(e))}fit(){const t=this.options;t.display&&t.pointLabels.display?gh(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,i){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-i)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,i))}getIndexAngle(t){const e=Gs/(this._pointLabels.length||1),s=this.options.startAngle||0;return xi(t*e+pi(s))}getDistanceFromCenterForValue(t){if(Cs(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(Cs(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(0!==e||0===e&&this.min<0){l=this.getDistanceFromCenterForValue(t.value);const s=this.getContext(e),o=i.setContext(s),r=n.setContext(s);Sh(this,o,l,a,r)}}),s.display){for(t.save(),o=a-1;o>=0;o--){const i=s.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:a}=i;a&&n&&(t.lineWidth=a,t.strokeStyle=n,t.setLineDash(i.borderDash),t.lineDashOffset=i.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),r=this.getPointPosition(o,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(r.x,r.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;const i=this.getIndexAngle(0);let n,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(i),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((i,o)=>{if(0===o&&this.min>=0&&!e.reverse)return;const l=s.setContext(this.getContext(o)),r=In(l.font);if(n=this.getDistanceFromCenterForValue(this.ticks[o].value),l.showLabelBackdrop){t.font=r.string,a=t.measureText(i.label).width,t.fillStyle=l.backdropColor;const e=En(l.backdropPadding);t.fillRect(-a/2-e.left,-n-r.size/2-e.top,a+e.width,r.size+e.height)}Fn(t,i.label,0,-n,r,{color:l.color,strokeColor:l.textStrokeColor,strokeWidth:l.textStrokeWidth})}),t.restore()}drawTitle(){}}(0,De.A)(Th,"id","radialLinear"),(0,De.A)(Th,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:sn.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),(0,De.A)(Th,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),(0,De.A)(Th,"descriptors",{angleLines:{_fallback:"grid"}});const Ph={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Mh=Object.keys(Ph);function Dh(t,e){return t-e}function Ah(t,e){if(Cs(e))return null;const s=t._adapter,{parser:i,round:n,isoWeekday:a}=t._parseOpts;let o=e;return"function"===typeof i&&(o=i(o)),Ts(o)||(o="string"===typeof i?s.parse(o,i):s.parse(o)),null===o?null:(n&&(o="week"!==n||!ci(a)&&!0!==a?s.startOf(o,n):s.startOf(o,"isoWeek",a)),+o)}function $h(t,e,s,i){const n=Mh.length;for(let a=Mh.indexOf(t);a=Mh.indexOf(s);a--){const s=Mh[a];if(Ph[s].common&&t._adapter.diff(n,i,s)>=e-1)return s}return Mh[s?Mh.indexOf(s):0]}function Lh(t){for(let e=Mh.indexOf(t)+1,s=Mh.length;e=e?s[i]:s[n];t[a]=!0}}else t[e]=!0}function Ih(t,e,s,i){const n=t._adapter,a=+n.startOf(e[0].value,i),o=e[e.length-1].value;let l,r;for(l=a;l<=o;l=+n.add(l,1,i))r=s[l],r>=0&&(e[r].major=!0);return e}function Uh(t,e,s){const i=[],n={},a=e.length;let o,l;for(o=0;o+t.value))}initOffsets(t=[]){let e,s,i=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),i=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,s=this.getDecimalForValue(t[t.length-1]),n=1===t.length?s:(s-this.getDecimalForValue(t[t.length-2]))/2);const a=t.length<3?.5:.25;i=_i(i,0,a),n=_i(n,0,a),this._offsets={start:i,end:n,factor:1/(i+1+n)}}_generate(){const t=this._adapter,e=this.min,s=this.max,i=this.options,n=i.time,a=n.unit||$h(n.minUnit,e,s,this._getLabelCapacity(e)),o=Ms(i.ticks.stepSize,1),l="week"===a&&n.isoWeekday,r=ci(l)||!0===l,d={};let c,h,u=e;if(r&&(u=+t.startOf(u,"isoWeek",l)),u=+t.startOf(u,r?"day":a),t.diff(s,e,a)>1e5*o)throw new Error(e+" and "+s+" are too far apart with stepSize of "+o+" "+a);const p="data"===i.ticks.source&&this.getDataTimestamps();for(c=u,h=0;c+t)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){const s=this.options,i=s.time.displayFormats,n=this._unit,a=e||i[n];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,i){const n=this.options,a=n.ticks.callback;if(a)return $s(a,[t,e,s],this);const o=n.time.displayFormats,l=this._unit,r=this._majorUnit,d=l&&o[l],c=r&&o[r],h=s[e],u=r&&c&&h&&h.major;return this._adapter.format(t,i||(u?c:d))}generateTickLabels(t){let e,s,i;for(e=0,s=t.length;e0?o:1}getDataTimestamps(){let t,e,s=this._cache.data||[];if(s.length)return s;const i=this.getMatchingVisibleMetas();if(this._normalized&&i.length)return this._cache.data=i[0].controller.getAllParsedValues(this);for(t=0,e=i.length;t=t[l].pos&&e<=t[r].pos&&({lo:l,hi:r}=Si(t,"pos",e)),({pos:i,time:a}=t[l]),({pos:n,time:o}=t[r])):(e>=t[l].time&&e<=t[r].time&&({lo:l,hi:r}=Si(t,"time",e)),({time:i,pos:a}=t[l]),({time:n,pos:o}=t[r]));const d=n-i;return d?a+(o-a)*(e-i)/d:a}(0,De.A)(Oh,"id","time"),(0,De.A)(Oh,"defaults",{bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}});class Wh extends Oh{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Rh(e,this.min),this._tableRange=Rh(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,i=[],n=[];let a,o,l,r,d;for(a=0,o=t.length;a=e&&r<=s&&i.push(r);if(i.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,o=i.length;at-e)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),s=this.getLabelTimestamps();return t=e.length&&s.length?this.normalize(e.concat(s)):e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(Rh(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return Rh(this._table,s*this._tableRange+this._minPos,!0)}}(0,De.A)(Wh,"id","timeseries"),(0,De.A)(Wh,"defaults",Oh.defaults);var Bh=s(90144);const Nh={data:{type:Object,required:!0},options:{type:Object,default:()=>({})},plugins:{type:Array,default:()=>[]},datasetIdKey:{type:String,default:"label"},updateMode:{type:String,default:void 0}},zh={ariaLabel:{type:String},ariaDescribedby:{type:String}},jh={type:{type:String,required:!0},destroyDelay:{type:Number,default:0},...Nh,...zh},qh="2"===i.rE[0]?(t,e)=>Object.assign(t,{attrs:e}):(t,e)=>Object.assign(t,e);function Hh(t){return(0,Bh.ju)(t)?(0,Bh.ux)(t):t}function Xh(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t;return(0,Bh.ju)(e)?new Proxy(t,{}):t}function Kh(t,e){const s=t.options;s&&e&&Object.assign(s,e)}function Qh(t,e){t.labels=e}function Yh(t,e,s){const i=[];t.datasets=e.map(e=>{const n=t.datasets.find(t=>t[s]===e[s]);return n&&e.data&&!i.includes(n)?(i.push(n),Object.assign(n,e),n):{...e}})}function Gh(t,e){const s={labels:[],datasets:[]};return Qh(s,t.labels),Yh(s,t.datasets,e),s}const Jh=(0,i.pM)({props:jh,setup(t,e){let{expose:s,slots:n}=e;const a=(0,Bh.KR)(null),o=(0,Bh.IJ)(null);s({chart:o});const l=()=>{if(!a.value)return;const{type:e,data:s,options:i,plugins:n,datasetIdKey:l}=t,r=Gh(s,l),d=Xh(r,s);o.value=new ld(a.value,{type:e,data:d,options:{...i},plugins:n})},r=()=>{const e=(0,Bh.ux)(o.value);e&&(t.destroyDelay>0?setTimeout(()=>{e.destroy(),o.value=null},t.destroyDelay):(e.destroy(),o.value=null))},d=e=>{e.update(t.updateMode)};return(0,i.sV)(l),(0,i.hi)(r),(0,i.wB)([()=>t.options,()=>t.data],(e,s)=>{let[n,a]=e,[l,r]=s;const c=(0,Bh.ux)(o.value);if(!c)return;let h=!1;if(n){const t=Hh(n),e=Hh(l);t&&t!==e&&(Kh(c,t),h=!0)}if(a){const e=Hh(a.labels),s=Hh(r.labels),i=Hh(a.datasets),n=Hh(r.datasets);e!==s&&(Qh(c.config.data,e),h=!0),i&&i!==n&&(Yh(c.config.data,i,t.datasetIdKey),h=!0)}h&&(0,i.dY)(()=>{d(c)})},{deep:!0}),()=>(0,i.h)("canvas",{role:"img","aria-label":t.ariaLabel,"aria-describedby":t.ariaDescribedby,ref:a},[(0,i.h)("p",{},[n.default?n.default():""])])}});function Zh(t,e){return ld.register(e),(0,i.pM)({props:Nh,setup(e,s){let{expose:n}=s;const a=(0,Bh.IJ)(null),o=t=>{a.value=t?.chart};return n({chart:a}),()=>(0,i.h)(Jh,qh({ref:o},{type:t,...e}))}})}const tu=Zh("doughnut",Ko),eu=Zh("line",Qo);s(16573),s(78100),s(77936),s(79577),s(41549),s(49797),s(49631),s(35623);class su extends Error{constructor(t,e,s=!1,i=""){super(t),this.name="BatchOperationError",this.code=e,this.recoverable=s,this.suggestion=i}}const iu={401:()=>new su("认证失败,请重新登录","AUTH_FAILED",!1,"请刷新页面并重新登录"),403:()=>new su("权限不足或请求被拒绝","FORBIDDEN",!1,"请确认您有管理员权限"),400:t=>new su(`请求数据无效: ${t}`,"INVALID_DATA",!0,"请检查数据格式后重试"),500:()=>new su("服务器内部错误","SERVER_ERROR",!0,"请稍后重试,如果问题持续请联系管理员"),NETWORK:()=>new su("网络连接失败","NETWORK_ERROR",!0,"请检查网络连接后重试"),ABORT:()=>new su("操作已取消","ABORTED",!1,"")};function nu(t,e=""){if("AbortError"===t.name)return iu.ABORT();if(t instanceof Response||t&&"number"===typeof t.status){const s=iu[t.status];return s?s(e):new su(`请求失败: ${t.status}`,"HTTP_ERROR",!0,"请稍后重试")}return t instanceof TypeError&&t.message.includes("fetch")?iu.NETWORK():new su(t.message||"未知错误","UNKNOWN_ERROR",!0,"请稍后重试")}class au{constructor(t={}){this.batchSize=t.batchSize||1e3,this.onProgress=t.onProgress||(()=>{}),this.onError=t.onError||(()=>{}),this.abortController=null}async fetchAllRecords(t=!1){this.abortController=new AbortController;const e=[];let s=null,i=0,n=0;try{do{if(this.abortController.signal.aborted)break;const a=await this.fetchBatch(s,t);e.push(...a.records),s=a.nextCursor,i+=a.records.length,n++,this.onProgress({phase:"fetching",current:i,batchCount:n,message:`已获取 ${i} 条记录...`})}while(s&&!this.abortController.signal.aborted);if(this.abortController.signal.aborted)throw iu.ABORT();return e}catch(a){const t=a instanceof su?a:nu(a);throw this.onError(t),t}}async fetchBatch(t,e){const s=new URLSearchParams;t&&s.set("cursor",t),e&&s.set("includeValue","true"),s.set("limit",String(this.batchSize));try{const t=await(0,Pe.A)(`/api/manage/batch/list?${s}`,{signal:this.abortController.signal});if(!t.ok){let e="";try{const s=await t.json();e=s.error||""}catch{}throw nu(t,e)}const e=await t.json();if(!e.success)throw new su(e.error||"请求失败","API_ERROR",!0,"请稍后重试");return{records:e.records||[],nextCursor:e.nextCursor||null,totalProcessed:e.totalProcessed||0}}catch(i){if(i instanceof su)throw i;throw nu(i)}}abort(){this.abortController&&this.abortController.abort()}isAborted(){return!!this.abortController&&this.abortController.signal.aborted}reset(){this.abortController=null}}var ou=au;class lu{constructor(t={}){this.chunkSize=t.chunkSize||null,this.maxRetries=t.maxRetries||3,this.retryDelay=t.retryDelay||1e3,this.onProgress=t.onProgress||(()=>{}),this.onError=t.onError||(()=>{}),this.sessionId=this.generateSessionId(),this.aborted=!1}async fetchConfig(){try{const t=await(0,Pe.A)("/api/manage/batch/index/config");if(!t.ok)throw new Error("获取配置失败");const e=await t.json();if(e.success)return{chunkSize:e.chunkSize||500,databaseType:e.databaseType||"unknown"};throw new Error(e.error||"获取配置失败")}catch(t){return console.warn("Failed to fetch index config, using default:",t),{chunkSize:500,databaseType:"unknown"}}}async rebuild(){this.aborted=!1;try{if(!this.chunkSize){const t=await this.fetchConfig();this.chunkSize=t.chunkSize}this.onProgress({phase:"fetching",message:"正在获取数据...",current:0});const t=new ou({onProgress:t=>this.onProgress({...t,phase:"fetching"}),onError:t=>this.onError(t)}),e=await t.fetchAllRecords(!1);if(this.aborted)throw new su("操作已取消","ABORTED",!1,"");if(this.onProgress({phase:"sorting",message:"正在排序...",current:0,total:e.length}),this.sortByTimestampDescending(e),this.aborted)throw new su("操作已取消","ABORTED",!1,"");const s=this.splitIntoChunks(e);for(let i=0;i{const s=t.metadata&&t.metadata.TimeStamp||0,i=e.metadata&&e.metadata.TimeStamp||0;return i-s})}splitIntoChunks(t){const e=[];for(let s=0;st.toString(16).padStart(2,"0")).join("")}let n=2166136261,a=2166136261;for(let o=0;o>>0,a=Math.imul(a^i[o],16777635)>>>0;return n.toString(16).padStart(8,"0")+a.toString(16).padStart(8,"0")}createHttpError(t,e=""){switch(t){case 401:return new su("认证失败,请重新登录","AUTH_FAILED",!1,"请刷新页面并重新登录");case 403:return new su("权限不足或请求被拒绝","FORBIDDEN",!1,"请确认您有管理员权限");case 400:return new su(`请求数据无效: ${e}`,"INVALID_DATA",!0,"请检查数据格式后重试");case 404:return new su("会话不存在","SESSION_NOT_FOUND",!1,"请重新开始索引重建");case 410:return new su("会话已过期","SESSION_EXPIRED",!1,"请重新开始索引重建");case 500:default:return new su(`服务器错误: ${e||t}`,"SERVER_ERROR",!0,"请稍后重试")}}sleep(t){return new Promise(e=>setTimeout(e,t))}abort(){this.aborted=!0}reset(){this.aborted=!1,this.sessionId=this.generateSessionId()}}var ru=lu;class du{constructor(t={}){this.onProgress=t.onProgress||(()=>{}),this.processor=null}async generateBackup(){this.processor=new ou({onProgress:t=>this.onProgress({...t,phase:"fetching"})});const t=await this.processor.fetchAllRecords(!0);this.onProgress({phase:"building",message:"正在构建备份数据..."});const e={timestamp:Date.now(),version:Me.rE,data:{fileCount:t.length,files:{},settings:{}}};for(const n of t)e.data.files[n.id]={metadata:n.metadata,value:n.value||null};const s=await this.fetchSettings();e.data.settings=s,this.onProgress({phase:"downloading",message:"正在生成下载..."}),this.downloadBackup(e);const i=Object.keys(s).length;return{success:!0,fileCount:t.length,settingsCount:i}}async fetchSettings(){try{const t=await(0,Pe.A)("/api/manage/batch/settings");if(!t.ok)return console.warn("Failed to fetch settings:",t.status),{};const e=await t.json();return e.settings||{}}catch(t){return console.warn("Failed to fetch settings:",t),{}}}downloadBackup(t){const e=JSON.stringify(t,null,2),s=new Blob([e],{type:"application/json"}),i=URL.createObjectURL(s),n=document.createElement("a");n.href=i,n.download=`imgbed_backup_${(new Date).toISOString().split("T")[0]}.json`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(i)}abort(){this.processor&&this.processor.abort()}isAborted(){return!!this.processor&&this.processor.isAborted()}}var cu=du;class hu{constructor(t={}){this.chunkSize=t.chunkSize||50,this.maxRetries=t.maxRetries||3,this.retryDelay=t.retryDelay||1e3,this.onProgress=t.onProgress||(()=>{}),this.onError=t.onError||(()=>{}),this.aborted=!1}async restore(t){if(this.aborted=!1,!t||!t.data)throw new su("备份文件格式无效","INVALID_BACKUP",!1,"请选择有效的备份文件");const{files:e={},settings:s={}}=t.data,i=Object.entries(e),n=Object.entries(s),a=i.length,o=n.length,l=a+o;let r=0,d=0,c=0,h=0;try{this.onProgress({phase:"restoring_files",message:"正在恢复文件数据...",current:0,total:l});const e=this.splitIntoChunks(i,this.chunkSize);for(let t=0;tsetTimeout(e,t))}abort(){this.aborted=!0}}var uu=hu;ld.register(bd,Kc,Pc,Zc,ih,$d,Dd,xc);const pu=864e5;function gu(t){return String(t).padStart(2,"0")}function fu(t){return`${t.getFullYear()}-${gu(t.getMonth()+1)}-${gu(t.getDate())}`}function mu(){const t=new Date;t.setHours(0,0,0,0);const e=new Date(t.getTime()-6*pu);return[fu(e),fu(t)]}var bu={name:"SysCogStatus",components:{Doughnut:tu,Line:eu,DateRangeCalendar:H},data(){return{loading:!1,rebuilding:!1,backing:!1,restoring:!1,indexInfo:{},version:Me.rE,loadErrors:{newest:!1,oldest:!1},trendGroupBy:"channel",trendDatePickerVisible:!1,trendDateRange:mu(),channelColors:["#8B5CF6","#EC4899","#06B6D4","#10B981","#F59E0B","#EF4444","#6366F1","#84CC16"],typeColors:["#10B981","#3B82F6","#F59E0B","#EF4444","#8B5CF6","#EC4899","#06B6D4","#84CC16"],trendColors:["#2563EB","#10B981","#F59E0B","#EF4444","#8B5CF6","#06B6D4","#EC4899","#84CC16","#64748B"],isProcessing:!1,processingPhase:"",processingProgress:{current:0,total:0,message:"",percentage:0},processingError:null,processingStartTime:null,currentRebuilder:null,currentBackupGenerator:null,currentRestoreProcessor:null}},computed:{channelChartData(){const t=this.indexInfo.channelStats||{};return{labels:Object.keys(t),datasets:[{data:Object.values(t),backgroundColor:this.channelColors.slice(0,Object.keys(t).length),borderWidth:0}]}},typeChartData(){const t=this.aggregatedTypeStats;return{labels:Object.keys(t),datasets:[{data:Object.values(t),backgroundColor:this.typeColors.slice(0,Object.keys(t).length),borderWidth:0}]}},aggregatedTypeStats(){const t=this.indexInfo.typeStats||{},e={};for(const[s,i]of Object.entries(t)){const t="Block"===s?this.$t("sysStatus.blocked"):this.$t("sysStatus.normalStatus");e[t]=(e[t]||0)+i}return e},currentTrendGroup(){const t=this.indexInfo.uploadTrend||{},e=t.groupBy||{};return e[this.trendGroupBy]||{series:[]}},trendRawLabels(){const t=this.indexInfo.uploadTrend||{};return t.labels||[]},trendRangeCrossesYear(){const t=new Set;return this.trendRawLabels.forEach(e=>{this.extractTrendLabelDates(e).forEach(e=>t.add(e.year))}),t.size>1},trendDisplayLabels(){return this.trendRawLabels.map(t=>this.formatTrendAxisLabel(t))},hasTrendData(){const t=this.indexInfo.uploadTrend||{};return(t.labels||[]).length>0},trendDateDialogWidth(){return window.innerWidth>768?"420px":"90%"},uploadTrendChartData(){const t=this.indexInfo.uploadTrend||{},e=this.currentTrendGroup.series||[],s="#F97316";return{labels:this.trendDisplayLabels,datasets:[{label:this.$t("sysStatus.totalUploads"),data:t.total||[],borderColor:s,backgroundColor:this.hexToRgba(s,.1),pointBackgroundColor:s,pointBorderColor:s,borderWidth:3,pointRadius:2,pointHoverRadius:5,tension:.28,fill:!1},...e.map((t,e)=>{const s=this.getTrendColor(e);return{label:this.formatTrendSeriesName(t),data:t.data||[],borderColor:s,backgroundColor:this.hexToRgba(s,.12),pointBackgroundColor:s,pointBorderColor:s,borderWidth:2,pointRadius:2,pointHoverRadius:5,tension:.32,fill:!1}})]}},lineChartOptions(){const t="#64748B";return{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!0,position:"bottom",labels:{usePointStyle:!0,boxWidth:8,boxHeight:8,padding:16,color:t}},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",titleColor:"#fff",bodyColor:"#fff",padding:12,cornerRadius:8,displayColors:!0,callbacks:{title:t=>{const e=t?.[0]?.dataIndex;return this.trendRawLabels[e]||""},label:t=>{const e=t.parsed||{},s=void 0!==e.y?e.y:t.raw;return` ${t.dataset.label}: ${Number(s||0).toLocaleString()} ${this.$t("sysStatus.uploadsUnit")}`}}}},scales:{x:{grid:{display:!1},ticks:{color:t,maxTicksLimit:8,autoSkip:!0}},y:{beginAtZero:!0,grid:{color:"rgba(148, 163, 184, 0.18)"},ticks:{color:t,precision:0,callback:t=>Number(t).toLocaleString()}}}}},chartOptions(){return{responsive:!0,maintainAspectRatio:!0,cutout:"65%",hoverOffset:8,layout:{padding:10},plugins:{legend:{display:!1},tooltip:{backgroundColor:"rgba(0, 0, 0, 0.8)",titleColor:"#fff",bodyColor:"#fff",padding:12,cornerRadius:8,displayColors:!0,z:100,callbacks:{label:t=>{const e=t.raw,s=t.dataset.data.reduce((t,e)=>t+e,0),i=(e/s*100).toFixed(1);return` ${e.toLocaleString()} (${i}%)`}}}},animation:{animateRotate:!0,animateScale:!0}}},estimatedTimeRemaining(){if(!this.isProcessing||!this.processingStartTime)return"";if(0===this.processingProgress.current||0===this.processingProgress.percentage)return"";const t=Date.now()-this.processingStartTime,e=this.processingProgress.percentage/100;if(e<=0)return"";const s=t/e,i=s-t;if(i<=0)return this.$t("sysStatus.aboutToComplete");const n=Math.ceil(i/1e3);if(n<60)return this.$t("sysStatus.seconds",{count:n});const a=Math.ceil(n/60);if(a<60)return this.$t("sysStatus.minutes",{count:a});const o=Math.floor(a/60),l=a%60;return this.$t("sysStatus.hoursMinutes",{hours:o,minutes:l})},phaseDescription(){const t={fetching:this.$t("sysStatus.phaseFetching"),sorting:this.$t("sysStatus.phaseSorting"),uploading:this.$t("sysStatus.phaseUploading"),finalizing:this.$t("sysStatus.phaseFinalizing"),building:this.$t("sysStatus.phaseBuilding"),downloading:this.$t("sysStatus.phaseDownloading"),restoring_files:this.$t("sysStatus.phaseRestoringFiles"),restoring_settings:this.$t("sysStatus.phaseRestoringSettings"),completed:this.$t("sysStatus.phaseCompleted"),retrying:this.$t("sysStatus.phaseRetrying")};return t[this.processingPhase]||this.processingPhase}},mounted(){this.fetchIndexInfo()},methods:{getChartColor(t){return this.channelColors[t%this.channelColors.length]},getTypeChartColor(t){return this.typeColors[t%this.typeColors.length]},getTrendColor(t){return this.trendColors[t%this.trendColors.length]},formatTrendSeriesName(t){return t?.isOther||"__other__"===t?.name?this.$t("sysStatus.otherChannels"):t?.name||this.$t("sysStatus.unknown")},hexToRgba(t,e){const s=(t||"").replace("#","");if(6!==s.length)return`rgba(37, 99, 235, ${e})`;const i=parseInt(s.slice(0,2),16),n=parseInt(s.slice(2,4),16),a=parseInt(s.slice(4,6),16);return`rgba(${i}, ${n}, ${a}, ${e})`},extractTrendLabelDates(t){const e=String(t||"").match(/\d{4}-\d{2}-\d{2}/g)||[];return e.map(t=>{const[e,s,i]=t.split("-").map(Number);return{year:e,month:s,day:i}})},formatTrendAxisLabel(t){const e=this.extractTrendLabelDates(t);if(0===e.length)return t;const s=(t,e)=>{const s=`${t.month}/${t.day}`;return e?`${t.year}/${s}`:s};if(1===e.length)return s(e[0],this.trendRangeCrossesYear);const[i,n]=e;if(!this.trendRangeCrossesYear)return`${s(i,!1)}-${s(n,!1)}`;const a=i.year===n.year?s(n,!1):s(n,!0);return`${s(i,!0)}-${a}`},openTrendDateDialog(){this.trendDatePickerVisible=!0},handleTrendDateRangeChange(t){Array.isArray(t)&&2===t.length&&t[0]&&t[1]&&(this.trendDatePickerVisible=!1,this.fetchIndexInfo())},getTrendDateRangeParams(){return Array.isArray(this.trendDateRange)&&2===this.trendDateRange.length||(this.trendDateRange=mu()),{startDate:this.trendDateRange[0],endDate:this.trendDateRange[1]}},async fetchIndexInfo(){this.loading=!0;try{const{startDate:t,endDate:e}=this.getTrendDateRangeParams(),s=new URLSearchParams({action:"info",timezoneOffset:String((new Date).getTimezoneOffset()),trendMaxPoints:"90",trendSeriesLimit:"8",trendStartDate:t,trendEndDate:e}),i=await(0,Pe.A)(`/api/manage/list?${s.toString()}`,{method:"GET"});if(!i.ok)throw new Error("API请求失败");{const t=await i.json();this.indexInfo=t}}catch(t){console.error("获取索引信息失败:",t),this.$message.error(this.$t("sysStatus.fetchIndexFailed"))}finally{this.loading=!1}},async rebuildIndex(){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.rebuilding=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0},this.currentRebuilder=new ru({onProgress:t=>this.handleProgress(t),onError:t=>this.handleError(t)});try{const t=await this.currentRebuilder.rebuild();this.$message.success(this.$t("sysStatus.rebuildSuccess",{count:t.totalFiles.toLocaleString()})),setTimeout(()=>{this.fetchIndexInfo()},1e3)}catch(t){if("ABORTED"!==t.code){const e=t.suggestion?`${t.message}。${t.suggestion}`:t.message;this.$message.error(e),this.processingError={message:t.message,suggestion:t.suggestion,recoverable:t.recoverable}}}finally{this.rebuilding=!1,this.isProcessing=!1,this.currentRebuilder=null,this.processingStartTime=null}}},async backupData(){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.backing=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0},this.currentBackupGenerator=new cu({onProgress:t=>this.handleProgress(t)});try{const t=await this.currentBackupGenerator.generateBackup(),e=t.settingsCount>0?this.$t("sysStatus.backupSuccessWithSettings",{fileCount:t.fileCount.toLocaleString(),settingsCount:t.settingsCount}):this.$t("sysStatus.backupSuccess",{count:t.fileCount.toLocaleString()});this.$message.success(e)}catch(t){if("ABORTED"!==t.code){const e=t.suggestion?`${t.message}。${t.suggestion}`:t.message;this.$message.error(e),this.processingError={message:t.message,suggestion:t.suggestion,recoverable:t.recoverable}}}finally{this.backing=!1,this.isProcessing=!1,this.currentBackupGenerator=null,this.processingStartTime=null}}},selectRestoreFile(){this.restoring||this.$refs.fileInput.click()},async handleFileSelect(t){const e=t.target.files[0];if(e)if(e.name.endsWith(".json")){try{await this.$confirm(this.$t("sysStatus.restoreConfirmMessage"),this.$t("sysStatus.restoreConfirmTitle"),{confirmButtonText:this.$t("sysStatus.restoreConfirmOk"),cancelButtonText:this.$t("sysStatus.restoreConfirmCancel"),type:"warning"}),await this.restoreData(e)}catch(s){"cancel"!==s&&console.error("确认恢复失败:",s)}t.target.value=""}else this.$message.error(this.$t("sysStatus.selectJsonFile"))},async restoreData(t){if(this.isProcessing)this.$message.warning(this.$t("sysStatus.operationInProgress"));else{this.restoring=!0,this.isProcessing=!0,this.processingError=null,this.processingStartTime=Date.now(),this.processingProgress={current:0,total:0,message:"",percentage:0};try{const s=await t.text();let i;try{i=JSON.parse(s)}catch(e){throw new Error(this.$t("sysStatus.invalidBackupFile"))}this.currentRestoreProcessor=new uu({chunkSize:100,onProgress:t=>this.handleProgress(t),onError:t=>this.handleError(t)});const n=await this.currentRestoreProcessor.restore(i);this.restoring=!1,this.isProcessing=!1,this.currentRestoreProcessor=null,this.processingStartTime=null,this.$message.success(this.$t("sysStatus.restoreSuccess",{files:n.restoredFiles,settings:n.restoredSettings})),await new Promise(t=>setTimeout(t,500)),await this.rebuildIndex()}catch(s){if(console.error("恢复数据失败:",s),this.restoring=!1,this.isProcessing=!1,this.currentRestoreProcessor=null,this.processingStartTime=null,"ABORTED"!==s.code){const t=s.suggestion?`${s.message}。${s.suggestion}`:s.message;this.$message.error(this.$t("sysStatus.restoreFailed")+": "+t),this.processingError={message:s.message,suggestion:s.suggestion,recoverable:s.recoverable}}}}},formatTime(t){if(!t)return this.$t("sysStatus.unknown");const e=new Date(t);return e.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})},getPercentage(t,e){return e&&0!==e?Math.round(t/e*100):0},getTimeAgo(t){if(!t)return"";const e=Date.now(),s=e-t,i=Math.floor(s/6e4),n=Math.floor(s/36e5),a=Math.floor(s/864e5);return a>0?this.$t("sysStatus.daysAgo",{count:a}):n>0?this.$t("sysStatus.hoursAgo",{count:n}):i>0?this.$t("sysStatus.minutesAgo",{count:i}):this.$t("sysStatus.justNow")},handleImageError(t){this.loadErrors[t]=!0},isValidPreview(t,e){return!this.loadErrors[t]&&(!!e?.metadata?.FileType&&(e.metadata.FileType.includes("image")||e.metadata.FileType.includes("video")))},openReleases(){window.open("https://github.com/MarSeventh/CloudFlare-ImgBed/releases","_blank")},isImageFile(t){if(!t)return!1;if(t.metadata?.FileType?.includes("image"))return!0;const e=t.metadata?.FileName||t.id||"",s=e.substring(e.lastIndexOf(".")+1).toLowerCase(),i=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","avif","heic","heif"];return i.includes(s)},isVideoFile(t){if(!t)return!1;if(t.metadata?.FileType?.includes("video"))return!0;const e=t.metadata?.FileName||t.id||"",s=e.substring(e.lastIndexOf(".")+1).toLowerCase(),i=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","m4v","3gp","mpeg","mpg"];return i.includes(s)},openFileInNewTab(t){t?.id&&window.open("/file/"+t.id+"?from=admin","_blank")},handleProgress(t){this.processingPhase=t.phase,this.processingProgress.message=t.message||"",this.processingProgress.current=t.current||0,"fetching"===t.phase?(this.processingProgress.total=t.total||0,t.total&&t.total>0?this.processingProgress.percentage=Math.min(60,t.current/t.total*60):this.processingProgress.percentage=Math.min(50,15*Math.log10(t.current+1))):"sorting"===t.phase?(this.processingProgress.percentage=65,this.processingProgress.total=t.total||this.processingProgress.total):"uploading"===t.phase?(this.processingProgress.total=t.total||0,t.total&&t.total>0&&(this.processingProgress.percentage=70+t.current/t.total*25)):"finalizing"===t.phase?this.processingProgress.percentage=97:"building"===t.phase?this.processingProgress.percentage=80:"downloading"===t.phase?this.processingProgress.percentage=95:"restoring_files"===t.phase?(this.processingProgress.total=t.total||0,this.processingProgress.percentage=t.percentage||0):"restoring_settings"===t.phase?(this.processingProgress.total=t.total||0,this.processingProgress.percentage=t.percentage||80):"completed"===t.phase?this.processingProgress.percentage=100:"retrying"===t.phase&&(this.processingProgress.message=t.message)},handleError(t){console.error("批量操作错误:",t),this.processingError={message:t.message,suggestion:t.suggestion,recoverable:t.recoverable}},cancelOperation(){this.currentRebuilder&&(this.currentRebuilder.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild"))),this.currentBackupGenerator&&(this.currentBackupGenerator.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild"))),this.currentRestoreProcessor&&(this.currentRestoreProcessor.abort(),this.$message.info(this.$t("sysStatus.cancellingRebuild")))},retryOperation(){this.processingError=null,this.rebuilding?(this.rebuilding=!1,this.isProcessing=!1,this.$nextTick(()=>{this.rebuildIndex()})):this.backing&&(this.backing=!1,this.isProcessing=!1,this.$nextTick(()=>{this.backupData()}))},dismissError(){this.processingError=null}}};const yu=(0,c.A)(bu,[["render",Te],["__scopeId","data-v-90d03e30"]]);var xu=yu,vu=s(59869),_u=(s(70415),s(73565),s(82006)),ku=(s(98642),s(81418)),wu=(s(50333),s(39623)),Cu=(s(29092),s(63003),s(76018)),Su=(s(96808),s(67819),s(55558)),Fu=(s(10456),s(12687)),Tu=(s(18785),s(53676));const Pu=["onClick"];function Mu(t,e,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),d=Tu.A;return(0,i.uX)(),(0,i.CE)("div",{class:(0,n.C4)(["custom-select",{"is-open":o.isOpen}]),style:(0,n.Tr)({width:s.width})},[(0,i.Lk)("div",{class:"custom-select-trigger",onClick:e[0]||(e[0]=(...t)=>l.toggleDropdown&&l.toggleDropdown(...t))},[(0,i.Lk)("span",{class:(0,n.C4)(["custom-select-value",{"is-placeholder":!s.modelValue}])},(0,n.v_)(l.displayLabel),3),(0,i.bF)(r,{icon:"chevron-down",class:"custom-select-arrow"})]),(0,i.bF)(C.eB,{name:"dropdown-fade"},{default:(0,i.k6)(()=>[(0,i.bo)((0,i.Lk)("div",{class:"custom-select-dropdown",onClick:e[1]||(e[1]=(0,C.D$)(()=>{},["stop"]))},[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(s.options,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.value,class:(0,n.C4)(["custom-select-option",{"is-selected":s.modelValue===e.value}]),onClick:t=>l.selectOption(e.value)},[(0,i.RG)(t.$slots,"option",{option:e},()=>[e.channelType?((0,i.uX)(),(0,i.Wv)(d,{key:0,type:e.channelType,class:(0,n.C4)(["option-icon",e.iconClass])},null,8,["type","class"])):e.icon?((0,i.uX)(),(0,i.Wv)(r,{key:1,icon:e.icon,class:(0,n.C4)(["option-icon",e.iconClass])},null,8,["icon","class"])):(0,i.Q3)("",!0),(0,i.Lk)("span",null,(0,n.v_)(e.label),1)],!0)],10,Pu))),128))],512),[[C.aG,o.isOpen]])]),_:3})],6)}var Du={name:"CustomSelect",components:{ChannelIcon:Tu.A},props:{modelValue:{type:[String,Number],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:""},width:{type:String,default:"160px"}},emits:["update:modelValue","change"],data(){return{isOpen:!1}},computed:{resolvedPlaceholder(){return this.placeholder||this.$t("common.select")},displayLabel(){const t=this.options.find(t=>t.value===this.modelValue);return t?t.label:this.resolvedPlaceholder}},mounted(){document.addEventListener("click",this.handleClickOutside)},beforeUnmount(){document.removeEventListener("click",this.handleClickOutside)},methods:{toggleDropdown(){this.isOpen=!this.isOpen},selectOption(t){this.$emit("update:modelValue",t),this.$emit("change",t),this.isOpen=!1},handleClickOutside(t){this.$el.contains(t.target)||(this.isOpen=!1)}}};const Au=(0,c.A)(Du,[["render",Mu],["__scopeId","data-v-3c680cc7"]]);var $u=Au;const Vu={class:"upload-settings"},Lu={class:"page-header"},Eu={class:"first-title"},Iu={class:"header-actions"},Uu={class:"group-header"},Ou={class:"group-title"},Ru={key:0,class:"load-balance-switch"},Wu={class:"switch-label"},Bu={key:0,class:"channel-cards"},Nu=["onMousemove","onMouseleave"],zu={class:"card-header"},ju={class:"card-title"},qu={class:"channel-name"},Hu={class:"card-body"},Xu={class:"card-info"},Ku={class:"info-item"},Qu={class:"info-text"},Yu={key:0,class:"info-item"},Gu={class:"info-text"},Ju={key:1,class:"info-item"},Zu=["title"],tp={class:"info-item"},ep={class:"info-text"},sp={key:0,class:"info-item"},ip=["title"],np={class:"info-item"},ap={class:"info-text"},op={class:"info-item"},lp={class:"info-text"},rp={class:"info-item"},dp={class:"info-text"},cp={class:"info-item"},hp=["title"],up={key:0,class:"info-item"},pp=["title"],gp={key:0,class:"quota-mini"},fp={class:"quota-text"},mp={class:"card-actions"},bp={key:1,class:"empty-tip"},yp={class:"channel-type-option"},xp={key:0,class:"form-warning",style:{"margin-top":"0"}},vp=["innerHTML"],_p={class:"form-warning"},kp={class:"quota-label"},wp={class:"quota-status"};function Cp(t,e,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),d=g.R7,c=$u,h=K.S2,u=Tu.A,p=Fu.u,f=Su.qi,m=k.ve,b=Cu.P9,y=Cu.AV,x=_u.xE,_=wu.WK,S=ku.lq,F=_u.US,T=w.kZ,P=vu.MF,M=vu.TS,D=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Vu,[(0,i.Lk)("div",Lu,[(0,i.Lk)("h3",Eu,[(0,i.eW)((0,n.v_)(t.$t("sysUpload.title"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.titleTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Iu,[(0,i.bF)(c,{modelValue:o.channelFilter,"onUpdate:modelValue":e[0]||(e[0]=t=>o.channelFilter=t),options:l.filterOptions,placeholder:t.$t("sysUpload.filterPlaceholder"),width:"160px"},null,8,["modelValue","options","placeholder"]),(0,i.bF)(h,{type:"primary",onClick:e[1]||(e[1]=t=>o.showAddDialog=!0),class:"add-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"plus",style:{"margin-right":"6px"}}),(0,i.eW)(" "+(0,n.v_)(t.$t("sysUpload.addChannel")),1)]),_:1})])]),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.filteredChannels,s=>((0,i.uX)(),(0,i.CE)("div",{key:s.value,class:"channel-group"},[(0,i.Lk)("div",Uu,[(0,i.Lk)("div",Ou,[(0,i.bF)(u,{type:s.value,class:(0,n.C4)(["group-icon",l.getChannelIconClass(s.value)])},null,8,["type","class"]),(0,i.Lk)("span",null,(0,n.v_)(s.label),1),(0,i.bF)(p,{size:"small",type:"info",class:"channel-count"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getChannelList(s.value).length),1)]),_:2},1024)]),l.hasLoadBalance(s.value)?((0,i.uX)(),(0,i.CE)("div",Ru,[(0,i.Lk)("span",Wu,(0,n.v_)(t.$t("sysUpload.loadBalance")),1),(0,i.bF)(f,{modelValue:l.getSettings(s.value).loadBalance.enabled,"onUpdate:modelValue":t=>l.getSettings(s.value).loadBalance.enabled=t,size:"small",onChange:l.saveSettings},null,8,["modelValue","onUpdate:modelValue","onChange"])])):(0,i.Q3)("",!0)]),l.getChannelList(s.value).length>0?((0,i.uX)(),(0,i.CE)("div",Bu,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.getChannelList(s.value),(a,o)=>((0,i.uX)(),(0,i.CE)("div",{key:a.name||o,class:(0,n.C4)(["channel-card",[s.value,{disabled:!a.enabled,fixed:a.fixed}]]),onMousemove:t=>l.handleCardMouseMove(t,s.value,o),onMouseleave:t=>l.handleCardMouseLeave(s.value,o)},[(0,i.Lk)("div",{class:"card-glow",ref_for:!0,ref:`glow-${s.value}-${o}`},null,512),(0,i.Lk)("div",zu,[(0,i.Lk)("div",ju,[(0,i.Lk)("span",qu,(0,n.v_)(a.name||t.$t("sysUpload.unnamedChannel")),1),a.fixed?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.envVariable")),1)]),_:1})):(0,i.Q3)("",!0)]),(0,i.bF)(f,{modelValue:a.enabled,"onUpdate:modelValue":t=>a.enabled=t,size:"small",onClick:e[2]||(e[2]=(0,C.D$)(()=>{},["stop"])),onChange:l.saveSettings},null,8,["modelValue","onUpdate:modelValue","onChange"])]),(0,i.Lk)("div",Hu,[(0,i.Lk)("div",Xu,["telegram"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.Lk)("div",Ku,[(0,i.bF)(r,{icon:"robot",class:"info-icon"}),(0,i.Lk)("span",Qu,"Bot: "+(0,n.v_)(l.maskText(a.botToken)),1)]),a.chatId?((0,i.uX)(),(0,i.CE)("div",Yu,[(0,i.bF)(r,{icon:"comments",class:"info-icon"}),(0,i.Lk)("span",Gu,"Channel: "+(0,n.v_)(l.maskText(a.chatId)),1)])):(0,i.Q3)("",!0)],64)):"cfr2"===s.value?((0,i.uX)(),(0,i.CE)("div",Ju,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.publicUrl},(0,n.v_)(a.publicUrl||t.$t("sysUpload.notSet")),9,Zu)])):"s3"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.Lk)("div",tp,[(0,i.bF)(r,{icon:"server",class:"info-icon"}),(0,i.Lk)("span",ep,(0,n.v_)(a.bucketName||t.$t("sysUpload.notSet")),1)]),a.endpoint?((0,i.uX)(),(0,i.CE)("div",sp,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.endpoint},(0,n.v_)(a.endpoint),9,ip)])):(0,i.Q3)("",!0)],64)):"discord"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.Lk)("div",np,[(0,i.bF)(r,{icon:"robot",class:"info-icon"}),(0,i.Lk)("span",ap,"Bot: "+(0,n.v_)(l.maskText(a.botToken)),1)]),(0,i.Lk)("div",op,[(0,i.bF)(r,{icon:"hashtag",class:"info-icon"}),(0,i.Lk)("span",lp,"Channel: "+(0,n.v_)(l.maskText(a.channelId)),1)]),a.isNitro?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"success"},{default:(0,i.k6)(()=>[...e[78]||(e[78]=[(0,i.eW)("Nitro",-1)])]),_:1})):(0,i.Q3)("",!0)],64)):"huggingface"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.Lk)("div",rp,[(0,i.bF)(r,{icon:"database",class:"info-icon"}),(0,i.Lk)("span",dp,(0,n.v_)(a.repo||t.$t("sysUpload.notSet")),1)]),a.isPrivate?((0,i.uX)(),(0,i.Wv)(p,{key:0,size:"small",type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.privateRepo")),1)]),_:1})):(0,i.Q3)("",!0)],64)):"webdav"===s.value?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.Lk)("div",cp,[(0,i.bF)(r,{icon:"folder",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.baseUrl},(0,n.v_)(a.baseUrl||t.$t("sysUpload.notSet")),9,hp)]),a.publicUrl?((0,i.uX)(),(0,i.CE)("div",up,[(0,i.bF)(r,{icon:"link",class:"info-icon"}),(0,i.Lk)("span",{class:"info-text",title:a.publicUrl},(0,n.v_)(a.publicUrl),9,pp)])):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)]),a.quota?.enabled?((0,i.uX)(),(0,i.CE)("div",gp,[(0,i.bF)(m,{percentage:l.getQuotaPercentage(a),status:l.getQuotaStatus(a),"stroke-width":6},null,8,["percentage","status"]),(0,i.Lk)("span",fp,(0,n.v_)(l.getQuotaText(a)),1)])):(0,i.Q3)("",!0)]),(0,i.Lk)("div",mp,[(0,i.bF)(h,{text:"",type:"primary",size:"small",onClick:t=>l.openDetailDialog(s.value,o)},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"eye",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(t.$t("sysUpload.detail")),1)]),_:1},8,["onClick"]),(0,i.bF)(h,{text:"",type:"primary",size:"small",onClick:t=>l.openEditDialog(s.value,o)},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"edit",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(t.$t("sysUpload.editBtn")),1)]),_:1},8,["onClick"]),(0,i.bF)(h,{text:"",type:"danger",size:"small",onClick:t=>l.deleteChannel(s.value,o),disabled:a.fixed},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"trash-alt",style:{"margin-right":"4px"}}),(0,i.eW)((0,n.v_)(t.$t("sysUpload.deleteBtn")),1)]),_:1},8,["onClick","disabled"])])],42,Nu))),128))])):((0,i.uX)(),(0,i.CE)("div",bp,[(0,i.bF)(r,{icon:"inbox",class:"empty-icon"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysUpload.noChannels",{type:s.label})),1)]))]))),128)),(0,i.bF)(T,{modelValue:o.showAddDialog,"onUpdate:modelValue":e[35]||(e[35]=t=>o.showAddDialog=t),title:t.$t("sysUpload.addDialogTitle"),class:"channel-dialog","destroy-on-close":"",onClosed:l.resetAddForm},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:e[34]||(e[34]=t=>o.showAddDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.cancel")),1)]),_:1}),"cfr2"!==o.newChannel.type?((0,i.uX)(),(0,i.Wv)(h,{key:0,type:"primary",onClick:l.confirmAddChannel},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.confirmAdd")),1)]),_:1},8,["onClick"])):(0,i.Q3)("",!0)]),default:(0,i.k6)(()=>[(0,i.bF)(F,{model:o.newChannel,"label-position":"top",ref:"addForm",rules:l.addRules},{default:(0,i.k6)(()=>[(0,i.bF)(x,{label:t.$t("sysUpload.channelTypeLabel"),prop:"type"},{default:(0,i.k6)(()=>[(0,i.bF)(y,{modelValue:o.newChannel.type,"onUpdate:modelValue":e[3]||(e[3]=t=>o.newChannel.type=t),placeholder:t.$t("sysUpload.channelTypePlaceholder"),style:{width:"100%"},onChange:l.onChannelTypeChange},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.addableChannels,t=>((0,i.uX)(),(0,i.Wv)(b,{key:t.value,label:t.label,value:t.value},{default:(0,i.k6)(()=>[(0,i.Lk)("span",yp,[(0,i.bF)(u,{type:t.value,class:(0,n.C4)(["select-option-icon",l.getChannelIconClass(t.value)])},null,8,["type","class"]),(0,i.Lk)("span",null,(0,n.v_)(t.label),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","onChange"])]),_:1},8,["label"]),"cfr2"===o.newChannel.type?((0,i.uX)(),(0,i.CE)("div",xp,[(0,i.bF)(r,{icon:"info-circle",style:{"margin-right":"6px"}}),(0,i.Lk)("span",{innerHTML:t.$t("sysUpload.r2ConfigNote")},null,8,vp)])):((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{prop:"name"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.channelNameLabel"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.channelNameImmutableTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"exclamation-triangle",class:"inline-warning-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.name,"onUpdate:modelValue":e[4]||(e[4]=t=>o.newChannel.name=t),placeholder:t.$t("sysUpload.channelNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),"telegram"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:t.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.botToken,"onUpdate:modelValue":e[5]||(e[5]=t=>o.newChannel.botToken=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.botTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.chatIdLabel"),prop:"chatId"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.chatId,"onUpdate:modelValue":e[6]||(e[6]=t=>o.newChannel.chatId=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.chatIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.proxyUrl,"onUpdate:modelValue":e[7]||(e[7]=t=>o.newChannel.proxyUrl=t),placeholder:t.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],64)):"s3"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{label:t.$t("sysUpload.endpointLabel"),prop:"endpoint"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.endpoint,"onUpdate:modelValue":e[8]||(e[8]=t=>o.newChannel.endpoint=t),placeholder:t.$t("sysUpload.endpointPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.cdnDomain"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.cdnDomainTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.cdnDomain,"onUpdate:modelValue":e[9]||(e[9]=t=>o.newChannel.cdnDomain=t),placeholder:t.$t("sysUpload.cdnDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.bucketName"),prop:"bucketName"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.bucketName,"onUpdate:modelValue":e[10]||(e[10]=t=>o.newChannel.bucketName=t),placeholder:t.$t("sysUpload.bucketNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.bucketRegion"),prop:"region"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.region,"onUpdate:modelValue":e[11]||(e[11]=t=>o.newChannel.region=t),placeholder:t.$t("sysUpload.bucketRegionPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.accessKeyId"),prop:"accessKeyId"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.accessKeyId,"onUpdate:modelValue":e[12]||(e[12]=t=>o.newChannel.accessKeyId=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.accessKeyIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.secretAccessKey"),prop:"secretAccessKey"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.secretAccessKey,"onUpdate:modelValue":e[13]||(e[13]=t=>o.newChannel.secretAccessKey=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.secretAccessKeyPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.pathStyle"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.pathStyleTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.pathStyle,"onUpdate:modelValue":e[14]||(e[14]=t=>o.newChannel.pathStyle=t)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.quota.enabled,"onUpdate:modelValue":e[15]||(e[15]=t=>o.newChannel.quota.enabled=t)},null,8,["modelValue"])]),_:1},8,["label"]),o.newChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.limitGB,"onUpdate:modelValue":e[16]||(e[16]=t=>o.newChannel.quota.limitGB=t),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.threshold,"onUpdate:modelValue":e[17]||(e[17]=t=>o.newChannel.quota.threshold=t),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"discord"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.bF)(x,{label:t.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.botToken,"onUpdate:modelValue":e[18]||(e[18]=t=>o.newChannel.botToken=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.botTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.channelIdLabel"),prop:"channelId"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.channelId,"onUpdate:modelValue":e[19]||(e[19]=t=>o.newChannel.channelId=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.channelIdPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.proxyUrl,"onUpdate:modelValue":e[20]||(e[20]=t=>o.newChannel.proxyUrl=t),placeholder:t.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.nitroMember"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.nitroTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.isNitro,"onUpdate:modelValue":e[21]||(e[21]=t=>o.newChannel.isNitro=t)},null,8,["modelValue"])]),_:1}),(0,i.Lk)("div",_p,[(0,i.bF)(r,{icon:"exclamation-triangle",style:{"margin-right":"6px"}}),(0,i.eW)(" "+(0,n.v_)(t.$t("sysUpload.discordWarning")),1)])],64)):"huggingface"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(x,{label:t.$t("sysUpload.repoName"),prop:"repo"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.repo,"onUpdate:modelValue":e[22]||(e[22]=t=>o.newChannel.repo=t),placeholder:t.$t("sysUpload.repoNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.accessToken"),prop:"token"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.token,"onUpdate:modelValue":e[23]||(e[23]=t=>o.newChannel.token=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.accessTokenPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.privateRepo"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.privateRepoTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.isPrivate,"onUpdate:modelValue":e[24]||(e[24]=t=>o.newChannel.isPrivate=t)},null,8,["modelValue"])]),_:1})],64)):"webdav"===o.newChannel.type?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(x,{label:t.$t("sysUpload.webdavBaseUrl"),prop:"baseUrl"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.baseUrl,"onUpdate:modelValue":e[25]||(e[25]=t=>o.newChannel.baseUrl=t),placeholder:t.$t("sysUpload.webdavBaseUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.username,"onUpdate:modelValue":e[26]||(e[26]=t=>o.newChannel.username=t),placeholder:t.$t("sysUpload.webdavUsernamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.password,"onUpdate:modelValue":e[27]||(e[27]=t=>o.newChannel.password=t),type:"password","show-password":"",placeholder:t.$t("sysUpload.webdavPasswordPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.publicUrl"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.webdavPublicUrlTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.publicUrl,"onUpdate:modelValue":e[28]||(e[28]=t=>o.newChannel.publicUrl=t),placeholder:t.$t("sysUpload.webdavPublicUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.newChannel.headersText,"onUpdate:modelValue":e[29]||(e[29]=t=>o.newChannel.headersText=t),type:"textarea",autosize:{minRows:2},placeholder:t.$t("sysUpload.webdavHeadersPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.webdavCreateDirectory"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.webdavCreateDirectoryTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.createDirectory,"onUpdate:modelValue":e[30]||(e[30]=t=>o.newChannel.createDirectory=t)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.newChannel.quota.enabled,"onUpdate:modelValue":e[31]||(e[31]=t=>o.newChannel.quota.enabled=t)},null,8,["modelValue"])]),_:1},8,["label"]),o.newChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.limitGB,"onUpdate:modelValue":e[32]||(e[32]=t=>o.newChannel.quota.limitGB=t),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.newChannel.quota.threshold,"onUpdate:modelValue":e[33]||(e[33]=t=>o.newChannel.quota.threshold=t),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)],64))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","onClosed"]),(0,i.bF)(T,{modelValue:o.showDetailDialog,"onUpdate:modelValue":e[37]||(e[37]=t=>o.showDetailDialog=t),title:t.$t("sysUpload.detailDialogTitle",{name:o.currentChannel?.name||""}),class:"channel-dialog",onClosed:l.resetDetailData},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:e[36]||(e[36]=t=>o.showDetailDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.closeBtn")),1)]),_:1}),(0,i.bF)(h,{type:"primary",onClick:l.openEditFromDetail},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.editBtn")),1)]),_:1},8,["onClick"])]),default:(0,i.k6)(()=>[(0,i.bF)(M,{column:1,border:""},{default:(0,i.k6)(()=>[(0,i.bF)(P,{label:t.$t("sysUpload.channelNameDetail")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.name),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.channelTypeDetail")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getChannelTypeLabel(o.currentChannelType)),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.statusLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:o.currentChannel?.enabled?"success":"info"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.enabled?t.$t("sysUpload.enabled"):t.$t("sysUpload.disabled")),1)]),_:1},8,["type"])]),_:1},8,["label"]),o.currentChannel?.fixed?((0,i.uX)(),(0,i.Wv)(P,{key:0,label:t.$t("sysUpload.configSource")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{type:"warning"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.envVariable")),1)]),_:1})]),_:1},8,["label"])):(0,i.Q3)("",!0),"telegram"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(P,{label:t.$t("sysUpload.botTokenLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.botToken,10)),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.chatIdLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.chatId,6)),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.proxyUrl||t.$t("sysUpload.notSet")),1)]),_:1},8,["label"])],64)):"cfr2"===o.currentChannelType?((0,i.uX)(),(0,i.Wv)(P,{key:2,label:t.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{"model-value":o.currentChannel?.publicUrl||t.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"])):"s3"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(P,{label:t.$t("sysUpload.endpointLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{"model-value":o.currentChannel?.endpoint,readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.cdnDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{"model-value":o.currentChannel?.cdnDomain||t.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.bucketName")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.bucketName),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.bucketRegion")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.region),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.pathStyle")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.pathStyle?t.$t("sysUpload.isPathStyle"):t.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"discord"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(P,{label:t.$t("sysUpload.botTokenLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.botToken,10)),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.channelIdLabel")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.maskText(o.currentChannel?.channelId,6)),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.proxyUrl||t.$t("sysUpload.notSet")),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.nitroMember")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.isNitro?t.$t("sysUpload.isPathStyle"):t.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"huggingface"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.bF)(P,{label:t.$t("sysUpload.repoName")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.repo),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.privateRepo")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.isPrivate?t.$t("sysUpload.isPathStyle"):t.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):"webdav"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:6},[(0,i.bF)(P,{label:t.$t("sysUpload.webdavBaseUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{"model-value":o.currentChannel?.baseUrl,readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{"model-value":o.currentChannel?.publicUrl||t.$t("sysUpload.notSet"),readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.username||t.$t("sysUpload.notSet")),1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{"model-value":l.formatHeaders(o.currentChannel?.headers),type:"textarea",autosize:{minRows:2},readonly:""},null,8,["model-value"])]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.webdavCreateDirectory")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(!1!==o.currentChannel?.createDirectory?t.$t("sysUpload.isPathStyle"):t.$t("sysUpload.isNotPathStyle")),1)]),_:1},8,["label"])],64)):(0,i.Q3)("",!0),o.currentChannel?.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:7},[(0,i.bF)(P,{label:t.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.quota?.limitGB)+" GB",1)]),_:1},8,["label"]),(0,i.bF)(P,{label:t.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(o.currentChannel?.quota?.threshold)+"%",1)]),_:1},8,["label"]),(0,i.bF)(P,null,{label:(0,i.k6)(()=>[(0,i.Lk)("span",kp,[(0,i.eW)((0,n.v_)(t.$t("sysUpload.currentUsage"))+" ",1),(0,i.bF)(h,{link:"",type:"primary",onClick:l.refreshQuota,class:"refresh-btn"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"sync-alt",class:(0,n.C4)({"fa-spin":o.quotaLoading})},null,8,["class"])]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",wp,[(0,i.bF)(m,{percentage:l.getQuotaPercentage(o.currentChannel),status:l.getQuotaStatus(o.currentChannel),"stroke-width":16,"text-inside":!0,format:()=>l.getQuotaText(o.currentChannel)},null,8,["percentage","status","format"]),(0,i.Lk)("div",{class:(0,n.C4)(["quota-info",{"quota-warning":l.isQuotaExceeded(o.currentChannel)}])},(0,n.v_)(l.getQuotaStatusText(o.currentChannel)),3)])]),_:1})],64)):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["modelValue","title","onClosed"]),(0,i.bF)(T,{modelValue:o.showEditDialog,"onUpdate:modelValue":e[77]||(e[77]=t=>o.showEditDialog=t),title:t.$t("sysUpload.editDialogTitle",{name:o.editChannel?.name||""}),class:"channel-dialog","destroy-on-close":"",onClosed:l.resetEditData},{footer:(0,i.k6)(()=>[(0,i.bF)(h,{onClick:e[76]||(e[76]=t=>o.showEditDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.cancel")),1)]),_:1}),(0,i.bF)(h,{type:"primary",onClick:l.confirmEditChannel},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.saveChanges")),1)]),_:1},8,["onClick"])]),default:(0,i.k6)(()=>[(0,i.bF)(F,{model:o.editChannel,"label-position":"top",ref:"editForm",rules:l.editRules},{default:(0,i.k6)(()=>[(0,i.bF)(x,{prop:"name"},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.channelNameLabel"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.channelNameEditDisabledTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"exclamation-triangle",class:"inline-warning-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.name,"onUpdate:modelValue":e[38]||(e[38]=t=>o.editChannel.name=t),disabled:""},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.enableChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.enabled,"onUpdate:modelValue":e[39]||(e[39]=t=>o.editChannel.enabled=t)},null,8,["modelValue"])]),_:1},8,["label"]),"telegram"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:t.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.botToken,"onUpdate:modelValue":e[40]||(e[40]=t=>o.editChannel.botToken=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.chatIdLabel"),prop:"chatId"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.chatId,"onUpdate:modelValue":e[41]||(e[41]=t=>o.editChannel.chatId=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.proxyUrl,"onUpdate:modelValue":e[42]||(e[42]=t=>o.editChannel.proxyUrl=t),placeholder:t.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],64)):"cfr2"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:1},[(0,i.bF)(x,{label:t.$t("sysUpload.publicUrl")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.publicUrl,"onUpdate:modelValue":e[43]||(e[43]=t=>o.editChannel.publicUrl=t)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":e[44]||(e[44]=t=>o.editChannel.quota.enabled=t),onChange:e[45]||(e[45]=t=>l.onQuotaEnabledChange(t,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":e[46]||(e[46]=t=>o.editChannel.quota.limitGB=t),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":e[47]||(e[47]=t=>o.editChannel.quota.threshold=t),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"s3"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:2},[(0,i.bF)(x,{label:t.$t("sysUpload.endpointLabel"),prop:"endpoint"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.endpoint,"onUpdate:modelValue":e[48]||(e[48]=t=>o.editChannel.endpoint=t),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.cdnDomain"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.cdnDomainTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.cdnDomain,"onUpdate:modelValue":e[49]||(e[49]=t=>o.editChannel.cdnDomain=t),placeholder:t.$t("sysUpload.cdnDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.bucketName"),prop:"bucketName"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.bucketName,"onUpdate:modelValue":e[50]||(e[50]=t=>o.editChannel.bucketName=t),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.bucketRegion"),prop:"region"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.region,"onUpdate:modelValue":e[51]||(e[51]=t=>o.editChannel.region=t),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.accessKeyId"),prop:"accessKeyId"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.accessKeyId,"onUpdate:modelValue":e[52]||(e[52]=t=>o.editChannel.accessKeyId=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.secretAccessKey"),prop:"secretAccessKey"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.secretAccessKey,"onUpdate:modelValue":e[53]||(e[53]=t=>o.editChannel.secretAccessKey=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.pathStyle"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.pathStyleTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.pathStyle,"onUpdate:modelValue":e[54]||(e[54]=t=>o.editChannel.pathStyle=t),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":e[55]||(e[55]=t=>o.editChannel.quota.enabled=t),onChange:e[56]||(e[56]=t=>l.onQuotaEnabledChange(t,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":e[57]||(e[57]=t=>o.editChannel.quota.limitGB=t),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":e[58]||(e[58]=t=>o.editChannel.quota.threshold=t),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):"discord"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:3},[(0,i.bF)(x,{label:t.$t("sysUpload.botTokenLabel"),prop:"botToken"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.botToken,"onUpdate:modelValue":e[59]||(e[59]=t=>o.editChannel.botToken=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.channelIdLabel"),prop:"channelId"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.channelId,"onUpdate:modelValue":e[60]||(e[60]=t=>o.editChannel.channelId=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.proxyDomain")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.proxyUrl,"onUpdate:modelValue":e[61]||(e[61]=t=>o.editChannel.proxyUrl=t),placeholder:t.$t("sysUpload.proxyDomainPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.nitroMember"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.nitroTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.isNitro,"onUpdate:modelValue":e[62]||(e[62]=t=>o.editChannel.isNitro=t)},null,8,["modelValue"])]),_:1})],64)):"huggingface"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:4},[(0,i.bF)(x,{label:t.$t("sysUpload.repoName"),prop:"repo"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.repo,"onUpdate:modelValue":e[63]||(e[63]=t=>o.editChannel.repo=t),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.accessToken"),prop:"token"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.token,"onUpdate:modelValue":e[64]||(e[64]=t=>o.editChannel.token=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.privateRepo"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.privateRepoTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.isPrivate,"onUpdate:modelValue":e[65]||(e[65]=t=>o.editChannel.isPrivate=t)},null,8,["modelValue"])]),_:1})],64)):"webdav"===o.currentChannelType?((0,i.uX)(),(0,i.CE)(i.FK,{key:5},[(0,i.bF)(x,{label:t.$t("sysUpload.webdavBaseUrl"),prop:"baseUrl"},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.baseUrl,"onUpdate:modelValue":e[66]||(e[66]=t=>o.editChannel.baseUrl=t),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.username,"onUpdate:modelValue":e[67]||(e[67]=t=>o.editChannel.username=t),disabled:o.editChannel.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.password,"onUpdate:modelValue":e[68]||(e[68]=t=>o.editChannel.password=t),disabled:o.editChannel.fixed,type:"password","show-password":""},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.publicUrl"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.webdavPublicUrlTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.publicUrl,"onUpdate:modelValue":e[69]||(e[69]=t=>o.editChannel.publicUrl=t),placeholder:t.$t("sysUpload.webdavPublicUrlPlaceholder")},null,8,["modelValue","placeholder"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.webdavHeaders")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{modelValue:o.editChannel.headersText,"onUpdate:modelValue":e[70]||(e[70]=t=>o.editChannel.headersText=t),type:"textarea",autosize:{minRows:2},placeholder:t.$t("sysUpload.webdavHeadersPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(x,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysUpload.webdavCreateDirectory"))+" ",1),(0,i.bF)(d,{content:t.$t("sysUpload.webdavCreateDirectoryTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.createDirectory,"onUpdate:modelValue":e[71]||(e[71]=t=>o.editChannel.createDirectory=t)},null,8,["modelValue"])]),_:1}),(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimit")},{default:(0,i.k6)(()=>[(0,i.bF)(f,{modelValue:o.editChannel.quota.enabled,"onUpdate:modelValue":e[72]||(e[72]=t=>o.editChannel.quota.enabled=t),onChange:e[73]||(e[73]=t=>l.onQuotaEnabledChange(t,o.editChannel))},null,8,["modelValue"])]),_:1},8,["label"]),o.editChannel.quota?.enabled?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(x,{label:t.$t("sysUpload.quotaLimitGB")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.limitGB,"onUpdate:modelValue":e[74]||(e[74]=t=>o.editChannel.quota.limitGB=t),min:.1,step:1,precision:1},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(x,{label:t.$t("sysUpload.quotaThreshold")},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.editChannel.quota.threshold,"onUpdate:modelValue":e[75]||(e[75]=t=>o.editChannel.quota.threshold=t),min:50,max:100,step:5},null,8,["modelValue"])]),_:1},8,["label"])],64)):(0,i.Q3)("",!0)],64)):(0,i.Q3)("",!0)]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","onClosed"])])),[[D,o.loading]])}var Sp={components:{ChannelIcon:Tu.A,CustomSelect:$u},data(){return{channelFilter:"",channels:[{value:"telegram",label:"Telegram"},{value:"cfr2",label:"CloudFlare R2"},{value:"s3",label:"S3"},{value:"discord",label:"Discord"},{value:"huggingface",label:"HuggingFace"},{value:"webdav",label:"WebDAV"}],addableChannels:[{value:"telegram",label:"Telegram"},{value:"cfr2",label:"CloudFlare R2"},{value:"s3",label:"S3"},{value:"discord",label:"Discord"},{value:"huggingface",label:"HuggingFace"},{value:"webdav",label:"WebDAV"}],telegramSettings:{loadBalance:{enabled:!1},channels:[]},cfr2Settings:{channels:[]},s3Settings:{loadBalance:{enabled:!1},channels:[]},discordSettings:{loadBalance:{enabled:!1},channels:[]},huggingfaceSettings:{loadBalance:{enabled:!1},channels:[]},webdavSettings:{loadBalance:{enabled:!1},channels:[]},showAddDialog:!1,showDetailDialog:!1,showEditDialog:!1,currentChannelType:"",currentChannelIndex:-1,currentChannel:null,editChannel:{},newChannel:{type:"",name:"",enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",cdnDomain:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0},quotaStats:{},quotaLoading:!1,loading:!1}},computed:{filterOptions(){return[{value:"",label:this.$t("common.all")},...this.channels.map(t=>({value:t.value,label:t.label,channelType:t.value,iconClass:this.getChannelIconClass(t.value)}))]},filteredChannels(){return this.channelFilter?this.channels.filter(t=>t.value===this.channelFilter):this.channels},addRules(){return{type:[{required:!0,message:this.$t("sysUpload.channelTypePlaceholder"),trigger:"change"}],name:[{required:!0,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"},{pattern:/^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"}],botToken:[{required:!0,message:this.$t("sysUpload.botTokenPlaceholder"),trigger:"blur"}],chatId:[{required:!0,message:this.$t("sysUpload.chatIdPlaceholder"),trigger:"blur"}],channelId:[{required:!0,message:this.$t("sysUpload.channelIdPlaceholder"),trigger:"blur"}],endpoint:[{required:!0,message:this.$t("sysUpload.endpointPlaceholder"),trigger:"blur"}],bucketName:[{required:!0,message:this.$t("sysUpload.bucketNamePlaceholder"),trigger:"blur"}],region:[{required:!0,message:this.$t("sysUpload.bucketRegionPlaceholder"),trigger:"blur"}],accessKeyId:[{required:!0,message:this.$t("sysUpload.accessKeyIdPlaceholder"),trigger:"blur"}],secretAccessKey:[{required:!0,message:this.$t("sysUpload.secretAccessKeyPlaceholder"),trigger:"blur"}],repo:[{required:!0,message:this.$t("sysUpload.repoNamePlaceholder"),trigger:"blur"}],token:[{required:!0,message:this.$t("sysUpload.accessTokenPlaceholder"),trigger:"blur"}],baseUrl:[{required:!0,message:this.$t("sysUpload.webdavBaseUrlPlaceholder"),trigger:"blur"}]}},editRules(){return{name:[{required:!0,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"},{pattern:/^[\u4e00-\u9fa5a-zA-Z0-9_-]+$/,message:this.$t("sysUpload.channelNamePlaceholder"),trigger:"blur"}],botToken:[{required:!0,message:this.$t("sysUpload.botTokenPlaceholder"),trigger:"blur"}],chatId:[{required:!0,message:this.$t("sysUpload.chatIdPlaceholder"),trigger:"blur"}],channelId:[{required:!0,message:this.$t("sysUpload.channelIdPlaceholder"),trigger:"blur"}],endpoint:[{required:!0,message:this.$t("sysUpload.endpointPlaceholder"),trigger:"blur"}],bucketName:[{required:!0,message:this.$t("sysUpload.bucketNamePlaceholder"),trigger:"blur"}],region:[{required:!0,message:this.$t("sysUpload.bucketRegionPlaceholder"),trigger:"blur"}],accessKeyId:[{required:!0,message:this.$t("sysUpload.accessKeyIdPlaceholder"),trigger:"blur"}],secretAccessKey:[{required:!0,message:this.$t("sysUpload.secretAccessKeyPlaceholder"),trigger:"blur"}],repo:[{required:!0,message:this.$t("sysUpload.repoNamePlaceholder"),trigger:"blur"}],token:[{required:!0,message:this.$t("sysUpload.accessTokenPlaceholder"),trigger:"blur"}],baseUrl:[{required:!0,message:this.$t("sysUpload.webdavBaseUrlPlaceholder"),trigger:"blur"}]}}},methods:{handleCardMouseMove(t,e,s){const i=t.currentTarget,n=i.getBoundingClientRect(),a=t.clientX-n.left,o=t.clientY-n.top,l=`glow-${e}-${s}`,r=this.$refs[l];r&&r[0]&&(r[0].style.opacity="1",r[0].style.left=`${a}px`,r[0].style.top=`${o}px`)},handleCardMouseLeave(t,e){const s=`glow-${t}-${e}`,i=this.$refs[s];i&&i[0]&&(i[0].style.opacity="0")},getChannelIconClass(t){return`channel-brand-${t}`},getChannelTypeLabel(t){const e=this.channels.find(e=>e.value===t);return e?e.label:t},getChannelList(t){return this.getSettings(t)?.channels||[]},getSettings(t){const e={telegram:this.telegramSettings,cfr2:this.cfr2Settings,s3:this.s3Settings,discord:this.discordSettings,huggingface:this.huggingfaceSettings,webdav:this.webdavSettings};return e[t]},hasLoadBalance(t){return["telegram","s3","discord","huggingface","webdav"].includes(t)},maskText(t,e=4){return t?t.length<=2*e?"****":t.slice(0,e)+"****"+t.slice(-e):this.$t("sysUpload.notSet")},formatHeaders(t){return!t||"object"===typeof t&&0===Object.keys(t).length?this.$t("sysUpload.notSet"):"string"===typeof t?t:JSON.stringify(t,null,2)},headersToText(t){return t?"string"===typeof t?t:JSON.stringify(t,null,2):""},parseHeadersText(t){if(!t||!t.trim())return{};try{const e=JSON.parse(t);return!e||"object"!==typeof e||Array.isArray(e)?null:e}catch(e){return null}},openDetailDialog(t,e){this.currentChannelType=t,this.currentChannelIndex=e,this.currentChannel=this.getChannelList(t)[e],this.showDetailDialog=!0},openEditDialog(t,e){this.currentChannelType=t,this.currentChannelIndex=e;const s=this.getChannelList(t)[e];this.editChannel=JSON.parse(JSON.stringify(s)),"webdav"===t&&(this.editChannel.headersText=this.headersToText(this.editChannel.headers),this.editChannel.createDirectory=!1!==this.editChannel.createDirectory),this.editChannel.quota||(this.editChannel.quota={enabled:!1,limitGB:10,threshold:95}),this.showEditDialog=!0},openEditFromDetail(){this.showDetailDialog=!1,this.openEditDialog(this.currentChannelType,this.currentChannelIndex)},resetAddForm(){this.newChannel={type:"",name:"",enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0}},resetDetailData(){this.currentChannel=null},resetEditData(){this.editChannel={}},onChannelTypeChange(){const{type:t,name:e}=this.newChannel;this.newChannel={type:t,name:e,enabled:!0,botToken:"",chatId:"",proxyUrl:"",endpoint:"",cdnDomain:"",bucketName:"",region:"auto",accessKeyId:"",secretAccessKey:"",pathStyle:!1,quota:{enabled:!1,limitGB:10,threshold:95},channelId:"",isNitro:!1,repo:"",token:"",isPrivate:!1,baseUrl:"",username:"",password:"",publicUrl:"",headersText:"",createDirectory:!0}},confirmAddChannel(){this.$refs.addForm.validate(t=>{if(!t)return;const{type:e,name:s}=this.newChannel,i=this.getSettings(e),n=["Telegram_env","R2_env","S3_env","Discord_env","HuggingFace_env","WebDAV_env"];if(n.includes(s))return void this.$message.warning(this.$t("sysUpload.reservedName"));const a=i.channels.some(t=>t.name===s);if(a)return void this.$message.warning(this.$t("sysUpload.duplicateName"));let o={id:i.channels.length+1,name:this.newChannel.name,type:e,savePath:"database",enabled:!0,fixed:!1};if("telegram"===e)Object.assign(o,{botToken:this.newChannel.botToken,chatId:this.newChannel.chatId,proxyUrl:this.newChannel.proxyUrl});else if("s3"===e)Object.assign(o,{endpoint:this.newChannel.endpoint,cdnDomain:this.newChannel.cdnDomain,bucketName:this.newChannel.bucketName,region:this.newChannel.region,accessKeyId:this.newChannel.accessKeyId,secretAccessKey:this.newChannel.secretAccessKey,pathStyle:this.newChannel.pathStyle,quota:{...this.newChannel.quota}});else if("discord"===e)Object.assign(o,{botToken:this.newChannel.botToken,channelId:this.newChannel.channelId,proxyUrl:this.newChannel.proxyUrl,isNitro:this.newChannel.isNitro});else if("huggingface"===e)Object.assign(o,{repo:this.newChannel.repo,token:this.newChannel.token,isPrivate:this.newChannel.isPrivate});else if("webdav"===e){const t=this.parseHeadersText(this.newChannel.headersText);if(null===t)return void this.$message.warning(this.$t("sysUpload.webdavHeadersInvalid"));Object.assign(o,{baseUrl:this.newChannel.baseUrl,username:this.newChannel.username,password:this.newChannel.password,publicUrl:this.newChannel.publicUrl,headers:t,createDirectory:!1!==this.newChannel.createDirectory,quota:{...this.newChannel.quota}})}i.channels.push(o),this.showAddDialog=!1,this.saveSettings()})},confirmEditChannel(){this.$refs.editForm.validate(t=>{if(!t)return;const e=this.getSettings(this.currentChannelType),s=this.currentChannelIndex,i=e.channels[s]?.name||this.editChannel.name,n={...this.editChannel,name:i};if("webdav"===this.currentChannelType){const t=this.parseHeadersText(n.headersText);if(null===t)return void this.$message.warning(this.$t("sysUpload.webdavHeadersInvalid"));n.headers=t,n.createDirectory=!1!==n.createDirectory,delete n.headersText}e.channels[this.currentChannelIndex]=n,this.showEditDialog=!1,this.saveSettings()})},deleteChannel(t,e){const s=this.getChannelList(t)[e];s.fixed?this.$message.warning(this.$t("sysUpload.fixedChannelCannotDelete")):this.$confirm(this.$t("sysUpload.deleteChannelConfirm"),this.$t("common.warning"),{confirmButtonText:this.$t("common.confirm"),cancelButtonText:this.$t("common.cancel"),type:"warning"}).then(()=>{const s=this.getSettings(t);s.channels.splice(e,1),s.channels.forEach((t,e)=>{t.id=e+1}),this.saveSettings()}).catch(()=>{})},saveSettings(){const t={telegram:this.telegramSettings,cfr2:this.cfr2Settings,s3:this.s3Settings,discord:this.discordSettings,huggingface:this.huggingfaceSettings,webdav:this.webdavSettings};(0,Pe.A)("/api/manage/sysConfig/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).then(()=>{this.$message.success(this.$t("sysOthers.settingsSaved"))})},async refreshQuota(){this.quotaLoading=!0;try{const t=await(0,Pe.A)("/api/manage/quota",{method:"POST"}),e=await t.json();if(e.success)this.quotaStats=e.channelStats||{};else{const t=await(0,Pe.A)("/api/manage/quota"),e=await t.json();e.success&&(this.quotaStats=e.quotaStats||{})}}catch(t){console.error("Failed to refresh quota stats:",t)}finally{this.quotaLoading=!1}},async loadQuotaStats(){try{const t=await(0,Pe.A)("/api/manage/quota"),e=await t.json();e.success&&(this.quotaStats=e.quotaStats||{})}catch(t){console.error("Failed to load quota stats:",t)}},getChannelUsedGB(t){const e=this.quotaStats[t.name];return e?(e.usedMB||0)/1024:0},getQuotaPercentage(t){const e=this.getChannelUsedGB(t),s=t.quota?.limitGB||10,i=e/s*100;return Math.min(100,Math.round(10*i)/10)},getQuotaStatus(t){const e=this.getQuotaPercentage(t),s=t.quota?.threshold||95;return e>=s?"exception":e>=80?"warning":"success"},getQuotaText(t){const e=this.getChannelUsedGB(t),s=t.quota?.limitGB||10;return`${e.toFixed(2)} / ${s} GB`},isQuotaExceeded(t){const e=this.getQuotaPercentage(t),s=t.quota?.threshold||95;return e>=s},getQuotaStatusText(t){const e=this.getQuotaPercentage(t),s=t.quota?.threshold||95;return e>=s?`⚠️ 已达到容量阈值 (${s}%),渠道写入已暂停`:e>=80?"⚡ 容量使用较高,接近阈值":"✓ 容量正常"},async onQuotaEnabledChange(t,e){if(t&&e.name){const t=this.quotaStats[e.name];t||this.$confirm(this.$t("sysUpload.quotaInitConfirm"),this.$t("sysUpload.quotaInitTitle"),{confirmButtonText:this.$t("sysUpload.quotaInitConfirmBtn"),cancelButtonText:this.$t("sysUpload.quotaInitCancelBtn"),type:"info"}).then(async()=>{await this.recalculateQuota()}).catch(()=>{this.$message.info(this.$t("sysUpload.quotaInitLater"))})}},async recalculateQuota(){this.quotaLoading=!0;try{this.$message.info(this.$t("sysUpload.quotaCalculating"));const t=await(0,Pe.A)("/api/manage/quota",{method:"POST"}),e=await t.json();e.success?(this.quotaStats=e.channelStats||{},this.$message.success(this.$t("sysUpload.quotaCalculateSuccess"))):this.$message.error(this.$t("sysUpload.quotaCalculateError")+(e.error||""))}catch(t){console.error("Failed to recalculate quota:",t),this.$message.error(this.$t("sysUpload.quotaCalculateFailed"))}finally{this.quotaLoading=!1}}},mounted(){this.loading=!0,(0,Pe.A)("/api/manage/sysConfig/upload").then(t=>t.json()).then(t=>{this.telegramSettings=t.telegram,t.cfr2&&t.cfr2.channels&&(t.cfr2.channels=t.cfr2.channels.map(t=>({...t,quota:t.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.cfr2Settings=t.cfr2,t.s3&&t.s3.channels&&(t.s3.channels=t.s3.channels.map(t=>({...t,quota:t.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.s3Settings=t.s3,t.discord&&t.discord.channels&&(t.discord.channels=t.discord.channels.map(t=>({...t,proxyUrl:t.proxyUrl||""}))),this.discordSettings=t.discord||{loadBalance:{},channels:[]},t.huggingface&&t.huggingface.channels&&(t.huggingface.channels=t.huggingface.channels.map(t=>({...t,isPrivate:t.isPrivate||!1}))),this.huggingfaceSettings=t.huggingface||{loadBalance:{},channels:[]},t.webdav&&t.webdav.channels&&(t.webdav.channels=t.webdav.channels.map(t=>({...t,username:t.username||"",password:t.password||"",publicUrl:t.publicUrl||"",headers:t.headers||{},createDirectory:!1!==t.createDirectory,quota:t.quota||{enabled:!1,limitGB:10,threshold:95}}))),this.webdavSettings=t.webdav||{loadBalance:{},channels:[]},this.loadQuotaStats()}).finally(()=>{this.loading=!1})}};const Fp=(0,c.A)(Sp,[["render",Cp],["__scopeId","data-v-9a9d7c2a"]]);var Tp=Fp,Pp=s(98469);s(49187);const Mp={class:"save-text"};function Dp(t,e,s,a,o,l){const r=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.Wv)(C.eB,{name:"fade-up"},{default:(0,i.k6)(()=>[(0,i.bo)((0,i.Lk)("div",{class:(0,n.C4)(["floating-save-btn",{"is-loading":s.loading}]),onClick:e[0]||(e[0]=(...t)=>l.handleClick&&l.handleClick(...t))},[s.loading?((0,i.uX)(),(0,i.Wv)(r,{key:0,icon:"spinner",spin:""})):((0,i.uX)(),(0,i.Wv)(r,{key:1,icon:"save"})),(0,i.Lk)("span",Mp,(0,n.v_)(s.loading?t.$t("floatingSave.saving"):t.$t("floatingSave.save")),1)],2),[[C.aG,o.visible]])]),_:1})}var Ap={name:"FloatingSaveButton",emits:["click"],props:{loading:{type:Boolean,default:!1},show:{type:Boolean,default:!0}},data(){return{visible:!1}},watch:{show:{immediate:!0,handler(t){t?setTimeout(()=>{this.visible=!0},600):this.visible=!1}}},methods:{handleClick(){this.loading||this.$emit("click")}}};const $p=(0,c.A)(Ap,[["render",Dp],["__scopeId","data-v-53091626"]]);var Vp=$p,Lp=s(84757);s(5802),s(64752),s(38736);const Ep={class:"security-settings"},Ip={class:"first-settings"},Up={class:"first-title"},Op={class:"second-title"},Rp={style:{display:"flex",gap:"8px",width:"100%"}},Wp={class:"second-title"},Bp={style:{display:"flex",gap:"8px",width:"100%"}},Np={class:"second-title token-title"},zp={class:"token-actions"},jp={class:"token-table-container"},qp={class:"table-cell-content"},Hp={class:"table-cell-content"},Xp={class:"token-display"},Kp={class:"table-cell-content"},Qp={class:"table-cell-content"},Yp={class:"table-cell-content"},Gp={class:"table-cell-content"},Jp={class:"table-cell-content action-buttons"},Zp={class:"first-settings"},tg={class:"first-title"},eg={class:"second-title"},sg={class:"second-title"},ig={class:"query-param-list"},ng={class:"query-param-list"},ag={class:"first-settings"},og={class:"first-title"},lg={class:"second-title"},rg={class:"second-title"},dg={class:"second-title"},cg={class:"form-item-hint"},hg={class:"form-item-hint"},ug={style:{display:"flex",gap:"10px",width:"100%"}},pg={class:"dialog-footer"},gg={style:{display:"flex",gap:"10px",width:"100%"}},fg={class:"dialog-footer"},mg={class:"token-result"},bg={style:{"margin-bottom":"15px",color:"#e6a23c"}},yg={class:"dialog-footer"};function xg(t,e,s,a,o,l){const r=wu.WK,d=Pp.dI,c=_u.xE,h=_u.US,u=(0,i.g2)("font-awesome-icon"),p=K.S2,f=Lp.o8,m=Fu.u,b=Lp.Up,y=g.R7,x=Su.qi,_=Cu.P9,k=Cu.AV,S=ku.lq,F=Vp,T=Pp.o5,P=w.kZ,M=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Ep,[(0,i.Lk)("div",Ip,[(0,i.Lk)("h3",Up,(0,n.v_)(t.$t("sysSecurity.authManagement")),1),(0,i.Lk)("h4",Op,(0,n.v_)(t.$t("sysSecurity.userAuth")),1),(0,i.bF)(h,{model:o.authSettings.user,rules:l.userPassRules,ref:"userPassForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:t.$t("sysSecurity.uploadPassword"),prop:"authCode"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Rp,[(0,i.bF)(r,{modelValue:o.authSettings.user.authCode,"onUpdate:modelValue":e[0]||(e[0]=t=>o.authSettings.user.authCode=t),type:"password","show-password":"",onInput:l.handleUserPassInput,autocomplete:"new-password",placeholder:o.authSettings.user._hasPassword?t.$t("sysSecurity.passwordUnchanged"):"",disabled:o.clearUserPassword},null,8,["modelValue","onInput","placeholder","disabled"]),o.authSettings.user._hasPassword?((0,i.uX)(),(0,i.Wv)(d,{key:0,modelValue:o.clearUserPassword,"onUpdate:modelValue":e[1]||(e[1]=t=>o.clearUserPassword=t),onChange:l.handleClearUserPassword},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.clearPassword")),1)]),_:1},8,["modelValue","onChange"])):(0,i.Q3)("",!0)])]),_:1},8,["label"]),(0,i.bF)(C.eB,{name:"fade-slide",mode:"out-in"},{default:(0,i.k6)(()=>[o.showUserPassConfirm?((0,i.uX)(),(0,i.Wv)(c,{label:t.$t("sysSecurity.confirmPassword"),prop:"confirmNewUserPassword",key:"user-confirm"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.user.confirmNewUserPassword,"onUpdate:modelValue":e[2]||(e[2]=t=>o.authSettings.user.confirmNewUserPassword=t),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",Wp,(0,n.v_)(t.$t("sysSecurity.adminAuth")),1),(0,i.bF)(h,{model:o.authSettings.admin,rules:l.adminPassRules,ref:"adminPassForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:t.$t("sysSecurity.adminUsername"),prop:"adminUsername"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.admin.adminUsername,"onUpdate:modelValue":e[3]||(e[3]=t=>o.authSettings.admin.adminUsername=t),autocomplete:"new-password",disabled:o.clearAdminPassword},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.adminPassword"),prop:"adminPassword"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Bp,[(0,i.bF)(r,{modelValue:o.authSettings.admin.adminPassword,"onUpdate:modelValue":e[4]||(e[4]=t=>o.authSettings.admin.adminPassword=t),type:"password","show-password":"",onInput:l.handleAdminPassInput,autocomplete:"new-password",placeholder:o.authSettings.admin._hasPassword?t.$t("sysSecurity.passwordUnchanged"):"",disabled:o.clearAdminPassword},null,8,["modelValue","onInput","placeholder","disabled"]),o.authSettings.admin._hasPassword?((0,i.uX)(),(0,i.Wv)(d,{key:0,modelValue:o.clearAdminPassword,"onUpdate:modelValue":e[5]||(e[5]=t=>o.clearAdminPassword=t),onChange:l.handleClearAdminPassword},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.clearPassword")),1)]),_:1},8,["modelValue","onChange"])):(0,i.Q3)("",!0)])]),_:1},8,["label"]),(0,i.bF)(C.eB,{name:"fade-slide",mode:"out-in"},{default:(0,i.k6)(()=>[o.showAdminPassConfirm?((0,i.uX)(),(0,i.Wv)(c,{label:t.$t("sysSecurity.confirmPassword"),prop:"confirmNewAdminPassword",key:"admin-confirm"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.authSettings.admin.confirmNewAdminPassword,"onUpdate:modelValue":e[6]||(e[6]=t=>o.authSettings.admin.confirmNewAdminPassword=t),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",Np,[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.apiTokenManagement"))+" ",1),(0,i.Lk)("a",zp,[(0,i.bF)(p,{type:"primary",size:"small",onClick:e[7]||(e[7]=t=>o.showCreateTokenDialog=!0),circle:""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"})]),_:1})])]),(0,i.Lk)("div",jp,[(0,i.bo)(((0,i.uX)(),(0,i.Wv)(b,{data:o.apiTokens,class:"token-table"},{default:(0,i.k6)(()=>[(0,i.bF)(f,{prop:"name",label:t.$t("sysSecurity.tokenName"),"header-align":"center"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",qp,(0,n.v_)(t.row.name),1)]),_:1},8,["label"]),(0,i.bF)(f,{prop:"token",label:t.$t("sysSecurity.tokenValue"),"header-align":"center"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",Hp,[(0,i.Lk)("span",Xp,(0,n.v_)(t.row.token),1)])]),_:1},8,["label"]),(0,i.bF)(f,{prop:"permissions",label:t.$t("sysSecurity.permissions"),"header-align":"center"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",Kp,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(t.row.permissions,t=>((0,i.uX)(),(0,i.Wv)(m,{key:t,size:"small",class:"permission-tag"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getPermissionText(t)),1)]),_:2},1024))),128))])]),_:1},8,["label"]),(0,i.bF)(f,{prop:"createdAt",label:t.$t("sysSecurity.createdAt"),"header-align":"center"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",Qp,(0,n.v_)(l.formatDate(t.row.createdAt)),1)]),_:1},8,["label"]),(0,i.bF)(f,{label:t.$t("sysSecurity.status"),"header-align":"center",width:"90"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",Yp,[(0,i.bF)(m,{type:"active"===l.getTokenStatus(t.row.expiresAt).status?"success":"danger",size:"small"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.getTokenStatus(t.row.expiresAt).label),1)]),_:2},1032,["type"])])]),_:1},8,["label"]),(0,i.bF)(f,{label:t.$t("sysSecurity.expiresAt"),"header-align":"center"},{default:(0,i.k6)(t=>[(0,i.Lk)("div",Gp,(0,n.v_)(l.getTokenStatus(t.row.expiresAt).expiresText),1)]),_:1},8,["label"]),(0,i.bF)(f,{label:t.$t("sysSecurity.operation"),fixed:"right","header-align":"center"},{default:(0,i.k6)(e=>[(0,i.Lk)("div",Jp,[(0,i.bF)(p,{class:"action-button",size:"small",onClick:t=>l.editToken(e.row)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.editBtn")),1)]),_:1},8,["onClick"]),(0,i.bF)(p,{class:"action-button",size:"small",type:"danger",onClick:t=>l.deleteToken(e.row.id)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.deleteBtn")),1)]),_:1},8,["onClick"])])]),_:1},8,["label"])]),_:1},8,["data"])),[[M,o.tokenLoading]])])]),(0,i.Lk)("div",Zp,[(0,i.Lk)("h3",tg,(0,n.v_)(t.$t("sysSecurity.uploadManagement")),1),(0,i.Lk)("h4",eg,[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.imageReview"))+" ",1),(0,i.bF)(y,{content:t.$t("sysSecurity.imageReviewTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(h,{model:o.uploadSettings.moderate,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:t.$t("sysSecurity.enableReview")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.uploadSettings.moderate.enabled,"onUpdate:modelValue":e[8]||(e[8]=t=>o.uploadSettings.moderate.enabled=t)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.reviewChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.uploadSettings.moderate.channel,"onUpdate:modelValue":e[9]||(e[9]=t=>o.uploadSettings.moderate.channel=t),placeholder:t.$t("sysSecurity.reviewChannelPlaceholder")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{label:"moderatecontent.com",value:"moderatecontent.com"}),(0,i.bF)(_,{label:"nsfwjs",value:"nsfwjs"})]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),"moderatecontent.com"===o.uploadSettings.moderate.channel?((0,i.uX)(),(0,i.Wv)(c,{key:0,label:t.$t("sysSecurity.apiKey")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.moderate.moderateContentApiKey,"onUpdate:modelValue":e[10]||(e[10]=t=>o.uploadSettings.moderate.moderateContentApiKey=t)},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0),"nsfwjs"===o.uploadSettings.moderate.channel?((0,i.uX)(),(0,i.Wv)(c,{key:1,label:t.$t("sysSecurity.apiPath")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.moderate.nsfwApiPath,"onUpdate:modelValue":e[11]||(e[11]=t=>o.uploadSettings.moderate.nsfwApiPath=t),placeholder:"https://nsfwjs.your.domain"},null,8,["modelValue"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1},8,["model"]),(0,i.Lk)("h4",sg,[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.ipQuery"))+" ",1),(0,i.bF)(y,{content:t.$t("sysSecurity.ipQueryTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(h,{model:o.uploadSettings.ipQuery,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:t.$t("sysSecurity.enableIpQuery")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.uploadSettings.ipQuery.enabled,"onUpdate:modelValue":e[12]||(e[12]=t=>o.uploadSettings.ipQuery.enabled=t)},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.ipQueryChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(k,{modelValue:o.uploadSettings.ipQuery.channel,"onUpdate:modelValue":e[13]||(e[13]=t=>o.uploadSettings.ipQuery.channel=t),placeholder:t.$t("sysSecurity.ipQueryChannelPlaceholder")},{default:(0,i.k6)(()=>[(0,i.bF)(_,{label:t.$t("sysSecurity.customApi"),value:"customApi"},null,8,["label"])]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),"customApi"===o.uploadSettings.ipQuery.channel?((0,i.uX)(),(0,i.CE)(i.FK,{key:0},[(0,i.bF)(c,{label:t.$t("sysSecurity.apiPath")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.uploadSettings.ipQuery.customApi.url,"onUpdate:modelValue":e[14]||(e[14]=t=>o.uploadSettings.ipQuery.customApi.url=t),placeholder:"https://api.example.com/ip"},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.queryParams")},{default:(0,i.k6)(()=>[(0,i.Lk)("div",ig,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.uploadSettings.ipQuery.customApi.params,(e,s)=>((0,i.uX)(),(0,i.CE)("div",{key:s,class:"query-param-row"},[(0,i.bF)(r,{modelValue:e.key,"onUpdate:modelValue":t=>e.key=t,placeholder:t.$t("sysSecurity.paramNamePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(r,{modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,placeholder:t.$t("sysSecurity.paramValuePlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(p,{type:"danger",plain:"",circle:"",onClick:t=>l.removeIpQueryParam(s),disabled:o.uploadSettings.ipQuery.customApi.params.length<=1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"trash-alt"})]),_:1},8,["onClick","disabled"])]))),128)),(0,i.bF)(p,{type:"primary",plain:"",onClick:l.addIpQueryParam},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysSecurity.addQueryParam")),1)]),_:1},8,["onClick"])])]),_:1},8,["label"]),(0,i.bF)(c,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.responseFields"))+" ",1),(0,i.bF)(y,{content:t.$t("sysSecurity.responseFieldsTip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",ng,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.uploadSettings.ipQuery.customApi.responseFields,(e,s)=>((0,i.uX)(),(0,i.CE)("div",{key:s,class:"response-field-row"},[(0,i.bF)(r,{modelValue:o.uploadSettings.ipQuery.customApi.responseFields[s],"onUpdate:modelValue":t=>o.uploadSettings.ipQuery.customApi.responseFields[s]=t,placeholder:t.$t("sysSecurity.responseFieldPathPlaceholder")},null,8,["modelValue","onUpdate:modelValue","placeholder"]),(0,i.bF)(p,{plain:"",circle:"",onClick:t=>l.moveIpQueryResponseField(s,-1),disabled:0===s},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"arrow-up"})]),_:1},8,["onClick","disabled"]),(0,i.bF)(p,{plain:"",circle:"",onClick:t=>l.moveIpQueryResponseField(s,1),disabled:s===o.uploadSettings.ipQuery.customApi.responseFields.length-1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"arrow-down"})]),_:1},8,["onClick","disabled"]),(0,i.bF)(p,{type:"danger",plain:"",circle:"",onClick:t=>l.removeIpQueryResponseField(s)},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"trash-alt"})]),_:1},8,["onClick"])]))),128)),(0,i.bF)(p,{type:"primary",plain:"",onClick:l.addIpQueryResponseField},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"plus"}),(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysSecurity.addResponseField")),1)]),_:1},8,["onClick"])])]),_:1})],64)):(0,i.Q3)("",!0)]),_:1},8,["model"])]),(0,i.Lk)("div",ag,[(0,i.Lk)("h3",og,(0,n.v_)(t.$t("sysSecurity.accessManagement")),1),(0,i.Lk)("h4",lg,(0,n.v_)(t.$t("sysSecurity.domainFilter")),1),(0,i.bF)(h,{model:o.accessSettings,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.allowedDomains"))+" ",1),(0,i.bF)(y,{content:t.$t("sysSecurity.allowedDomainsTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.accessSettings.allowedDomains,"onUpdate:modelValue":e[15]||(e[15]=t=>o.accessSettings.allowedDomains=t)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h4",rg,(0,n.v_)(t.$t("sysSecurity.whiteListMode")),1),(0,i.bF)(h,{model:o.accessSettings,rules:l.accessRules,ref:"accessForm","label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.enableWhiteList"))+" ",1),(0,i.bF)(y,{content:t.$t("sysSecurity.enableWhiteListTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.whiteListMode,"onUpdate:modelValue":e[16]||(e[16]=t=>o.accessSettings.whiteListMode=t)},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"]),(0,i.Lk)("h4",dg,(0,n.v_)(t.$t("sysSecurity.sessionSecurityPolicy")),1),(0,i.bF)(h,{model:o.accessSettings,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,null,{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.secureMode"))+" ",1),(0,i.bF)(y,{content:t.$t("sysSecurity.secureModeTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.accessSettings.sessionSecure,"onUpdate:modelValue":e[17]||(e[17]=t=>o.accessSettings.sessionSecure=t)},null,8,["modelValue"])]),_:1}),(0,i.bF)(c,{label:t.$t("sysSecurity.userSessionMaxAge"),prop:"userSessionMaxAge"},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.accessSettings.userSessionMaxAge,"onUpdate:modelValue":e[18]||(e[18]=t=>o.accessSettings.userSessionMaxAge=t),min:1,max:3650,step:1,precision:0,"controls-position":"right"},null,8,["modelValue"]),(0,i.Lk)("span",cg,(0,n.v_)(t.$t("sysSecurity.sessionMaxAgeUnit")),1)]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.adminSessionMaxAge"),prop:"adminSessionMaxAge"},{default:(0,i.k6)(()=>[(0,i.bF)(S,{modelValue:o.accessSettings.adminSessionMaxAge,"onUpdate:modelValue":e[19]||(e[19]=t=>o.accessSettings.adminSessionMaxAge=t),min:1,max:3650,step:1,precision:0,"controls-position":"right"},null,8,["modelValue"]),(0,i.Lk)("span",hg,(0,n.v_)(t.$t("sysSecurity.sessionMaxAgeUnit")),1)]),_:1},8,["label"])]),_:1},8,["model"])]),(0,i.bF)(F,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"]),(0,i.bF)(P,{modelValue:o.showCreateTokenDialog,"onUpdate:modelValue":e[27]||(e[27]=t=>o.showCreateTokenDialog=t),title:t.$t("sysSecurity.createTokenTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",pg,[(0,i.bF)(p,{onClick:e[26]||(e[26]=t=>o.showCreateTokenDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("common.cancel")),1)]),_:1}),(0,i.bF)(p,{type:"primary",onClick:l.createToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.createBtn")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.bF)(h,{model:o.newToken,rules:l.tokenRules,ref:"tokenForm","label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:t.$t("sysSecurity.tokenNameLabel"),prop:"name"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.newToken.name,"onUpdate:modelValue":e[20]||(e[20]=t=>o.newToken.name=t),placeholder:t.$t("sysSecurity.tokenNamePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.permissionsLabel"),prop:"permissions"},{default:(0,i.k6)(()=>[(0,i.bF)(T,{modelValue:o.newToken.permissions,"onUpdate:modelValue":e[21]||(e[21]=t=>o.newToken.permissions=t)},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:"upload"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permUpload")),1)]),_:1}),(0,i.bF)(d,{label:"delete"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permDelete")),1)]),_:1}),(0,i.bF)(d,{label:"list"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permList")),1)]),_:1}),(0,i.bF)(d,{label:"manage"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permManage")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.neverExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.newToken.neverExpire,"onUpdate:modelValue":e[22]||(e[22]=t=>o.newToken.neverExpire=t),onChange:l.onCreateNeverExpireChange},null,8,["modelValue","onChange"])]),_:1},8,["label"]),o.newToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(c,{key:0,label:t.$t("sysSecurity.validPeriod"),prop:"expirationValue"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",ug,[(0,i.bF)(S,{modelValue:o.newToken.expirationValue,"onUpdate:modelValue":e[23]||(e[23]=t=>o.newToken.expirationValue=t),min:1,step:1,"controls-position":"right",style:{flex:"1"}},null,8,["modelValue"]),(0,i.bF)(k,{modelValue:o.newToken.expirationUnit,"onUpdate:modelValue":e[24]||(e[24]=t=>o.newToken.expirationUnit=t),style:{width:"100px"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.timeUnitOptions,e=>((0,i.uX)(),(0,i.Wv)(_,{key:e.value,label:t.$t(e.labelKey),value:e.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["label"])),o.newToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(c,{key:1,label:t.$t("sysSecurity.autoDeleteOnExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.newToken.autoDelete,"onUpdate:modelValue":e[25]||(e[25]=t=>o.newToken.autoDelete=t)},null,8,["modelValue"])]),_:1},8,["label"]))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","width"]),(0,i.bF)(P,{modelValue:o.showEditTokenDialog,"onUpdate:modelValue":e[35]||(e[35]=t=>o.showEditTokenDialog=t),title:t.$t("sysSecurity.editTokenTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",fg,[(0,i.bF)(p,{onClick:e[34]||(e[34]=t=>o.showEditTokenDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("common.cancel")),1)]),_:1}),(0,i.bF)(p,{type:"primary",onClick:l.updateToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.updateBtn")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.bF)(h,{model:o.editingToken,rules:l.editTokenRules,ref:"editTokenForm","label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:t.$t("sysSecurity.tokenNameLabel")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.editingToken.name,"onUpdate:modelValue":e[28]||(e[28]=t=>o.editingToken.name=t),disabled:""},null,8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.permissionsLabel"),prop:"permissions"},{default:(0,i.k6)(()=>[(0,i.bF)(T,{modelValue:o.editingToken.permissions,"onUpdate:modelValue":e[29]||(e[29]=t=>o.editingToken.permissions=t)},{default:(0,i.k6)(()=>[(0,i.bF)(d,{label:"upload"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permUpload")),1)]),_:1}),(0,i.bF)(d,{label:"delete"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permDelete")),1)]),_:1}),(0,i.bF)(d,{label:"list"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permList")),1)]),_:1}),(0,i.bF)(d,{label:"manage"},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.permManage")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.neverExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.editingToken.neverExpire,"onUpdate:modelValue":e[30]||(e[30]=t=>o.editingToken.neverExpire=t),onChange:l.onEditNeverExpireChange},null,8,["modelValue","onChange"])]),_:1},8,["label"]),o.editingToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(c,{key:0,label:t.$t("sysSecurity.validPeriod"),prop:"expirationValue"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",gg,[(0,i.bF)(S,{modelValue:o.editingToken.expirationValue,"onUpdate:modelValue":e[31]||(e[31]=t=>o.editingToken.expirationValue=t),min:1,step:1,"controls-position":"right",style:{flex:"1"}},null,8,["modelValue"]),(0,i.bF)(k,{modelValue:o.editingToken.expirationUnit,"onUpdate:modelValue":e[32]||(e[32]=t=>o.editingToken.expirationUnit=t),style:{width:"100px"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.timeUnitOptions,e=>((0,i.uX)(),(0,i.Wv)(_,{key:e.value,label:t.$t(e.labelKey),value:e.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])]),_:1},8,["label"])),o.editingToken.neverExpire?(0,i.Q3)("",!0):((0,i.uX)(),(0,i.Wv)(c,{key:1,label:t.$t("sysSecurity.autoDeleteOnExpire")},{default:(0,i.k6)(()=>[(0,i.bF)(x,{modelValue:o.editingToken.autoDelete,"onUpdate:modelValue":e[33]||(e[33]=t=>o.editingToken.autoDelete=t)},null,8,["modelValue"])]),_:1},8,["label"]))]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title","width"]),(0,i.bF)(P,{modelValue:o.showTokenResultDialog,"onUpdate:modelValue":e[38]||(e[38]=t=>o.showTokenResultDialog=t),title:t.$t("sysSecurity.tokenCreatedTitle"),width:l.dialogWidth},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",yg,[(0,i.bF)(p,{type:"primary",onClick:e[37]||(e[37]=t=>o.showTokenResultDialog=!1)},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.savedBtn")),1)]),_:1})])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",mg,[(0,i.Lk)("p",bg,[(0,i.bF)(u,{icon:"exclamation-triangle",style:{"margin-right":"5px"}}),(0,i.eW)(" "+(0,n.v_)(t.$t("sysSecurity.tokenCreatedWarning")),1)]),(0,i.bF)(h,{"label-width":"100px"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{label:t.$t("sysSecurity.tokenNameLabel")},{default:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(o.createdToken.name),1)]),_:1},8,["label"]),(0,i.bF)(c,{label:t.$t("sysSecurity.fullToken")},{default:(0,i.k6)(()=>[(0,i.bF)(r,{modelValue:o.createdToken.token,"onUpdate:modelValue":e[36]||(e[36]=t=>o.createdToken.token=t),readonly:""},{append:(0,i.k6)(()=>[(0,i.bF)(p,{onClick:l.copyToken},{default:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(t.$t("sysSecurity.copyBtn")),1)]),_:1},8,["onClick"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1})])]),_:1},8,["modelValue","title","width"])])),[[M,o.loading]])}s(81148);const vg={s:1e3,m:6e4,h:36e5,d:864e5};function _g(t,e,s){if(!Number.isFinite(e)||e<=0)throw new Error("有效期数值必须大于 0");const i="string"===typeof t?new Date(t):new Date(t.getTime());if(vg[s])return new Date(i.getTime()+e*vg[s]).toISOString();if("M"===s)return i.setUTCMonth(i.getUTCMonth()+e),i.toISOString();if("Y"===s)return i.setUTCFullYear(i.getUTCFullYear()+e),i.toISOString();throw new Error(`无效的时间单位: ${s}`)}function kg(t){const e=new Date(t),s=e.getFullYear(),i=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),a=String(e.getHours()).padStart(2,"0"),o=String(e.getMinutes()).padStart(2,"0"),l=String(e.getSeconds()).padStart(2,"0");return`${s}-${i}-${n} ${a}:${o}:${l}`}function wg(t,e=new Date){if(null===t||void 0===t)return{status:"active",label:"有效",expiresText:"永不过期"};const s=new Date(t),i=e instanceof Date?e:new Date(e),n=kg(t);return i.getTime()>s.getTime()?{status:"expired",label:"已过期",expiresText:n}:{status:"active",label:"有效",expiresText:n}}var Cg={components:{FloatingSaveButton:Vp},data(){return{authSettings:{user:{},admin:{}},uploadSettings:{moderate:{},ipQuery:{enabled:!1,channel:"customApi",customApi:{url:"",params:[{key:"ip",value:"{ip}"}],responseFields:[]}}},accessSettings:{},apiTokens:[],loading:!0,tokenLoading:!1,oriUserPassword:"",oriAdminPassword:"",showUserPassConfirm:!1,showAdminPassConfirm:!1,clearUserPassword:!1,clearAdminPassword:!1,showCreateTokenDialog:!1,showEditTokenDialog:!1,showTokenResultDialog:!1,timeUnitOptions:[{labelKey:"sysSecurity.timeUnitSeconds",value:"s"},{labelKey:"sysSecurity.timeUnitMinutes",value:"m"},{labelKey:"sysSecurity.timeUnitHours",value:"h"},{labelKey:"sysSecurity.timeUnitDays",value:"d"},{labelKey:"sysSecurity.timeUnitMonths",value:"M"},{labelKey:"sysSecurity.timeUnitYears",value:"Y"}],newToken:{name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},editingToken:{id:"",name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},createdToken:{name:"",token:""}}},computed:{dialogWidth(){return window.innerWidth>768?"50%":"90%"},userPassRules(){return{authCode:[{validator:(t,e,s)=>{const i=["%","&","?","#","/"],n=i.some(t=>e&&e.includes(t));n?s(new Error(this.$t("sysSecurity.passwordUrlReserved"))):s()},trigger:"blur"}],confirmNewUserPassword:[{validator:(t,e,s)=>{e?e!==this.authSettings.user.authCode?s(new Error(this.$t("sysSecurity.passwordMismatch"))):s():s(new Error(this.$t("sysSecurity.confirmUploadPassword")))},trigger:"blur"}]}},adminPassRules(){return{confirmNewAdminPassword:[{validator:(t,e,s)=>{e?e!==this.authSettings.admin.adminPassword?s(new Error(this.$t("sysSecurity.passwordMismatch"))):s():s(new Error(this.$t("sysSecurity.confirmAdminPassword")))},trigger:"blur"}]}},accessRules(){const t=(t,e,s)=>{!Number.isInteger(e)||e<1||e>3650?s(new Error(this.$t("sysSecurity.sessionMaxAgeInvalid"))):s()};return{userSessionMaxAge:[{validator:t,trigger:"change"}],adminSessionMaxAge:[{validator:t,trigger:"change"}]}},tokenRules(){return{name:[{required:!0,message:this.$t("sysSecurity.tokenNameRequired"),trigger:"blur"}],permissions:[{required:!0,message:this.$t("sysSecurity.permissionsRequired"),trigger:"change"}],expirationValue:[{validator:(t,e,s)=>{this.newToken.neverExpire||e&&!(e<=0)?s():s(new Error(this.$t("sysSecurity.validPeriodRequired")))},trigger:"blur"}]}},editTokenRules(){return{permissions:[{required:!0,message:this.$t("sysSecurity.permissionsRequired"),trigger:"change"}],expirationValue:[{validator:(t,e,s)=>{this.editingToken.neverExpire||e&&!(e<=0)?s():s(new Error(this.$t("sysSecurity.validPeriodRequired")))},trigger:"blur"}]}}},methods:{normalizeIpQuerySettings(t={}){const e=t.ipQuery||{},s=e.customApi||{},i=Array.isArray(s.params)&&s.params.length>0?s.params.map(t=>({key:t?.key||"",value:t?.value||""})):[{key:"ip",value:"{ip}"}],n=Array.isArray(s.responseFields)?s.responseFields.map(t=>"string"===typeof t?t:t?.path||""):[];return{...t,moderate:t.moderate||{},ipQuery:{enabled:e.enabled??!1,channel:e.channel||"customApi",customApi:{url:s.url||"",params:i,responseFields:n}}}},addIpQueryParam(){this.uploadSettings.ipQuery.customApi.params.push({key:"",value:""})},removeIpQueryParam(t){this.uploadSettings.ipQuery.customApi.params.length<=1||this.uploadSettings.ipQuery.customApi.params.splice(t,1)},addIpQueryResponseField(){this.uploadSettings.ipQuery.customApi.responseFields.push("")},removeIpQueryResponseField(t){this.uploadSettings.ipQuery.customApi.responseFields.splice(t,1)},moveIpQueryResponseField(t,e){const s=this.uploadSettings.ipQuery.customApi.responseFields,i=t+e;if(i<0||i>=s.length)return;const[n]=s.splice(t,1);s.splice(i,0,n)},handleUserPassInput(){this.authSettings.user.authCode!==this.oriUserPassword?this.showUserPassConfirm=!0:this.showUserPassConfirm=!1},handleAdminPassInput(){this.authSettings.admin.adminPassword!==this.oriAdminPassword?this.showAdminPassConfirm=!0:this.showAdminPassConfirm=!1},handleClearUserPassword(t){t&&(this.authSettings.user.authCode="",this.showUserPassConfirm=!1)},handleClearAdminPassword(t){t&&(this.authSettings.admin.adminPassword="",this.authSettings.admin.adminUsername="",this.showAdminPassConfirm=!1)},getPermissionText(t){const e={upload:this.$t("sysSecurity.permUpload"),delete:this.$t("sysSecurity.permDelete"),list:this.$t("sysSecurity.permList"),manage:this.$t("sysSecurity.permManage")};return e[t]||t},formatDate(t){return new Date(t).toLocaleString("zh-CN")},async loadApiTokens(){this.tokenLoading=!0;try{const t=await(0,Pe.A)("/api/manage/apiTokens"),e=await t.json();this.apiTokens=e.tokens||[]}catch(t){this.$message.error(this.$t("sysSecurity.tokenListFailed"))}finally{this.tokenLoading=!1}},createToken(){this.$refs.tokenForm.validate(async t=>{if(t)try{this.newToken.owner="admin";let t=null,e=!1;this.newToken.neverExpire||(t=_g(new Date,this.newToken.expirationValue,this.newToken.expirationUnit),e=this.newToken.autoDelete);const s=await(0,Pe.A)("/api/manage/apiTokens",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:this.newToken.name,owner:this.newToken.owner,permissions:this.newToken.permissions,expiresAt:t,autoDelete:e})}),i=await s.json();s.ok?(this.createdToken={name:i.name,token:i.token},this.showCreateTokenDialog=!1,this.showTokenResultDialog=!0,this.newToken={name:"",owner:"",permissions:[],neverExpire:!0,expirationValue:1,expirationUnit:"d",autoDelete:!1},await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenCreateSuccess"))):this.$message.error(i.error||this.$t("sysSecurity.tokenCreateFailed"))}catch(e){this.$message.error(this.$t("sysSecurity.tokenCreateFailed"))}})},editToken(t){const e=null!==t.expiresAt&&void 0!==t.expiresAt;this.editingToken={id:t.id,name:t.name,owner:t.owner,permissions:[...t.permissions],neverExpire:!e,expirationValue:1,expirationUnit:"d",autoDelete:t.autoDelete||!1},this.showEditTokenDialog=!0},updateToken(){this.$refs.editTokenForm.validate(async t=>{if(t)try{let t=null,e=!1;this.editingToken.neverExpire||(t=_g(new Date,this.editingToken.expirationValue,this.editingToken.expirationUnit),e=this.editingToken.autoDelete);const s=await(0,Pe.A)("/api/manage/apiTokens",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokenId:this.editingToken.id,permissions:this.editingToken.permissions,expiresAt:t,autoDelete:e})}),i=await s.json();s.ok?(this.showEditTokenDialog=!1,await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenUpdateSuccess"))):this.$message.error(i.error||this.$t("sysSecurity.tokenUpdateFailed"))}catch(e){this.$message.error(this.$t("sysSecurity.tokenUpdateFailed"))}})},async deleteToken(t){try{await this.$confirm(this.$t("sysSecurity.tokenDeleteConfirm"),this.$t("sysSecurity.tokenDeleteConfirmTitle"),{confirmButtonText:this.$t("sysSecurity.tokenDeleteConfirmOk"),cancelButtonText:this.$t("sysSecurity.tokenDeleteConfirmCancel"),type:"warning"});const e=await(0,Pe.A)(`/api/manage/apiTokens?id=${t}`,{method:"DELETE"}),s=await e.json();e.ok?(await this.loadApiTokens(),this.$message.success(this.$t("sysSecurity.tokenDeleteSuccess"))):this.$message.error(s.error||this.$t("sysSecurity.tokenDeleteFailed"))}catch(e){"cancel"!==e&&this.$message.error(this.$t("sysSecurity.tokenDeleteFailed"))}},async copyToken(){try{await navigator.clipboard.writeText(this.createdToken.token),this.$message.success(this.$t("sysSecurity.tokenCopied"))}catch(t){this.$message.error(this.$t("sysSecurity.copyFailed"))}},onCreateNeverExpireChange(t){t&&(this.newToken.autoDelete=!1)},onEditNeverExpireChange(t){t&&(this.editingToken.autoDelete=!1)},getTokenStatus(t){return wg(t)},saveSettings(){let t=[];t.push(new Promise(t=>{this.$refs.userPassForm.validate(e=>{t(e)})})),t.push(new Promise(t=>{this.$refs.adminPassForm.validate(e=>{t(e)})})),t.push(new Promise(t=>{this.$refs.accessForm.validate(e=>{t(e)})})),Promise.all(t).then(t=>{const e=t.every(t=>t);if(!e)return;if(this.accessSettings.userSessionMaxAge<1||!Number.isInteger(this.accessSettings.userSessionMaxAge)||this.accessSettings.userSessionMaxAge>3650||this.accessSettings.adminSessionMaxAge<1||!Number.isInteger(this.accessSettings.adminSessionMaxAge)||this.accessSettings.adminSessionMaxAge>3650)return void this.$message.error(this.$t("sysSecurity.sessionMaxAgeInvalid"));const s={auth:this.authSettings,upload:this.uploadSettings,access:this.accessSettings};delete s.auth.user.confirmNewUserPassword,delete s.auth.admin.confirmNewAdminPassword,this.clearUserPassword&&(s.auth.user._clear=!0,s.auth.user.authCode=""),this.clearAdminPassword&&(s.auth.admin._clear=!0,s.auth.admin.adminPassword=""),(0,Pe.A)("/api/manage/sysConfig/security",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}).then(t=>t.json()).then(t=>{if(t.adminPasswordChanged){const t=this.$t("sysSecurity.adminPasswordChangedRelogin");return this.$message.warning(t),void setTimeout(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")},1500)}this.$message.success(this.$t("sysSecurity.settingsSaved")),this.authSettings.user.authCode="",this.authSettings.admin.adminPassword="",this.oriUserPassword="",this.oriAdminPassword="",s.auth.user.authCode&&!s.auth.user._clear?this.authSettings.user._hasPassword=!0:s.auth.user._clear&&(this.authSettings.user._hasPassword=!1),s.auth.admin.adminPassword&&!s.auth.admin._clear?this.authSettings.admin._hasPassword=!0:s.auth.admin._clear&&(this.authSettings.admin._hasPassword=!1),this.showUserPassConfirm=!1,this.showAdminPassConfirm=!1,this.clearUserPassword=!1,this.clearAdminPassword=!1}).catch(()=>{})})}},mounted(){this.loading=!0,(0,Pe.A)("/api/manage/sysConfig/security").then(t=>t.json()).then(t=>{this.authSettings=t.auth,this.uploadSettings=this.normalizeIpQuerySettings(t.upload),this.accessSettings=t.access,this.oriUserPassword="",this.oriAdminPassword="",this.authSettings.user.confirmNewUserPassword="",this.authSettings.admin.confirmNewAdminPassword="",this.loadApiTokens()}).finally(()=>{this.loading=!1})}};const Sg=(0,c.A)(Cg,[["render",xg],["__scopeId","data-v-906380e0"]]);var Fg=Sg;const Tg={class:"page-settings"},Pg={class:"first-title"};function Mg(t,e,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),d=g.R7,c=Cu.P9,h=Cu.AV,u=Su.qi,p=wu.WK,f=_u.xE,m=_u.US,b=Vp,y=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Tg,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.groupedSettings,(e,s)=>((0,i.uX)(),(0,i.CE)("div",{key:s,class:"first-settings"},[(0,i.Lk)("h3",Pg,(0,n.v_)(s),1),(0,i.bF)(m,{model:o.settings,"label-width":"150px"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e,(e,s)=>((0,i.uX)(),(0,i.Wv)(f,{key:e.id},{label:(0,i.k6)(()=>[(0,i.eW)((0,n.v_)(l.localized(e,"label"))+" ",1),e.tooltip?((0,i.uX)(),(0,i.Wv)(d,{key:0,content:l.localized(e,"tooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])):(0,i.Q3)("",!0)]),default:(0,i.k6)(()=>["select"===e.type?((0,i.uX)(),(0,i.Wv)(h,{key:0,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,disabled:e.fixed,placeholder:l.localized(e,"placeholder"),style:{width:"100%"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.options,t=>((0,i.uX)(),(0,i.Wv)(c,{key:t.value,label:l.localizedOption(t),value:t.value},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","disabled","placeholder"])):"channelName"===e.type?((0,i.uX)(),(0,i.Wv)(h,{key:1,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,disabled:!l.currentUploadChannel||0===l.currentChannelList.length,placeholder:t.$t("sysPage.channelSelectPlaceholder"),clearable:"",style:{width:"100%"}},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.currentChannelList,t=>((0,i.uX)(),(0,i.Wv)(c,{key:t.name,label:t.name,value:t.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","disabled","placeholder"])):"boolean"===e.type?((0,i.uX)(),(0,i.Wv)(u,{key:2,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])):"textarea"===e.type?((0,i.uX)(),(0,i.Wv)(p,{key:3,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,type:"textarea",autosize:{minRows:2},resize:"vertical",disabled:e.fixed,placeholder:l.localized(e,"placeholder")},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"])):((0,i.uX)(),(0,i.Wv)(p,{key:4,modelValue:e.value,"onUpdate:modelValue":t=>e.value=t,disabled:e.fixed,placeholder:l.localized(e,"placeholder")},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"]))]),_:2},1024))),128))]),_:2},1032,["model"])]))),128)),(0,i.bF)(b,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"])])),[[y,o.loading]])}var Dg=s(457),Ag={components:{FloatingSaveButton:Vp},data(){return{settings:{config:[]},loading:!0,availableChannels:{}}},computed:{isEn(){return"en"===this.$i18n.locale},groupedSettings(){const t={};return this.settings.config&&this.settings.config.forEach(e=>{const s=this.isEn?e.category_en||e.category||this.$t("sysPage.otherSettings"):e.category||this.$t("sysPage.otherSettings");t[s]||(t[s]=[]),t[s].push(e)}),t},currentUploadChannel(){const t=this.settings.config?.find(t=>"defaultUploadChannel"===t.id);return t?.value||""},currentChannelList(){return this.availableChannels[this.currentUploadChannel]||[]}},watch:{currentUploadChannel(t,e){if(t!==e){const e=this.settings.config?.find(t=>"defaultChannelName"===t.id);if(e){const s=this.availableChannels[t]||[];s.some(t=>t.name===e.value)||(e.value="")}}}},methods:{localized(t,e){return this.isEn&&t[e+"_en"]?t[e+"_en"]:t[e]||""},localizedOption(t){return this.isEn&&t.label_en?t.label_en:t.label},saveSettings(){(0,Pe.A)("/api/manage/sysConfig/page",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.settings)}).then(()=>this.$message.success(this.$t("sysPage.settingsSaved")))},async fetchAvailableChannels(){try{const t=await Dg.A.get("/api/channels");t.data&&(this.availableChannels=t.data)}catch(t){console.error("Failed to fetch available channels:",t)}}},mounted(){this.loading=!0,this.fetchAvailableChannels(),(0,Pe.A)("/api/manage/sysConfig/page").then(t=>t.json()).then(t=>{this.settings=t,this.settings.config&&this.settings.config.forEach(t=>{"boolean"===t.type&&("string"===typeof t.value?t.value="true"===t.value:void 0!==t.value&&null!==t.value||(t.value=t.default||!1))})}).finally(()=>{this.loading=!1})}};const $g=(0,c.A)(Ag,[["render",Mg],["__scopeId","data-v-e4c3a742"]]);var Vg=$g;const Lg={class:"others-settings"},Eg={class:"first-settings"},Ig={class:"first-title"},Ug={class:"first-title"},Og={class:"first-title"},Rg={class:"first-title"},Wg=["innerHTML"],Bg={class:"first-title"};function Ng(t,e,s,a,o,l){const r=(0,i.g2)("font-awesome-icon"),d=g.R7,c=Su.qi,h=_u.xE,u=_u.US,p=wu.WK,f=Cu.P9,m=Cu.AV,b=Vp,y=v.A;return(0,i.bo)(((0,i.uX)(),(0,i.CE)("div",Lg,[(0,i.Lk)("div",Eg,[(0,i.Lk)("h3",Ig,[(0,i.eW)((0,n.v_)(t.$t("sysOthers.remoteTelemetry"))+" ",1),(0,i.bF)(d,{content:t.$t("sysOthers.remoteTelemetryTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.telemetry,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:t.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(c,{modelValue:o.settings.telemetry.enabled,"onUpdate:modelValue":e[0]||(e[0]=t=>o.settings.telemetry.enabled=t),disabled:o.settings.telemetry.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"])]),_:1},8,["model"]),(0,i.Lk)("h3",Ug,[(0,i.eW)((0,n.v_)(t.$t("sysOthers.cloudflareApiToken"))+" ",1),(0,i.bF)(d,{content:t.$t("sysOthers.cloudflareApiTokenTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.cloudflareApiToken,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:t.$t("sysOthers.zoneId")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_ZONE_ID,"onUpdate:modelValue":e[1]||(e[1]=t=>o.settings.cloudflareApiToken.CF_ZONE_ID=t),disabled:o.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:t.$t("sysOthers.accountEmail")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_EMAIL,"onUpdate:modelValue":e[2]||(e[2]=t=>o.settings.cloudflareApiToken.CF_EMAIL=t),disabled:o.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:"API Key"},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.cloudflareApiToken.CF_API_KEY,"onUpdate:modelValue":e[3]||(e[3]=t=>o.settings.cloudflareApiToken.CF_API_KEY=t),disabled:o.settings.cloudflareApiToken.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",Og,[(0,i.eW)((0,n.v_)(t.$t("sysOthers.randomImageApi"))+" ",1),(0,i.bF)(d,{content:t.$t("sysOthers.randomImageApiTooltip"),placement:"right"},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.randomImageAPI,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:t.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(c,{modelValue:o.settings.randomImageAPI.enabled,"onUpdate:modelValue":e[4]||(e[4]=t=>o.settings.randomImageAPI.enabled=t),disabled:o.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{prop:"randomImageAPI.allowedDir"},{label:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysOthers.directory")),1),(0,i.bF)(d,{content:t.$t("sysOthers.directoryTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.randomImageAPI.allowedDir,"onUpdate:modelValue":e[5]||(e[5]=t=>o.settings.randomImageAPI.allowedDir=t),disabled:o.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",Rg,[(0,i.eW)((0,n.v_)(t.$t("sysOthers.publicBrowse"))+" ",1),(0,i.bF)(d,{content:t.$t("sysOthers.publicBrowseTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.publicBrowse,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:t.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(c,{modelValue:o.settings.publicBrowse.enabled,"onUpdate:modelValue":e[6]||(e[6]=t=>o.settings.publicBrowse.enabled=t),disabled:o.settings.publicBrowse.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{prop:"publicBrowse.allowedDir"},{label:(0,i.k6)(()=>[(0,i.Lk)("span",null,(0,n.v_)(t.$t("sysOthers.openDirectory")),1),(0,i.bF)(d,{placement:"right","raw-content":""},{content:(0,i.k6)(()=>[(0,i.Lk)("div",{style:{"max-width":"320px","line-height":"1.6"},innerHTML:t.$t("sysOthers.openDirectoryTooltip")},null,8,Wg)]),default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.publicBrowse.allowedDir,"onUpdate:modelValue":e[7]||(e[7]=t=>o.settings.publicBrowse.allowedDir=t),disabled:o.settings.publicBrowse.fixed,placeholder:"wallpaper,photos,album"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,i.Lk)("h3",Bg,[(0,i.eW)((0,n.v_)(t.$t("sysOthers.webdav"))+" ",1),(0,i.bF)(d,{content:t.$t("sysOthers.webdavTooltip"),placement:"right","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(r,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])]),(0,i.bF)(u,{model:o.settings.webDAV,"label-width":"120px"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{label:t.$t("sysOthers.enable")},{default:(0,i.k6)(()=>[(0,i.bF)(c,{modelValue:o.settings.webDAV.enabled,"onUpdate:modelValue":e[8]||(e[8]=t=>o.settings.webDAV.enabled=t),disabled:o.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:t.$t("sysOthers.webdavUsername")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.webDAV.username,"onUpdate:modelValue":e[9]||(e[9]=t=>o.settings.webDAV.username=t),disabled:o.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:t.$t("sysOthers.webdavPassword")},{default:(0,i.k6)(()=>[(0,i.bF)(p,{modelValue:o.settings.webDAV.password,"onUpdate:modelValue":e[10]||(e[10]=t=>o.settings.webDAV.password=t),disabled:o.settings.webDAV.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1},8,["label"]),(0,i.bF)(h,{label:t.$t("sysOthers.webdavUploadChannel")},{default:(0,i.k6)(()=>[(0,i.bF)(m,{modelValue:o.settings.webDAV.uploadChannel,"onUpdate:modelValue":e[11]||(e[11]=t=>o.settings.webDAV.uploadChannel=t),disabled:o.settings.webDAV.fixed,placeholder:t.$t("sysOthers.webdavDefaultChannel"),clearable:""},{default:(0,i.k6)(()=>[(0,i.bF)(f,{label:"Telegram",value:"telegram"}),(0,i.bF)(f,{label:"Cloudflare R2",value:"cfr2"}),(0,i.bF)(f,{label:"S3",value:"s3"}),(0,i.bF)(f,{label:"Discord",value:"discord"}),(0,i.bF)(f,{label:"HuggingFace",value:"huggingface"}),(0,i.bF)(f,{label:"WebDAV",value:"webdav"})]),_:1},8,["modelValue","disabled","placeholder"])]),_:1},8,["label"]),o.settings.webDAV.uploadChannel&&l.webdavChannelList.length>1?((0,i.uX)(),(0,i.Wv)(h,{key:0,label:t.$t("sysOthers.webdavChannelName")},{default:(0,i.k6)(()=>[(0,i.bF)(m,{modelValue:o.settings.webDAV.channelName,"onUpdate:modelValue":e[12]||(e[12]=t=>o.settings.webDAV.channelName=t),disabled:o.settings.webDAV.fixed,placeholder:t.$t("uploadSettings.autoSelect"),clearable:""},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(l.webdavChannelList,t=>((0,i.uX)(),(0,i.Wv)(f,{key:t.name,label:t.name,value:t.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled","placeholder"])]),_:1},8,["label"])):(0,i.Q3)("",!0)]),_:1},8,["model"])]),(0,i.bF)(b,{show:!o.loading,onClick:l.saveSettings},null,8,["show","onClick"])])),[[y,o.loading]])}var zg={components:{FloatingSaveButton:Vp},data(){return{settings:{telemetry:{},randomImageAPI:{},cloudflareApiToken:{},webDAV:{},publicBrowse:{}},availableChannels:{},loading:!0}},computed:{webdavChannelList(){const t=this.settings.webDAV?.uploadChannel;return t&&this.availableChannels[t]||[]}},watch:{"settings.webDAV.uploadChannel"(){this.settings.webDAV&&(this.settings.webDAV.channelName="")}},methods:{saveSettings(){(0,Pe.A)("/api/manage/sysConfig/others",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.settings)}).then(()=>this.$message.success(this.$t("sysOthers.settingsSaved")))},async fetchAvailableChannels(){try{const t=await(0,Pe.A)("/api/channels");t.ok&&(this.availableChannels=await t.json())}catch(t){console.error("Failed to fetch available channels:",t)}}},mounted(){this.loading=!0,(0,Pe.A)("/api/manage/sysConfig/others").then(t=>t.json()).then(t=>{this.settings=t}).finally(()=>{this.loading=!1}),this.fetchAvailableChannels()}};const jg=(0,c.A)(zg,[["render",Ng],["__scopeId","data-v-67b1b002"]]);var qg=jg,Hg=s(48903),Xg={name:"SystemConfig",mixins:[Hg.A],data(){return{activeIndex:"status",isSidebarCollapse:!1}},watch:{"$route.hash":{immediate:!0,handler(t){this.activeIndex=t.replace("#",""),window.scrollTo(0,0)}},activeIndex(t){const e=`#${t}`;this.$router.push({hash:e})}},components:{DashboardTabs:f.A,SysConfigTabs:u,SysCogStatus:xu,SysCogUpload:Tp,SysCogSecurity:Fg,SysCogPage:Vg,SysCogOthers:qg},computed:{disableTooltip(){return window.innerWidth<768},currentComponent(){const t=this.$route.hash.replace("#","");switch(t){case"status":return xu;case"upload":return Tp;case"security":return Fg;case"page":return Vg;case"others":return qg;default:return xu}}},methods:{handleLogout(){const t="/api/auth/logout";fetch(t,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},setDefaultHash(){const t="#status";window.location.hash=t,this.activeIndex=t.replace("#","")}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),window.location.hash||this.setDefaultHash()}};const Kg=(0,c.A)(Xg,[["render",x],["__scopeId","data-v-7607b77d"]]);var Qg=Kg},34396:function(t,e,s){s(85331),s(4885)},49187:function(t,e,s){s(85331),s(38736)},50333:function(t,e,s){s(85331),s(29092)},53676:function(t,e,s){s.d(e,{A:function(){return h}});var i=s(56768);const n={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},a={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},o={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function l(t,e,s,l,r,d){const c=(0,i.g2)("font-awesome-icon");return(0,i.uX)(),(0,i.CE)("span",(0,i.v6)(t.$attrs,{class:"channel-icon-wrapper"}),["telegram"===s.type?((0,i.uX)(),(0,i.CE)("svg",n,[...e[0]||(e[0]=[(0,i.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===s.type?((0,i.uX)(),(0,i.CE)("svg",a,[...e[1]||(e[1]=[(0,i.Fv)('',9)])])):"webdav"===s.type?((0,i.uX)(),(0,i.CE)("svg",o,[...e[2]||(e[2]=[(0,i.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,i.uX)(),(0,i.Wv)(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 t={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return t[this.type]||"server"}}},d=s(71241);const c=(0,d.A)(r,[["render",l],["__scopeId","data-v-33933ada"]]);var h=c},63003:function(t,e,s){s(85331)},64752:function(t,e,s){s(85331),s(38736),s(18785)},70415:function(t,e,s){s(85331),s(73565)},73565:function(t,e,s){s(85331)},91114:function(t,e,s){function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function n(t,e){if("object"!=i(t)||!t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var n=s.call(t,e||"default");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}function a(t){var e=n(t,"string");return"symbol"==i(e)?e:e+""}function o(t,e,s){return(e=a(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}s.d(e,{A:function(){return o}})},98642:function(t,e,s){s(85331)}}]); -//# sourceMappingURL=529.e05f38bd.js.map \ No newline at end of file +//# sourceMappingURL=529.287c329f.js.map \ No newline at end of file diff --git a/frontend-dist/js/529.287c329f.js.gz b/frontend-dist/js/529.287c329f.js.gz new file mode 100644 index 00000000..d3e53a13 Binary files /dev/null and b/frontend-dist/js/529.287c329f.js.gz differ diff --git a/frontend-dist/js/529.e05f38bd.js.map b/frontend-dist/js/529.287c329f.js.map similarity index 99% rename from frontend-dist/js/529.e05f38bd.js.map rename to frontend-dist/js/529.287c329f.js.map index d40d5fb1..208de6eb 100644 --- a/frontend-dist/js/529.e05f38bd.js.map +++ b/frontend-dist/js/529.287c329f.js.map @@ -1 +1 @@ -{"version":3,"file":"js/529.e05f38bd.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?54ab","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?cf73","webpack://sanyue_imghub/./src/views/SystemConfig.vue?c088","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?5501","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?7c9a","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?9618","webpack://sanyue_imghub/./node_modules/@kurkle/color/dist/color.esm.js","webpack://sanyue_imghub/../../src/helpers/helpers.core.ts","webpack://sanyue_imghub/../../src/helpers/helpers.math.ts","webpack://sanyue_imghub/../../src/helpers/helpers.collection.ts","webpack://sanyue_imghub/../../src/helpers/helpers.extras.ts","webpack://sanyue_imghub/../../src/helpers/helpers.easing.ts","webpack://sanyue_imghub/../../src/helpers/helpers.color.ts","webpack://sanyue_imghub/../../src/core/core.animations.defaults.js","webpack://sanyue_imghub/../../src/core/core.layouts.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.intl.ts","webpack://sanyue_imghub/../../src/core/core.ticks.js","webpack://sanyue_imghub/../../src/core/core.scale.defaults.js","webpack://sanyue_imghub/../../src/core/core.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.canvas.ts","webpack://sanyue_imghub/../../src/helpers/helpers.options.ts","webpack://sanyue_imghub/../../src/helpers/helpers.config.ts","webpack://sanyue_imghub/../../src/helpers/helpers.curve.ts","webpack://sanyue_imghub/../../src/helpers/helpers.dom.ts","webpack://sanyue_imghub/../../src/helpers/helpers.interpolation.ts","webpack://sanyue_imghub/../../src/helpers/helpers.rtl.ts","webpack://sanyue_imghub/../../src/helpers/helpers.segment.js","webpack://sanyue_imghub/../../src/helpers/helpers.dataset.ts","webpack://sanyue_imghub/../src/core/core.animator.js","webpack://sanyue_imghub/../src/core/core.animation.js","webpack://sanyue_imghub/../src/core/core.animations.js","webpack://sanyue_imghub/../src/core/core.datasetController.js","webpack://sanyue_imghub/../src/controllers/controller.bar.js","webpack://sanyue_imghub/../src/controllers/controller.bubble.js","webpack://sanyue_imghub/../src/controllers/controller.doughnut.js","webpack://sanyue_imghub/../src/controllers/controller.line.js","webpack://sanyue_imghub/../src/controllers/controller.polarArea.js","webpack://sanyue_imghub/../src/controllers/controller.pie.js","webpack://sanyue_imghub/../src/controllers/controller.radar.js","webpack://sanyue_imghub/../src/controllers/controller.scatter.js","webpack://sanyue_imghub/../src/core/core.adapters.ts","webpack://sanyue_imghub/../src/core/core.interaction.js","webpack://sanyue_imghub/../src/core/core.layouts.js","webpack://sanyue_imghub/../src/platform/platform.base.js","webpack://sanyue_imghub/../src/platform/platform.basic.js","webpack://sanyue_imghub/../src/platform/platform.dom.js","webpack://sanyue_imghub/../src/platform/index.js","webpack://sanyue_imghub/../src/core/core.element.ts","webpack://sanyue_imghub/../src/core/core.scale.autoskip.js","webpack://sanyue_imghub/../src/core/core.scale.js","webpack://sanyue_imghub/../src/core/core.typedRegistry.js","webpack://sanyue_imghub/../src/core/core.registry.js","webpack://sanyue_imghub/../src/core/core.plugins.js","webpack://sanyue_imghub/../src/core/core.config.js","webpack://sanyue_imghub/../src/core/core.controller.js","webpack://sanyue_imghub/../src/elements/element.arc.ts","webpack://sanyue_imghub/../src/elements/element.line.js","webpack://sanyue_imghub/../src/elements/element.point.ts","webpack://sanyue_imghub/../src/elements/element.bar.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.segment.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.helper.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.options.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.stack.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/simpleArc.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.drawing.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/index.js","webpack://sanyue_imghub/../src/plugins/plugin.legend.js","webpack://sanyue_imghub/../src/plugins/plugin.subtitle.js","webpack://sanyue_imghub/../src/plugins/plugin.tooltip.js","webpack://sanyue_imghub/../src/scales/scale.category.js","webpack://sanyue_imghub/../src/scales/scale.linearbase.js","webpack://sanyue_imghub/../src/scales/scale.linear.js","webpack://sanyue_imghub/../src/scales/scale.logarithmic.js","webpack://sanyue_imghub/../src/scales/scale.radialLinear.js","webpack://sanyue_imghub/../src/scales/scale.time.js","webpack://sanyue_imghub/../src/scales/scale.timeseries.js","webpack://sanyue_imghub/../src/props.ts","webpack://sanyue_imghub/../src/utils.ts","webpack://sanyue_imghub/../src/chart.ts","webpack://sanyue_imghub/../src/typedCharts.ts","webpack://sanyue_imghub/./src/utils/batchProcessor.js","webpack://sanyue_imghub/./src/utils/indexRebuilder.js","webpack://sanyue_imghub/./src/utils/backupGenerator.js","webpack://sanyue_imghub/./src/utils/restoreProcessor.js","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?ce78","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?6aa1","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?1e7e","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?8495","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?a7b6","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?6295","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?45e6","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?8a8c","webpack://sanyue_imghub/./src/utils/tokenExpiration.js","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?3739","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?0bc4","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?4209","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?5501","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?780f","webpack://sanyue_imghub/./src/views/SystemConfig.vue","webpack://sanyue_imghub/./src/views/SystemConfig.vue?d269","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?4482","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/defineProperty.js"],"sourcesContent":["import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"menu-list\"\n};\nconst _hoisted_2 = [\"onClick\"];\nconst _hoisted_3 = {\n class: \"menu-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"sidebar-container\", {\n 'is-collapsed': $props.isCollapse\n }]),\n ref: \"sidebar\",\n style: _normalizeStyle($options.sidebarStyle)\n }, [_createElementVNode(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.menuItems, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.index,\n class: _normalizeClass([\"menu-item\", {\n 'is-active': $props.activeIndex === item.index\n }]),\n onClick: $event => $options.handleSelect(item.index)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: item.icon,\n class: \"menu-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t(item.titleKey)), 1)], 10, _hoisted_2);\n }), 128))]), _createElementVNode(\"div\", {\n class: \"toggle-button\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleCollapse && $options.toggleCollapse(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $props.isCollapse ? 'angle-double-right' : 'angle-double-left'\n }, null, 8, [\"icon\"])])], 6);\n}","export default {\n name: 'SysConfigTabs',\n props: {\n activeIndex: {\n type: String,\n default: 'status'\n },\n isCollapse: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n expandedWidth: null,\n menuItems: [{\n index: 'status',\n icon: 'chart-bar',\n titleKey: 'sysConfigTabs.systemStatus'\n }, {\n index: 'upload',\n icon: 'cloud-upload',\n titleKey: 'sysConfigTabs.uploadSettings'\n }, {\n index: 'security',\n icon: 'shield',\n titleKey: 'sysConfigTabs.securitySettings'\n }, {\n index: 'page',\n icon: 'pager',\n titleKey: 'sysConfigTabs.pageSettings'\n }, {\n index: 'others',\n icon: 'cog',\n titleKey: 'sysConfigTabs.otherSettings'\n }]\n };\n },\n computed: {\n collapsedWidth() {\n return window.innerWidth <= 768 ? 50 : 56;\n },\n sidebarStyle() {\n if (this.isCollapse) {\n return {\n width: this.collapsedWidth + 'px'\n };\n }\n return this.expandedWidth ? {\n width: this.expandedWidth + 'px'\n } : {};\n }\n },\n watch: {\n '$i18n.locale'() {\n this.$nextTick(() => this.measureWidth());\n }\n },\n methods: {\n toggleCollapse() {\n this.$emit('update:isCollapse', !this.isCollapse);\n },\n checkMobile() {\n const isMobile = window.innerWidth <= 768;\n this.$emit('update:isCollapse', isMobile);\n },\n handleSelect(index) {\n this.$emit('update:activeIndex', index);\n },\n measureWidth() {\n const el = this.$refs.sidebar;\n if (!el) return;\n // Temporarily expand to measure natural content width\n const prevWidth = el.style.width;\n const prevTransition = el.style.transition;\n const wasCollapsed = el.classList.contains('is-collapsed');\n el.style.transition = 'none';\n if (wasCollapsed) {\n el.classList.remove('is-collapsed');\n }\n el.style.width = 'auto';\n // Force reflow to apply changes\n void el.offsetWidth;\n const natural = el.scrollWidth;\n // Restore original state\n el.style.width = prevWidth;\n if (wasCollapsed) {\n el.classList.add('is-collapsed');\n }\n void el.offsetWidth;\n el.style.transition = prevTransition;\n this.expandedWidth = natural;\n }\n },\n mounted() {\n this.checkMobile();\n this.$nextTick(() => this.measureWidth());\n window.addEventListener('resize', this.checkMobile);\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.checkMobile);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysConfigTabs.vue?vue&type=template&id=2718059d&scoped=true\"\nimport script from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\nexport * from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\n\nimport \"./SysConfigTabs.vue?vue&type=style&index=0&id=2718059d&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-2718059d\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content\"\n};\nconst _hoisted_3 = {\n class: \"header-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_SysConfigTabs = _resolveComponent(\"SysConfigTabs\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"systemConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_SysConfigTabs, {\n activeIndex: $data.activeIndex,\n \"onUpdate:activeIndex\": _cache[0] || (_cache[0] = $event => $data.activeIndex = $event),\n isCollapse: $data.isSidebarCollapse,\n \"onUpdate:isCollapse\": _cache[1] || (_cache[1] = $event => $data.isSidebarCollapse = $event)\n }, null, 8, [\"activeIndex\", \"isCollapse\"]), (_openBlock(), _createBlock(_resolveDynamicComponent($options.currentComponent), {\n class: _normalizeClass(['main-container', {\n 'collapsed': $data.isSidebarCollapse\n }])\n }, null, 8, [\"class\"]))]);\n}","import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"date-range-calendar\"\n};\nconst _hoisted_2 = {\n class: \"selected-range\"\n};\nconst _hoisted_3 = {\n class: \"selected-range-inputs\"\n};\nconst _hoisted_4 = [\"aria-label\"];\nconst _hoisted_5 = {\n class: \"date-range-separator\"\n};\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = {\n class: \"calendar-header\"\n};\nconst _hoisted_8 = [\"aria-label\"];\nconst _hoisted_9 = {\n class: \"calendar-title\"\n};\nconst _hoisted_10 = [\"aria-label\"];\nconst _hoisted_11 = {\n class: \"calendar-weekdays\"\n};\nconst _hoisted_12 = {\n class: \"calendar-grid\"\n};\nconst _hoisted_13 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputStart = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.startDateLabel,\n onChange: _cache[1] || (_cache[1] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_4), [[_vModelText, $data.inputStart, void 0, {\n trim: true\n }]]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.rangeSeparator), 1), _withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.inputEnd = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.endDateLabel,\n onChange: _cache[3] || (_cache[3] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_6), [[_vModelText, $data.inputEnd, void 0, {\n trim: true\n }]])])]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.previousMonthLabel,\n onClick: _cache[4] || (_cache[4] = (...args) => $options.goToPreviousMonth && $options.goToPreviousMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-left\"\n })], 8, _hoisted_8), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.monthTitle), 1), _createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.nextMonthLabel,\n onClick: _cache[5] || (_cache[5] = (...args) => $options.goToNextMonth && $options.goToNextMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-right\"\n })], 8, _hoisted_10)]), _createElementVNode(\"div\", _hoisted_11, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.weekdayLabels, weekday => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: weekday\n }, _toDisplayString(weekday), 1);\n }), 128))]), _createElementVNode(\"div\", _hoisted_12, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.calendarDays, day => {\n return _openBlock(), _createElementBlock(\"button\", {\n key: day.key,\n type: \"button\",\n class: _normalizeClass([\"calendar-day\", {\n 'is-muted': !day.isCurrentMonth,\n 'is-today': day.isToday,\n 'is-range-start': day.key === $data.draftStart,\n 'is-range-end': day.key === $data.draftEnd,\n 'is-in-range': $options.isInRange(day.key)\n }]),\n onClick: $event => $options.selectDay(day.key)\n }, _toDisplayString(day.dayOfMonth), 11, _hoisted_13);\n }), 128))])]);\n}","const DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateKey(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction parseDateKey(value) {\n if (typeof value !== 'string') return null;\n const match = value.trim().match(/^(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})$/);\n if (!match) return null;\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n const date = new Date(year, month, day);\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n return null;\n }\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction shiftMonth(date, amount) {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\n}\nexport default {\n name: 'DateRangeCalendar',\n props: {\n modelValue: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return {\n displayYear: today.getFullYear(),\n displayMonth: today.getMonth(),\n draftStart: '',\n draftEnd: '',\n inputStart: '',\n inputEnd: '',\n awaitingEnd: false\n };\n },\n computed: {\n previousMonthLabel() {\n return this.$t('dateRangeCalendar.previousMonth');\n },\n nextMonthLabel() {\n return this.$t('dateRangeCalendar.nextMonth');\n },\n startDateLabel() {\n return this.$t('dateRangeCalendar.startDate');\n },\n endDateLabel() {\n return this.$t('dateRangeCalendar.endDate');\n },\n rangeSeparator() {\n return this.$t('dateRangeCalendar.rangeSeparator');\n },\n monthTitle() {\n return this.$t('dateRangeCalendar.monthTitle', {\n year: this.displayYear,\n month: padDatePart(this.displayMonth + 1)\n });\n },\n weekdayLabels() {\n return [this.$t('dateRangeCalendar.weekdaySun'), this.$t('dateRangeCalendar.weekdayMon'), this.$t('dateRangeCalendar.weekdayTue'), this.$t('dateRangeCalendar.weekdayWed'), this.$t('dateRangeCalendar.weekdayThu'), this.$t('dateRangeCalendar.weekdayFri'), this.$t('dateRangeCalendar.weekdaySat')];\n },\n calendarDays() {\n const monthStart = new Date(this.displayYear, this.displayMonth, 1);\n const start = new Date(this.displayYear, this.displayMonth, 1 - monthStart.getDay());\n const todayKey = formatDateKey(new Date());\n return Array.from({\n length: 42\n }, (_, index) => {\n const date = new Date(start.getTime() + index * DAY_MS);\n const key = formatDateKey(date);\n return {\n key,\n dayOfMonth: date.getDate(),\n isCurrentMonth: date.getMonth() === this.displayMonth,\n isToday: key === todayKey\n };\n });\n }\n },\n watch: {\n modelValue: {\n immediate: true,\n handler(value) {\n this.syncFromModel(value);\n }\n }\n },\n methods: {\n syncFromModel(value) {\n const startDate = parseDateKey(value?.[0]);\n const endDate = parseDateKey(value?.[1]);\n this.draftStart = startDate ? formatDateKey(startDate) : '';\n this.draftEnd = endDate ? formatDateKey(endDate) : '';\n this.inputStart = this.draftStart;\n this.inputEnd = this.draftEnd;\n this.awaitingEnd = false;\n const displayDate = startDate || endDate;\n if (displayDate) {\n this.displayYear = displayDate.getFullYear();\n this.displayMonth = displayDate.getMonth();\n }\n },\n goToPreviousMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), -1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n goToNextMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), 1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n selectDay(key) {\n if (!this.draftStart || this.draftEnd || !this.awaitingEnd) {\n this.draftStart = key;\n this.draftEnd = '';\n this.inputStart = key;\n this.inputEnd = '';\n this.awaitingEnd = true;\n return;\n }\n const range = key < this.draftStart ? [key, this.draftStart] : [this.draftStart, key];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.commitRange(range);\n },\n handleManualInput() {\n const startDate = parseDateKey(this.inputStart);\n const endDate = parseDateKey(this.inputEnd);\n if (!startDate || !endDate) return;\n const startKey = formatDateKey(startDate);\n const endKey = formatDateKey(endDate);\n const range = startKey <= endKey ? [startKey, endKey] : [endKey, startKey];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.displayYear = startDate.getFullYear();\n this.displayMonth = startDate.getMonth();\n this.commitRange(range);\n },\n commitRange(range) {\n this.$emit('update:modelValue', range);\n this.$emit('change', range);\n },\n isInRange(key) {\n return Boolean(this.draftStart && this.draftEnd && key > this.draftStart && key < this.draftEnd);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DateRangeCalendar.vue?vue&type=template&id=65a4b58c&scoped=true\"\nimport script from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\nexport * from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\n\nimport \"./DateRangeCalendar.vue?vue&type=style&index=0&id=65a4b58c&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-65a4b58c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"status-panel\"\n};\nconst _hoisted_2 = {\n class: \"overview-cards\"\n};\nconst _hoisted_3 = {\n class: \"card-icon\"\n};\nconst _hoisted_4 = {\n class: \"card-content\"\n};\nconst _hoisted_5 = {\n class: \"card-title\"\n};\nconst _hoisted_6 = {\n class: \"card-value\"\n};\nconst _hoisted_7 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_8 = {\n class: \"overview-card index-status\"\n};\nconst _hoisted_9 = {\n class: \"card-icon\"\n};\nconst _hoisted_10 = {\n class: \"card-content\"\n};\nconst _hoisted_11 = {\n class: \"card-title\"\n};\nconst _hoisted_12 = {\n class: \"card-value\"\n};\nconst _hoisted_13 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_14 = {\n class: \"card-icon\"\n};\nconst _hoisted_15 = {\n class: \"card-content\"\n};\nconst _hoisted_16 = {\n class: \"card-title\"\n};\nconst _hoisted_17 = {\n class: \"card-value\"\n};\nconst _hoisted_18 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_19 = {\n class: \"charts-section\"\n};\nconst _hoisted_20 = {\n class: \"chart-card trend-chart-card\"\n};\nconst _hoisted_21 = {\n class: \"chart-header trend-chart-header\"\n};\nconst _hoisted_22 = {\n class: \"chart-title\"\n};\nconst _hoisted_23 = {\n class: \"trend-controls\"\n};\nconst _hoisted_24 = {\n class: \"trend-date-panel\"\n};\nconst _hoisted_25 = {\n class: \"chart-content trend-chart-content\"\n};\nconst _hoisted_26 = {\n key: 0,\n class: \"empty-state trend-empty-state\"\n};\nconst _hoisted_27 = {\n key: 1,\n class: \"line-chart-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"chart-card\"\n};\nconst _hoisted_29 = {\n class: \"chart-header\"\n};\nconst _hoisted_30 = {\n class: \"chart-content\"\n};\nconst _hoisted_31 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_33 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_34 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_35 = {\n class: \"center-value\"\n};\nconst _hoisted_36 = {\n class: \"center-label\"\n};\nconst _hoisted_37 = {\n class: \"chart-legend\"\n};\nconst _hoisted_38 = {\n class: \"legend-label\"\n};\nconst _hoisted_39 = {\n class: \"legend-value\"\n};\nconst _hoisted_40 = {\n class: \"legend-percent\"\n};\nconst _hoisted_41 = {\n class: \"chart-card\"\n};\nconst _hoisted_42 = {\n class: \"chart-header\"\n};\nconst _hoisted_43 = {\n class: \"chart-content\"\n};\nconst _hoisted_44 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_45 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_46 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_47 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_48 = {\n class: \"center-value\"\n};\nconst _hoisted_49 = {\n class: \"center-label\"\n};\nconst _hoisted_50 = {\n class: \"chart-legend\"\n};\nconst _hoisted_51 = {\n class: \"legend-label\"\n};\nconst _hoisted_52 = {\n class: \"legend-value\"\n};\nconst _hoisted_53 = {\n class: \"legend-percent\"\n};\nconst _hoisted_54 = {\n class: \"actions-section\"\n};\nconst _hoisted_55 = {\n class: \"action-card\"\n};\nconst _hoisted_56 = {\n class: \"action-header\"\n};\nconst _hoisted_57 = {\n class: \"action-content\"\n};\nconst _hoisted_58 = {\n key: 0,\n class: \"progress-container\"\n};\nconst _hoisted_59 = {\n class: \"progress-header\"\n};\nconst _hoisted_60 = {\n class: \"progress-phase\"\n};\nconst _hoisted_61 = {\n class: \"progress-percentage\"\n};\nconst _hoisted_62 = {\n class: \"progress-details\"\n};\nconst _hoisted_63 = {\n key: 0,\n class: \"progress-count\"\n};\nconst _hoisted_64 = {\n key: 1,\n class: \"progress-time\"\n};\nconst _hoisted_65 = {\n key: 0,\n class: \"progress-message\"\n};\nconst _hoisted_66 = {\n key: 1,\n class: \"error-container\"\n};\nconst _hoisted_67 = {\n class: \"error-icon\"\n};\nconst _hoisted_68 = {\n class: \"error-content\"\n};\nconst _hoisted_69 = {\n class: \"error-message\"\n};\nconst _hoisted_70 = {\n key: 0,\n class: \"error-suggestion\"\n};\nconst _hoisted_71 = {\n class: \"error-actions\"\n};\nconst _hoisted_72 = {\n key: 2,\n class: \"action-buttons\"\n};\nconst _hoisted_73 = {\n class: \"restore-section\"\n};\nconst _hoisted_74 = {\n key: 0,\n class: \"file-info-section\"\n};\nconst _hoisted_75 = [\"src\"];\nconst _hoisted_76 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_77 = {\n class: \"file-card-header\"\n};\nconst _hoisted_78 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_79 = {\n class: \"file-name\"\n};\nconst _hoisted_80 = {\n class: \"file-meta\"\n};\nconst _hoisted_81 = [\"src\"];\nconst _hoisted_82 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_83 = {\n class: \"file-card-header warning\"\n};\nconst _hoisted_84 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_85 = {\n class: \"file-name\"\n};\nconst _hoisted_86 = {\n class: \"file-meta\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_DateRangeCalendar = _resolveComponent(\"DateRangeCalendar\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_Line = _resolveComponent(\"Line\");\n const _component_Doughnut = _resolveComponent(\"Doughnut\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", {\n class: \"overview-card total-files\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.fetchIndexInfo && $options.fetchIndexInfo(...args))\n }, [_createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\"\n })]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('sysStatus.totalFiles')), 1), _createElementVNode(\"div\", _hoisted_6, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('sysStatus.clickToRefresh')), 1)])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n })]), _createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"div\", _hoisted_11, _toDisplayString(_ctx.$t('sysStatus.indexUpdateTime')), 1), _createElementVNode(\"div\", _hoisted_12, _toDisplayString($options.formatTime($data.indexInfo.lastUpdated)), 1), _createElementVNode(\"div\", _hoisted_13, _toDisplayString($options.getTimeAgo($data.indexInfo.lastUpdated)), 1)])]), _createElementVNode(\"div\", {\n class: \"overview-card system-version\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.openReleases && $options.openReleases(...args))\n }, [_createElementVNode(\"div\", _hoisted_14, [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\"\n })]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, _toDisplayString(_ctx.$t('sysStatus.systemVersion')), 1), _createElementVNode(\"div\", _hoisted_17, \"v\" + _toDisplayString($data.version), 1), _createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('sysStatus.clickToViewChangelog')), 1)])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"chart-line\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.uploadTrend')), 1), _createVNode(_component_el_button, {\n class: \"trend-calendar-btn\",\n circle: \"\",\n \"aria-label\": _ctx.$t('sysStatus.selectDateRange'),\n onClick: $options.openTrendDateDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"calendar\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]), _createElementVNode(\"div\", _hoisted_23, [_createVNode(_component_el_radio_group, {\n modelValue: $data.trendGroupBy,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.trendGroupBy = $event),\n size: \"small\",\n class: \"trend-group-switch\",\n \"aria-label\": _ctx.$t('sysStatus.uploadTrendGroupBy')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"channel\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelType')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"channelName\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelName')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label\"])])]), _createVNode(_component_el_dialog, {\n modelValue: $data.trendDatePickerVisible,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.trendDatePickerVisible = $event),\n title: _ctx.$t('sysStatus.selectDateRange'),\n width: $options.trendDateDialogWidth,\n class: \"trend-date-dialog\",\n \"align-center\": \"\",\n \"append-to-body\": \"\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_24, [_createVNode(_component_DateRangeCalendar, {\n modelValue: $data.trendDateRange,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.trendDateRange = $event),\n onChange: $options.handleTrendDateRangeChange\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createElementVNode(\"div\", _hoisted_25, [!$options.hasTrendData ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [_createVNode(_component_Line, {\n data: $options.uploadTrendChartData,\n options: $options.lineChartOptions\n }, null, 8, [\"data\", \"options\"])]))])]), _createElementVNode(\"div\", _hoisted_28, [_createElementVNode(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"share-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.channelDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_30, [Object.keys($data.indexInfo.channelStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_Doughnut, {\n data: $options.channelChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"div\", _hoisted_35, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_36, _toDisplayString(_ctx.$t('sysStatus.totalFilesLabel')), 1)])]), _createElementVNode(\"div\", _hoisted_37, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.indexInfo.channelStats, (count, channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_38, _toDisplayString(channel), 1), _createElementVNode(\"span\", _hoisted_39, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_40, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])]), _createElementVNode(\"div\", _hoisted_41, [_createElementVNode(\"div\", _hoisted_42, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.fileStatusDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_43, [Object.keys($data.indexInfo.typeStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_44, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_45, [_createElementVNode(\"div\", _hoisted_46, [_createVNode(_component_Doughnut, {\n data: $options.typeChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_47, [_createElementVNode(\"div\", _hoisted_48, _toDisplayString(Object.keys($data.indexInfo.typeStats).length), 1), _createElementVNode(\"div\", _hoisted_49, _toDisplayString(_ctx.$t('sysStatus.statusTypes')), 1)])]), _createElementVNode(\"div\", _hoisted_50, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.aggregatedTypeStats, (count, status, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: status,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getTypeChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_51, _toDisplayString(status), 1), _createElementVNode(\"span\", _hoisted_52, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_53, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])])]), _createElementVNode(\"div\", _hoisted_54, [_createElementVNode(\"div\", _hoisted_55, [_createElementVNode(\"div\", _hoisted_56, [_createVNode(_component_font_awesome_icon, {\n icon: \"tools\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.systemMaintenance')), 1)]), _createElementVNode(\"div\", _hoisted_57, [$data.isProcessing ? (_openBlock(), _createElementBlock(\"div\", _hoisted_58, [_createElementVNode(\"div\", _hoisted_59, [_createElementVNode(\"span\", _hoisted_60, _toDisplayString($options.phaseDescription), 1), _createElementVNode(\"span\", _hoisted_61, _toDisplayString(Math.round($data.processingProgress.percentage)) + \"%\", 1)]), _createVNode(_component_el_progress, {\n percentage: $data.processingProgress.percentage,\n \"stroke-width\": 12,\n \"show-text\": false,\n class: \"progress-bar\"\n }, null, 8, [\"percentage\"]), _createElementVNode(\"div\", _hoisted_62, [$data.processingProgress.current > 0 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_63, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.processingProgress.current.toLocaleString()) + \" \", 1), $data.processingProgress.total > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createTextVNode(\" / \" + _toDisplayString($data.processingProgress.total.toLocaleString()), 1)], 64)) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.records')), 1)])) : _createCommentVNode(\"\", true), $options.estimatedTimeRemaining ? (_openBlock(), _createElementBlock(\"span\", _hoisted_64, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n }), _createTextVNode(\" \" + _toDisplayString($options.estimatedTimeRemaining), 1)])) : _createCommentVNode(\"\", true)]), $data.processingProgress.message ? (_openBlock(), _createElementBlock(\"div\", _hoisted_65, _toDisplayString($data.processingProgress.message), 1)) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n size: \"small\",\n onClick: $options.cancelOperation,\n class: \"cancel-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.cancelOperation')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : $data.processingError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_66, [_createElementVNode(\"div\", _hoisted_67, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\"\n })]), _createElementVNode(\"div\", _hoisted_68, [_createElementVNode(\"div\", _hoisted_69, _toDisplayString($data.processingError.message), 1), $data.processingError.suggestion ? (_openBlock(), _createElementBlock(\"div\", _hoisted_70, _toDisplayString($data.processingError.suggestion), 1)) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_71, [$data.processingError.recoverable ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n size: \"small\",\n onClick: $options.retryOperation\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"default\",\n size: \"small\",\n onClick: $options.dismissError\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_72, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.rebuildTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.rebuilding,\n disabled: $data.isProcessing,\n onClick: $options.rebuildIndex,\n class: \"action-btn rebuild-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.rebuilding ? _ctx.$t('sysStatus.rebuilding') : _ctx.$t('sysStatus.rebuildIndex')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.backupTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"success\",\n loading: $data.backing,\n disabled: $data.isProcessing,\n onClick: $options.backupData,\n class: \"action-btn backup-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n }), _createTextVNode(\" \" + _toDisplayString($data.backing ? _ctx.$t('sysStatus.backingUp') : _ctx.$t('sysStatus.backupData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.restoreTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_73, [_createElementVNode(\"input\", {\n type: \"file\",\n ref: \"fileInput\",\n accept: \".json\",\n onChange: _cache[5] || (_cache[5] = (...args) => $options.handleFileSelect && $options.handleFileSelect(...args)),\n style: {\n \"display\": \"none\"\n }\n }, null, 544), _createVNode(_component_el_button, {\n type: \"warning\",\n loading: $data.restoring,\n disabled: $data.isProcessing,\n onClick: $options.selectRestoreFile,\n class: \"action-btn restore-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"upload\"\n }), _createTextVNode(\" \" + _toDisplayString($data.restoring ? _ctx.$t('sysStatus.restoring') : _ctx.$t('sysStatus.restoreData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])])]),\n _: 1\n }, 8, [\"content\"])]))])])]), $data.indexInfo.newestFile || $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", _hoisted_74, [$data.indexInfo.newestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"file-info-card info-card-newest\",\n onClick: _cache[8] || (_cache[8] = $event => $options.openFileInNewTab($data.indexInfo.newestFile))\n }, [$options.isImageFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[6] || (_cache[6] = $event => $options.handleImageError('newest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[7] || (_cache[7] = $event => $options.handleImageError('newest'))\n }, null, 40, _hoisted_75)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_76, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_77, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.latestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_78, [_createElementVNode(\"div\", _hoisted_79, _toDisplayString($data.indexInfo.newestFile.metadata?.FileName || $data.indexInfo.newestFile.id), 1), _createElementVNode(\"div\", _hoisted_80, _toDisplayString($options.formatTime($data.indexInfo.newestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true), $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-info-card info-card-oldest\",\n onClick: _cache[11] || (_cache[11] = $event => $options.openFileInNewTab($data.indexInfo.oldestFile))\n }, [$options.isImageFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[9] || (_cache[9] = $event => $options.handleImageError('oldest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[10] || (_cache[10] = $event => $options.handleImageError('oldest'))\n }, null, 40, _hoisted_81)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_82, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_83, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.earliestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_84, [_createElementVNode(\"div\", _hoisted_85, _toDisplayString($data.indexInfo.oldestFile.metadata?.FileName || $data.indexInfo.oldestFile.id), 1), _createElementVNode(\"div\", _hoisted_86, _toDisplayString($options.formatTime($data.indexInfo.oldestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)])), [[_directive_loading, $data.loading]]);\n}","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each(\n loopable: Record,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[] | Record,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge(target: T, source: [], options?: MergeOptions): T;\nexport function merge(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf(target: T, source: []): T;\nexport function mergeIf(target: T, source: S1): T & S1;\nexport function mergeIf(target: T, source: [S1]): T & S1;\nexport function mergeIf(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = (a: Set, b: Set) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique(items: T[]) {\n const set = new Set(items);\n\n if (set.size === items.length) {\n return items;\n }\n\n return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, vScale, _parsed} = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = (_parsed\n .slice(0, start + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = (_parsed\n .slice(end - 1)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n","export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n","\nconst intlCache = new Map();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n\n // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n //\n // toFixed has a max of 20 decimal places\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n clip: true,\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","import type {\n Chart,\n Point,\n FontSpec,\n CanvasFontSpec,\n PointStyle,\n RenderTextOpts,\n BackdropOptions\n} from '../types/index.js';\nimport type {\n TRBL,\n SplinePoint,\n RoundedRect,\n TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n ctx: CanvasRenderingContext2D,\n data: Record,\n gc: string[],\n longest: number,\n string: string\n) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n ctx: CanvasRenderingContext2D,\n font: string,\n arrayOfThings: Things,\n cache?: {data?: Record, garbageCollect?: string[], font?: string}\n) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n if (!ctx && !canvas) {\n return;\n }\n\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport interface DrawPointOptions {\n pointStyle: PointStyle;\n rotation?: number;\n radius: number;\n borderWidth: number;\n}\n\nexport function drawPoint(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number\n) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number,\n w: number\n) {\n let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n point: Point,\n area: TRBL,\n margin?: number\n) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n ctx: CanvasRenderingContext2D,\n previous: Point,\n target: Point,\n flip?: boolean,\n mode?: string\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n ctx: CanvasRenderingContext2D,\n previous: SplinePoint,\n target: SplinePoint,\n flip?: boolean\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n line: string,\n opts: RenderTextOpts\n) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color as string;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string | string[],\n x: number,\n y: number,\n font: CanvasFontSpec,\n opts: RenderTextOpts = {}\n) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i: number, line: string;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += Number(font.lineHeight);\n }\n\n ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n rect: RoundedRect & { radius: TRBLCorners }\n) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps(value: number | Record, props: K[]): Record;\nexport function _readValueToProps(value: number | Record, props: Record): Record;\nexport function _readValueToProps(value: number | Record, props: string[] | Record) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial, fallback?: Partial) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext(parentContext: null, context: T): T;\nexport function createContext(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n ResolverObjectKey,\n ResolverCache,\n ResolverProxy,\n DescriptorDefaults,\n Descriptor,\n ContextCache,\n ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n scopes: T,\n prefixes = [''],\n rootScopes?: R,\n fallback?: ResolverObjectKey,\n getTarget = () => scopes[0]\n) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache: ResolverCache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop: string) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop: string) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop: string, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n }) as ResolverProxy;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n proxy: ResolverProxy,\n context: AnyObject,\n subProxy?: ResolverProxy,\n descriptorDefaults?: DescriptorDefaults\n) {\n const cache: ContextCache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n }) as ContextProxy;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n proxy: ResolverCache,\n defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n target: AnyObject,\n prop: string,\n resolve: () => unknown\n) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(\n target: ContextCache,\n prop: string,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(\n prop: string,\n getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n target: ContextCache,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(\n prop: string,\n value: unknown[],\n target: ContextCache,\n isIndexable: (key: string) => boolean\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(\n fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n prop: ResolverObjectKey,\n value: unknown\n) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n set: Set,\n parentScopes: AnyObject[],\n key: ResolverObjectKey,\n parentFallback: ResolverObjectKey,\n value: unknown\n) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(\n parentScopes: AnyObject[],\n resolver: ResolverCache,\n prop: ResolverObjectKey,\n value: unknown\n) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n set: Set,\n allScopes: AnyObject[],\n key: ResolverObjectKey,\n fallback: ResolverObjectKey,\n item: unknown\n) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(\n resolver: ResolverCache,\n prop: string,\n value: unknown\n) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(\n prop: string,\n prefixes: string[],\n scopes: AnyObject[],\n proxy: ResolverProxy\n) {\n let value: unknown;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n meta: ChartMeta<'line' | 'scatter'>,\n data: AnyObject[],\n start: number,\n count: number\n) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array<{r: unknown}>(count);\n let i: number, ilen: number, index: number, item: AnyObject;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart | PrivateChart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart | PrivateChart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = round1(chart.height * pixelRatio);\n const deviceWidth = round1(chart.width * pixelRatio);\n\n (chart as PrivateChart).height = round1(chart.height);\n (chart as PrivateChart).width = round1(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n const {xScale, yScale} = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\n\n return {\n left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n };\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n let found = false;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n\n if (!found && !options.all) {\n return 0;\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n const {iScale, vScale} = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (and thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal metadata accordingly.\n\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n const skipNull = (meta) => {\n const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n _getAxisCount() {\n return this._getAxis().length;\n }\n\n getFirstScaleIdForIndexAxis() {\n const scales = this.chart.scales;\n const indexScaleId = this.chart.options.indexAxis;\n return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n }\n\n _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets) {\n axis[valueOrDefault(\n this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n )] = true;\n }\n return Object.keys(axis);\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n const axisCount = this._getAxisCount();\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n const {labels: {pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n if (data.labels.length && data.datasets.length) {\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !chart.getDataVisibility(i),\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: style.borderWidth,\n strokeStyle: style.borderColor,\n textAlign: textAlign,\n pointStyle: pointStyle,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%'\n };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n // https://github.com/chartjs/Chart.js/issues/11333\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n // https://github.com/chartjs/Chart.js/issues/11333\n delete meta.dataset;\n this.datasetElementType = false;\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter): Record;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter, value: unknown, format?: string): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter, timestamp: number, format: string): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(\n members: Partial, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options?: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase as {\n new (options?: AnyObject): DateAdapter;\n override(\n members: Partial, 'options'>>\n ): void;\n }\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const {vScale} = controller._cachedMeta;\n const {_parsed} = metaset;\n\n const distanceToDefinedLo = (_parsed\n .slice(0, result.lo + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.lo -= Math.max(0, distanceToDefinedLo);\n\n const distanceToDefinedHi = (_parsed\n .slice(result.hi)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps

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

(props: P[], final?: boolean): Partial>;\n getProps(props: string[], final?: boolean): Partial> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record;\n }\n const ret: Record = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n /** @type {CanvasTextAlign} */\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = /** @type {string} */ (label[j]);\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = undefined;\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n if (this._init === undefined) { // Do not trigger events before install\n return;\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n this._init = undefined; // Do not trigger events after uninstall\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis\n || axisFromPosition(opts.position)\n || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {axis};\n }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n // Unset pending resize request now to avoid possible recursion within _resize\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n // @ts-expect-error\n const clip = getDatasetClipArea(this, meta);\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (clip) {\n clipArea(ctx, clip);\n }\n\n meta.controller.draw();\n\n if (clip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the event inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.beginPath();\n ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n if (innerRadius > 0) {\n const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n } else {\n const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n if (borderJoinStyle === 'round') {\n ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n } else if (borderJoinStyle === 'bevel') {\n const r = 2 * clipWidth * clipWidth;\n const endX = -r * Math.cos(endAngle + PI / 2) + x;\n const endY = -r * Math.sin(endAngle + PI / 2) + y;\n const startX = r * Math.cos(startAngle + PI / 2) + x;\n const startY = r * Math.sin(startAngle + PI / 2) + y;\n ctx.lineTo(endX, endY);\n ctx.lineTo(startX, startY);\n }\n }\n ctx.closePath();\n\n ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n selfJoin: false,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n // Special case for boundary not supporting `segments` (simpleArc)\n // Bounds are provided as `target` for partial circle, or undefined for full circle\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n // Get all segments from `target` that intersect the bounds of current segment of `line`\n const targetSegments = _boundSegments(target, bounds);\n\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n // @ts-ignore\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n /** @type {string | {value: number}} */\n const fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n let target = parseFloat(fill);\n\n if (isFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n // @ts-ignore\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n let value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n // @ts-ignore\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n // First point of a segment -> need to add another point before this,\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n // In the middle of a segment, no need to add more points.\n break;\n }\n }\n }\n points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n const {chart, fill, line} = source;\n\n if (isFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n const boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n\n if (isFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {chart, index, line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n const meta = chart.getDatasetMeta(index);\n const clip = getDatasetClipArea(chart, meta);\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale, clip} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n\n ctx.save();\n\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n } else if (property === 'y') {\n clipHorizontal(ctx, target, area.left);\n fill(ctx, {line, target, color: below, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(clipX, firstPoint.y);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale, clip} = cfg;\n const segments = _segments(line, target, property);\n\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n\n ctx.save();\n ctx.fillStyle = backgroundColor;\n\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n ctx.beginPath();\n\n const lineLoop = !!line.pathSegment(ctx, src);\n\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n ctx.restore();\n }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\n\n if (property === 'x') {\n left = start;\n top = chartArea.top;\n right = end;\n bottom = chartArea.bottom;\n } else {\n left = chartArea.left;\n top = start;\n right = chartArea.right;\n bottom = end;\n }\n\n ctx.beginPath();\n\n if (clip) {\n left = Math.max(left, clip.left);\n right = Math.min(right, clip.right);\n top = Math.max(top, clip.top);\n bottom = Math.min(bottom, clip.bottom);\n }\n\n ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n id: 'filler',\n\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n _isBetween,\n callback as call,\n clipArea,\n getRtlAdapter,\n overrideTextDirection,\n restoreTextDirection,\n toFont,\n toPadding,\n unclipArea,\n valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this._added = false;\n\n // Contains hit boxes for each dataset (in dataset order)\n this.legendHitBoxes = [];\n\n /**\n \t\t * @private\n \t\t */\n this._hoveredItem = null;\n\n // Are we in doughnut mode which has a different data type\n this.doughnutMode = false;\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n\n fit() {\n const {options, ctx} = this;\n\n // The legend may not be displayed for a variety of reasons including\n // the fact that the defaults got set to `false`.\n // When the legend is not displayed, there are no guarantees that the options\n // are correctly formatted so we need to bail out as early as possible.\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n let width, height;\n\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth; // fill all the width\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight; // fill all the height\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n\n /**\n\t * @private\n\t */\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n\n return totalHeight;\n }\n\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n\n let left = 0;\n let col = 0;\n\n this.legendItems.forEach((legendItem, i) => {\n const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n // If too tall, go to new column\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n // Store the hitbox width and height here. Final position will be updated in `draw`\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n // Get max width\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n return totalWidth;\n }\n\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @private\n\t */\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n\n this.drawTitle();\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n // current position\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n // Set the ctx for the box\n ctx.save();\n\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n\n // Draw pointStyle as legend symbol\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n // Draw box as legend symbol\n // Adjust position when boxHeight < fontSize (want it centered)\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n // Horizontal\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n\n rtlHelper.setWidth(this.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n\n const realX = rtlHelper.x(x);\n\n drawLegendBox(realX, y, legendItem);\n\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n // Fill the actual label\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n\n // These defaults are used when the legend is vertical.\n // When horizontal, they are computed below.\n let left = this.left;\n let maxWidth = this.width;\n\n if (this.isHorizontal()) {\n // Move left / right so that the title is above the legend lines\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n // Move down so that the title is above the legend stack in every alignment\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n // Now that we know the left edge of the inner legend box, compute the correct\n // X coordinate from the title alignment\n const x = _alignStartEnd(position, left, left + maxWidth);\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n\n /**\n\t * @private\n\t */\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n\n /**\n\t * @private\n\t */\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n // See if we are touching one of the dataset boxes\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n // Touching an element\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n\n // Chart event already has relative position in it\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n call(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n call(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n call(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\n\nexport default {\n id: 'legend',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Legend,\n\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n\n // During the beforeUpdate step, the layout configuration needs to run\n // This ensures that if the legend position changes (via an option update)\n // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n\n // The labels need to be built after datasets are updated to ensure that colors\n // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n\n\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n\n // a callback that will handle\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n\n onHover: null,\n onLeave: null,\n\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n // Below is extra data used for toggling the datasets\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n\n // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n return {\n x: xAverage,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n // But make sure that active elements are still valid.\n return lastActive.filter(i =>\n this.chart.data.datasets[i.datasetIndex] &&\n this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n );\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({value: tickValue});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {extra, additionalAngle, padding, size} = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n // if to draw or overlapped\n visible: true,\n\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\n\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {left, top, right, bottom} = item;\n const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {centerPointLabels, display} = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n const {left, top, right, bottom} = item;\n const {backdropColor} = opts;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n // overlapping\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign} = item;\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || (index === 0 && this.min < 0)) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if ((index === 0 && this.min >= 0) && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if it's not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guesstimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n * Generates all timestamps defined in the data.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n * @protected\n */\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n","import type { PropType } from 'vue'\nimport type {\n ChartType,\n ChartData,\n ChartOptions,\n Plugin,\n UpdateMode\n} from 'chart.js'\n\nexport const CommonProps = {\n data: {\n type: Object as PropType,\n required: true\n },\n options: {\n type: Object as PropType,\n default: () => ({})\n },\n plugins: {\n type: Array as PropType,\n default: () => []\n },\n datasetIdKey: {\n type: String,\n default: 'label'\n },\n updateMode: {\n type: String as PropType,\n default: undefined\n }\n} as const\n\nexport const A11yProps = {\n ariaLabel: {\n type: String\n },\n ariaDescribedby: {\n type: String\n }\n} as const\n\nexport const Props = {\n type: {\n type: String as PropType,\n required: true\n },\n destroyDelay: {\n type: Number,\n default: 0 // No delay by default\n },\n ...CommonProps,\n ...A11yProps\n} as const\n","import { isProxy, toRaw, version } from 'vue'\nimport type {\n Chart,\n ChartType,\n ChartData,\n ChartDataset,\n ChartOptions,\n DefaultDataPoint\n} from 'chart.js'\n\nexport const compatProps =\n version[0] === '2'\n ? (internals: I, props: T) =>\n Object.assign(internals, { attrs: props }) as unknown as I & T\n : (internals: I, props: T) =>\n Object.assign(internals, props)\n\nexport function toRawIfProxy(obj: T) {\n return isProxy(obj) ? toRaw(obj) : obj\n}\n\nexport function cloneProxy(obj: T, src = obj) {\n return isProxy(src) ? new Proxy(obj, {}) : obj\n}\n\nexport function setOptions<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(chart: Chart, nextOptions: ChartOptions) {\n const options = chart.options\n\n if (options && nextOptions) {\n Object.assign(options, nextOptions)\n }\n}\n\nexport function setLabels<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextLabels: TLabel[] | undefined\n) {\n currentData.labels = nextLabels\n}\n\nexport function setDatasets<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextDatasets: ChartDataset[],\n datasetIdKey: string\n) {\n const addedDatasets: ChartDataset[] = []\n\n currentData.datasets = nextDatasets.map(\n (nextDataset: Record) => {\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find(\n (dataset: Record) =>\n dataset[datasetIdKey] === nextDataset[datasetIdKey]\n )\n\n // There is no original to update, so simply add new one\n if (\n !currentDataset ||\n !nextDataset.data ||\n addedDatasets.includes(currentDataset)\n ) {\n return { ...nextDataset } as ChartDataset\n }\n\n addedDatasets.push(currentDataset)\n\n Object.assign(currentDataset, nextDataset)\n\n return currentDataset\n }\n )\n}\n\nexport function cloneData<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(data: ChartData, datasetIdKey: string) {\n const nextData: ChartData = {\n labels: [],\n datasets: []\n }\n\n setLabels(nextData, data.labels)\n setDatasets(nextData, data.datasets, datasetIdKey)\n\n return nextData\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'dataset',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'nearest',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'index',\n { intersect: true },\n false\n )\n}\n","import { Chart as ChartJS } from 'chart.js'\nimport {\n defineComponent,\n h,\n nextTick,\n onUnmounted,\n onMounted,\n ref,\n shallowRef,\n toRaw,\n watch\n} from 'vue'\n\nimport type { ChartComponent } from './types.js'\nimport { Props } from './props.js'\nimport {\n cloneData,\n setLabels,\n setDatasets,\n setOptions,\n toRawIfProxy,\n cloneProxy\n} from './utils.js'\n\nexport const Chart = defineComponent({\n props: Props,\n setup(props, { expose, slots }) {\n const canvasRef = ref(null)\n const chartRef = shallowRef(null)\n\n expose({ chart: chartRef })\n\n const renderChart = () => {\n if (!canvasRef.value) return\n\n const { type, data, options, plugins, datasetIdKey } = props\n const clonedData = cloneData(data, datasetIdKey)\n const proxiedData = cloneProxy(clonedData, data)\n\n chartRef.value = new ChartJS(canvasRef.value, {\n type,\n data: proxiedData,\n options: { ...options },\n plugins\n })\n }\n\n const destroyChart = () => {\n const chart = toRaw(chartRef.value)\n\n if (chart) {\n if (props.destroyDelay > 0) {\n setTimeout(() => {\n chart.destroy()\n chartRef.value = null\n }, props.destroyDelay)\n } else {\n chart.destroy()\n chartRef.value = null\n }\n }\n }\n\n const update = (chart: ChartJS) => {\n chart.update(props.updateMode)\n }\n\n onMounted(renderChart)\n\n onUnmounted(destroyChart)\n\n watch(\n [() => props.options, () => props.data],\n (\n [nextOptionsProxy, nextDataProxy],\n [prevOptionsProxy, prevDataProxy]\n ) => {\n const chart = toRaw(chartRef.value)\n\n if (!chart) {\n return\n }\n\n let shouldUpdate = false\n\n if (nextOptionsProxy) {\n const nextOptions = toRawIfProxy(nextOptionsProxy)\n const prevOptions = toRawIfProxy(prevOptionsProxy)\n\n if (nextOptions && nextOptions !== prevOptions) {\n setOptions(chart, nextOptions)\n shouldUpdate = true\n }\n }\n\n if (nextDataProxy) {\n const nextLabels = toRawIfProxy(nextDataProxy.labels)\n const prevLabels = toRawIfProxy(prevDataProxy.labels)\n const nextDatasets = toRawIfProxy(nextDataProxy.datasets)\n const prevDatasets = toRawIfProxy(prevDataProxy.datasets)\n\n if (nextLabels !== prevLabels) {\n setLabels(chart.config.data, nextLabels)\n shouldUpdate = true\n }\n\n if (nextDatasets && nextDatasets !== prevDatasets) {\n setDatasets(chart.config.data, nextDatasets, props.datasetIdKey)\n shouldUpdate = true\n }\n }\n\n if (shouldUpdate) {\n nextTick(() => {\n update(chart)\n })\n }\n },\n { deep: true }\n )\n\n return () => {\n return h(\n 'canvas',\n {\n role: 'img',\n 'aria-label': props.ariaLabel,\n 'aria-describedby': props.ariaDescribedby,\n ref: canvasRef\n },\n [h('p', {}, [slots.default ? slots.default() : ''])]\n )\n }\n }\n}) as ChartComponent\n","import { defineComponent, shallowRef, h } from 'vue'\nimport type { ChartType, ChartComponentLike, DefaultDataPoint } from 'chart.js'\nimport {\n Chart as ChartJS,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController\n} from 'chart.js'\nimport type { DistributiveArray } from 'chart.js/dist/types/utils'\nimport type { TypedChartComponent, ChartComponentRef } from './types.js'\nimport { CommonProps } from './props.js'\nimport { Chart } from './chart.js'\nimport { compatProps } from './utils.js'\n\nexport function createTypedChart<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n type: TType,\n registerables: ChartComponentLike\n): TypedChartComponent {\n ChartJS.register(registerables)\n\n return defineComponent({\n props: CommonProps,\n setup(props, { expose }) {\n const ref = shallowRef(null)\n const reforwardRef = (chartRef: ChartComponentRef) => {\n ref.value = chartRef?.chart\n }\n\n expose({ chart: ref })\n\n return () => {\n return h(\n Chart,\n compatProps(\n {\n ref: reforwardRef as any\n },\n {\n type,\n ...props\n }\n )\n )\n }\n }\n }) as any\n}\n\nexport interface ExtendedDataPoint {\n [key: string]: string | number | null | ExtendedDataPoint\n}\n\nexport const Bar = /* #__PURE__ */ createTypedChart<\n 'bar',\n DefaultDataPoint<'bar'> | DistributiveArray\n>('bar', BarController)\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n 'doughnut',\n DoughnutController\n)\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController)\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController)\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n 'polarArea',\n PolarAreaController\n)\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController)\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n 'bubble',\n BubbleController\n)\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n 'scatter',\n ScatterController\n)\n","/**\r\n * BatchProcessor - 批量数据处理类\r\n * \r\n * 处理批量数据获取和处理的核心类,使用 cursor 分页机制获取所有数据。\r\n * 支持进度回调和取消功能。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\n\r\n/**\r\n * 批量操作错误类\r\n * 提供错误代码、是否可恢复、建议操作等信息\r\n */\r\nexport class BatchOperationError extends Error {\r\n constructor(message, code, recoverable = false, suggestion = '') {\r\n super(message);\r\n this.name = 'BatchOperationError';\r\n this.code = code;\r\n this.recoverable = recoverable;\r\n this.suggestion = suggestion;\r\n }\r\n}\r\n\r\n/**\r\n * 错误处理器映射\r\n * 根据 HTTP 状态码返回对应的错误对象\r\n */\r\nconst ERROR_HANDLERS = {\r\n 401: () => new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n ),\r\n 403: () => new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n ),\r\n 400: (details) => new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n ),\r\n 500: () => new BatchOperationError(\r\n '服务器内部错误',\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试,如果问题持续请联系管理员'\r\n ),\r\n NETWORK: () => new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n ),\r\n ABORT: () => new BatchOperationError(\r\n '操作已取消',\r\n 'ABORTED',\r\n false,\r\n ''\r\n )\r\n};\r\n\r\n/**\r\n * 根据错误创建 BatchOperationError\r\n * @param {Error|Response} error - 原始错误或响应对象\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\nfunction createError(error, details = '') {\r\n // 处理取消操作\r\n if (error.name === 'AbortError') {\r\n return ERROR_HANDLERS.ABORT();\r\n }\r\n \r\n // 处理 HTTP 响应错误\r\n if (error instanceof Response || (error && typeof error.status === 'number')) {\r\n const handler = ERROR_HANDLERS[error.status];\r\n if (handler) {\r\n return handler(details);\r\n }\r\n return new BatchOperationError(\r\n `请求失败: ${error.status}`,\r\n 'HTTP_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n \r\n // 处理网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n return ERROR_HANDLERS.NETWORK();\r\n }\r\n \r\n // 其他错误\r\n return new BatchOperationError(\r\n error.message || '未知错误',\r\n 'UNKNOWN_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n}\r\n\r\n/**\r\n * BatchProcessor 类\r\n * \r\n * 用于批量获取和处理数据的核心类\r\n */\r\nclass BatchProcessor {\r\n /**\r\n * 创建 BatchProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.batchSize - 每批数据量,默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.batchSize = options.batchSize || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.abortController = null;\r\n }\r\n\r\n /**\r\n * 获取所有数据记录\r\n * 使用 cursor 分页机制循环获取所有数据,直到没有更多数据或操作被取消\r\n * \r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 所有记录的数组\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async fetchAllRecords(includeValue = false) {\r\n // 创建新的 AbortController 用于取消操作\r\n this.abortController = new AbortController();\r\n const allRecords = [];\r\n let cursor = null;\r\n let totalFetched = 0;\r\n let batchCount = 0;\r\n\r\n try {\r\n do {\r\n // 检查是否已取消\r\n if (this.abortController.signal.aborted) {\r\n break;\r\n }\r\n\r\n // 获取一批数据\r\n const response = await this.fetchBatch(cursor, includeValue);\r\n \r\n // 合并数据到总数组\r\n allRecords.push(...response.records);\r\n cursor = response.nextCursor;\r\n totalFetched += response.records.length;\r\n batchCount++;\r\n\r\n // 调用进度回调\r\n this.onProgress({\r\n phase: 'fetching',\r\n current: totalFetched,\r\n batchCount: batchCount,\r\n message: `已获取 ${totalFetched} 条记录...`\r\n });\r\n\r\n } while (cursor && !this.abortController.signal.aborted);\r\n\r\n // 如果是因为取消而退出循环,抛出取消错误\r\n if (this.abortController.signal.aborted) {\r\n throw ERROR_HANDLERS.ABORT();\r\n }\r\n\r\n return allRecords;\r\n } catch (error) {\r\n // 调用错误回调\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : createError(error);\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 获取单批数据\r\n * \r\n * @param {string|null} cursor - 分页游标,首次请求为 null\r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 包含 records 和 nextCursor 的响应对象\r\n * @throws {BatchOperationError} 当请求失败时抛出\r\n */\r\n async fetchBatch(cursor, includeValue) {\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (cursor) {\r\n params.set('cursor', cursor);\r\n }\r\n if (includeValue) {\r\n params.set('includeValue', 'true');\r\n }\r\n params.set('limit', String(this.batchSize));\r\n\r\n try {\r\n // 发送请求,传入 abort signal 支持取消\r\n const response = await fetchWithAuth(\r\n `/api/manage/batch/list?${params}`,\r\n { signal: this.abortController.signal }\r\n );\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw createError(response, errorDetails);\r\n }\r\n\r\n // 解析响应数据\r\n const data = await response.json();\r\n \r\n // 验证响应格式\r\n if (!data.success) {\r\n throw new BatchOperationError(\r\n data.error || '请求失败',\r\n 'API_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return {\r\n records: data.records || [],\r\n nextCursor: data.nextCursor || null,\r\n totalProcessed: data.totalProcessed || 0\r\n };\r\n } catch (error) {\r\n // 如果已经是 BatchOperationError,直接抛出\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 否则转换为 BatchOperationError\r\n throw createError(error);\r\n }\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n * 调用此方法将中止正在进行的 fetch 请求\r\n */\r\n abort() {\r\n if (this.abortController) {\r\n this.abortController.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.abortController ? this.abortController.signal.aborted : false;\r\n }\r\n\r\n /**\r\n * 重置处理器状态\r\n * 在开始新的批量操作前调用\r\n */\r\n reset() {\r\n this.abortController = null;\r\n }\r\n}\r\n\r\nexport default BatchProcessor;\r\n","/**\r\n * IndexRebuilder - 索引重建类\r\n * \r\n * 处理索引重建的完整流程,包括数据获取、排序、分块上传和完成。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport BatchProcessor, { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * IndexRebuilder 类\r\n * \r\n * 用于重建索引的核心类,协调数据获取、排序和分块上传\r\n */\r\nclass IndexRebuilder {\r\n /**\r\n * 创建 IndexRebuilder 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每个分块的记录数,默认从后端获取\r\n * @param {number} options.maxRetries - 分块上传最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || null; // 从后端获取\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.sessionId = this.generateSessionId();\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 从后端获取索引配置(分块大小等)\r\n * @returns {Promise} 配置对象 { chunkSize, databaseType }\r\n */\r\n async fetchConfig() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/config');\r\n if (!response.ok) {\r\n throw new Error('获取配置失败');\r\n }\r\n const result = await response.json();\r\n if (result.success) {\r\n return {\r\n chunkSize: result.chunkSize || 500,\r\n databaseType: result.databaseType || 'unknown'\r\n };\r\n }\r\n throw new Error(result.error || '获取配置失败');\r\n } catch (error) {\r\n // 获取失败时使用保守的默认值(兼容 D1)\r\n console.warn('Failed to fetch index config, using default:', error);\r\n return { chunkSize: 500, databaseType: 'unknown' };\r\n }\r\n }\r\n\r\n /**\r\n * 执行索引重建\r\n * \r\n * 完整流程:\r\n * 1. 获取配置(分块大小)\r\n * 2. 获取所有记录\r\n * 3. 按时间戳降序排序\r\n * 4. 分块上传\r\n * 5. 完成重建\r\n * \r\n * @returns {Promise} 重建结果 { success: boolean, totalFiles: number }\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async rebuild() {\r\n this.aborted = false;\r\n \r\n try {\r\n // 获取配置(分块大小)\r\n if (!this.chunkSize) {\r\n const config = await this.fetchConfig();\r\n this.chunkSize = config.chunkSize;\r\n }\r\n\r\n // 获取所有记录\r\n this.onProgress({ \r\n phase: 'fetching', \r\n message: '正在获取数据...',\r\n current: 0\r\n });\r\n \r\n const processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' }),\r\n onError: (e) => this.onError(e)\r\n });\r\n \r\n const records = await processor.fetchAllRecords(false);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 排序(按时间戳降序)\r\n this.onProgress({ \r\n phase: 'sorting', \r\n message: '正在排序...',\r\n current: 0,\r\n total: records.length\r\n });\r\n \r\n this.sortByTimestampDescending(records);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 分块上传\r\n const chunks = this.splitIntoChunks(records);\r\n \r\n for (let i = 0; i < chunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n \r\n // 使用重试机制上传分块\r\n await this.uploadChunkWithRetry(chunks[i], i);\r\n \r\n this.onProgress({\r\n phase: 'uploading',\r\n current: i + 1,\r\n total: chunks.length,\r\n message: `正在上传分块 ${i + 1}/${chunks.length}...`\r\n });\r\n }\r\n\r\n // 完成重建\r\n this.onProgress({ \r\n phase: 'finalizing', \r\n message: '正在完成重建...',\r\n current: chunks.length,\r\n total: chunks.length\r\n });\r\n \r\n await this.finalize(chunks.length, records.length);\r\n\r\n this.onProgress({\r\n phase: 'completed',\r\n message: `索引重建完成,共 ${records.length} 个文件`,\r\n current: records.length,\r\n total: records.length\r\n });\r\n\r\n return { success: true, totalFiles: records.length };\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : new BatchOperationError(\r\n error.message || '索引重建失败',\r\n 'REBUILD_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 按时间戳降序排序记录\r\n * \r\n * @param {Array} records - 要排序的记录数组(原地排序)\r\n */\r\n sortByTimestampDescending(records) {\r\n records.sort((a, b) => {\r\n const timestampA = (a.metadata && a.metadata.TimeStamp) || 0;\r\n const timestampB = (b.metadata && b.metadata.TimeStamp) || 0;\r\n return timestampB - timestampA;\r\n });\r\n }\r\n\r\n /**\r\n * 将记录分割为多个块\r\n * \r\n * @param {Array} records - 要分割的记录数组\r\n * @returns {Array} 分块后的二维数组\r\n */\r\n splitIntoChunks(records) {\r\n const chunks = [];\r\n for (let i = 0; i < records.length; i += this.chunkSize) {\r\n chunks.push(records.slice(i, i + this.chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当所有重试都失败时抛出\r\n */\r\n async uploadChunkWithRetry(chunk, chunkId) {\r\n let lastError;\r\n \r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(chunk, chunkId);\r\n } catch (error) {\r\n lastError = error;\r\n \r\n // 不重试的错误类型\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' || \r\n error.code === 'FORBIDDEN' || \r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n \r\n // 如果还有重试机会,等待后重试\r\n if (attempt < this.maxRetries) {\r\n // 指数退避\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n \r\n this.onProgress({\r\n phase: 'retrying',\r\n message: `分块 ${chunkId + 1} 上传失败,正在重试 (${attempt}/${this.maxRetries})...`,\r\n current: chunkId,\r\n attempt: attempt\r\n });\r\n }\r\n }\r\n }\r\n \r\n // 所有重试都失败\r\n throw lastError instanceof BatchOperationError \r\n ? lastError \r\n : new BatchOperationError(\r\n `分块 ${chunkId + 1} 上传失败,已重试 ${this.maxRetries} 次`,\r\n 'CHUNK_UPLOAD_FAILED',\r\n false,\r\n '请检查网络连接后重新开始重建'\r\n );\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当上传失败时抛出\r\n */\r\n async uploadChunk(chunk, chunkId) {\r\n const checksum = await this.calculateChecksum(chunk);\r\n \r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n chunkId: String(chunkId),\r\n sessionId: this.sessionId,\r\n data: chunk,\r\n checksum\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 完成索引重建\r\n * \r\n * @param {number} totalChunks - 总分块数\r\n * @param {number} totalFiles - 总文件数\r\n * @returns {Promise} 完成响应\r\n * @throws {BatchOperationError} 当完成请求失败时抛出\r\n */\r\n async finalize(totalChunks, totalFiles) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/finalize', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n sessionId: this.sessionId,\r\n totalChunks,\r\n totalFiles\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n throw new BatchOperationError(\r\n error.message || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 生成唯一的会话 ID\r\n * \r\n * @returns {string} 会话 ID\r\n */\r\n generateSessionId() {\r\n return `rebuild_${Date.now()}_${Math.random().toString(36).slice(2)}`;\r\n }\r\n\r\n /**\r\n * 计算数据的 SHA-256 校验和\r\n * \r\n * @param {Array} data - 要计算校验和的数据\r\n * @returns {Promise} 十六进制格式的校验和\r\n */\r\n async calculateChecksum(data) {\r\n const text = JSON.stringify(data);\r\n const encoder = new TextEncoder();\r\n const dataBuffer = encoder.encode(text);\r\n\r\n // crypto.subtle 仅在安全上下文(HTTPS / localhost)下可用\r\n // 通过 0.0.0.0 等非安全上下文访问时需要 fallback\r\n if (typeof crypto !== 'undefined' && crypto.subtle) {\r\n const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n // Fallback: 简单但足够用于校验的哈希实现 (FNV-1a 变体, 产生 64 位十六进制)\r\n let h1 = 0x811c9dc5 >>> 0;\r\n let h2 = 0x811c9dc5 >>> 0;\r\n for (let i = 0; i < dataBuffer.length; i++) {\r\n h1 = Math.imul(h1 ^ dataBuffer[i], 0x01000193) >>> 0;\r\n h2 = Math.imul(h2 ^ dataBuffer[i], 0x01000193 + 0x10) >>> 0;\r\n }\r\n return h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0');\r\n }\r\n\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n * \r\n * @param {number} status - HTTP 状态码\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n );\r\n case 404:\r\n return new BatchOperationError(\r\n '会话不存在',\r\n 'SESSION_NOT_FOUND',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 410:\r\n return new BatchOperationError(\r\n '会话已过期',\r\n 'SESSION_EXPIRED',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n * \r\n * @param {number} ms - 延迟毫秒数\r\n * @returns {Promise}\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n\r\n /**\r\n * 重置重建器状态\r\n * 在开始新的重建操作前调用\r\n */\r\n reset() {\r\n this.aborted = false;\r\n this.sessionId = this.generateSessionId();\r\n }\r\n}\r\n\r\nexport default IndexRebuilder;\r\n","/**\r\n * BackupGenerator - 备份数据生成类\r\n * \r\n * 处理前端辅助备份功能,获取所有文件记录(包含分块文件的 value),\r\n * 构建完整的备份 JSON 文件,并触发浏览器下载。\r\n */\r\n\r\nimport BatchProcessor from '@/utils/batchProcessor';\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport packageInfo from '../../package.json'\r\n\r\n/**\r\n * BackupGenerator 类\r\n * \r\n * 用于生成和下载备份数据的类\r\n */\r\nclass BackupGenerator {\r\n /**\r\n * 创建 BackupGenerator 实例\r\n * @param {Object} options - 配置选项\r\n * @param {Function} options.onProgress - 进度回调函数\r\n */\r\n constructor(options = {}) {\r\n this.onProgress = options.onProgress || (() => {});\r\n this.processor = null;\r\n }\r\n\r\n /**\r\n * 生成并下载备份\r\n * \r\n * 完整流程:\r\n * 1. 获取所有文件记录(包含分块文件的 value)\r\n * 2. 构建备份数据结构\r\n * 3. 获取系统设置\r\n * 4. 生成并触发下载\r\n * \r\n * @returns {Promise} 包含 success 和 fileCount 的结果对象\r\n * @throws {Error} 当备份过程中发生错误时抛出\r\n */\r\n async generateBackup() {\r\n // 获取所有文件记录(包含分块文件的 value)\r\n this.processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' })\r\n });\r\n\r\n const records = await this.processor.fetchAllRecords(true);\r\n\r\n // 构建备份数据\r\n this.onProgress({ phase: 'building', message: '正在构建备份数据...' });\r\n\r\n const backupData = {\r\n timestamp: Date.now(),\r\n version: packageInfo.version,\r\n data: {\r\n fileCount: records.length,\r\n files: {},\r\n settings: {}\r\n }\r\n };\r\n\r\n // 将记录转换为以 id 为键的对象格式\r\n for (const record of records) {\r\n backupData.data.files[record.id] = {\r\n metadata: record.metadata,\r\n value: record.value || null\r\n };\r\n }\r\n\r\n // 3. 获取系统设置\r\n const settings = await this.fetchSettings();\r\n backupData.data.settings = settings;\r\n\r\n // 生成下载\r\n this.onProgress({ phase: 'downloading', message: '正在生成下载...' });\r\n this.downloadBackup(backupData);\r\n\r\n const settingsCount = Object.keys(settings).length;\r\n return { success: true, fileCount: records.length, settingsCount };\r\n }\r\n\r\n /**\r\n * 获取系统设置\r\n * \r\n * @returns {Promise} 系统设置对象,失败时返回空对象\r\n */\r\n async fetchSettings() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/settings');\r\n if (!response.ok) {\r\n console.warn('Failed to fetch settings:', response.status);\r\n return {};\r\n }\r\n const data = await response.json();\r\n // 返回 settings 字段,而不是整个响应\r\n return data.settings || {};\r\n } catch (error) {\r\n console.warn('Failed to fetch settings:', error);\r\n return {};\r\n }\r\n }\r\n\r\n /**\r\n * 触发浏览器下载备份文件\r\n * \r\n * @param {Object} data - 备份数据对象\r\n */\r\n downloadBackup(data) {\r\n // 将数据转换为格式化的 JSON 字符串\r\n const json = JSON.stringify(data, null, 2);\r\n \r\n // 创建 Blob 对象\r\n const blob = new Blob([json], { type: 'application/json' });\r\n \r\n // 创建下载 URL\r\n const url = URL.createObjectURL(blob);\r\n\r\n // 创建临时下载链接\r\n const a = document.createElement('a');\r\n a.href = url;\r\n // 使用日期作为文件名的一部分\r\n a.download = `imgbed_backup_${new Date().toISOString().split('T')[0]}.json`;\r\n \r\n // 触发下载\r\n document.body.appendChild(a);\r\n a.click();\r\n \r\n // 清理\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n /**\r\n * 取消当前备份操作\r\n */\r\n abort() {\r\n if (this.processor) {\r\n this.processor.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.processor ? this.processor.isAborted() : false;\r\n }\r\n}\r\n\r\nexport default BackupGenerator;\r\n","/**\r\n * RestoreProcessor - 分批恢复数据类\r\n * \r\n * 将备份数据分批上传到后端进行恢复,避免 CPU 超时\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * RestoreProcessor 类\r\n */\r\nclass RestoreProcessor {\r\n /**\r\n * 创建 RestoreProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每批数据量,默认 50\r\n * @param {number} options.maxRetries - 最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || 50;\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 执行恢复操作\r\n * \r\n * @param {Object} backupData - 备份数据对象\r\n * @returns {Promise} 恢复结果\r\n */\r\n async restore(backupData) {\r\n this.aborted = false;\r\n\r\n // 验证备份数据格式\r\n if (!backupData || !backupData.data) {\r\n throw new BatchOperationError(\r\n '备份文件格式无效',\r\n 'INVALID_BACKUP',\r\n false,\r\n '请选择有效的备份文件'\r\n );\r\n }\r\n\r\n const { files = {}, settings = {} } = backupData.data;\r\n const fileEntries = Object.entries(files);\r\n const settingEntries = Object.entries(settings);\r\n \r\n const totalFiles = fileEntries.length;\r\n const totalSettings = settingEntries.length;\r\n const totalItems = totalFiles + totalSettings;\r\n\r\n let restoredFiles = 0;\r\n let restoredSettings = 0;\r\n let failedFiles = 0;\r\n let failedSettings = 0;\r\n\r\n try {\r\n // 1. 分批恢复文件数据\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: '正在恢复文件数据...',\r\n current: 0,\r\n total: totalItems\r\n });\r\n\r\n const fileChunks = this.splitIntoChunks(fileEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < fileChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = fileChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('files', chunkData);\r\n restoredFiles += result.restoredCount;\r\n failedFiles += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: `正在恢复文件数据 ${restoredFiles}/${totalFiles}...`,\r\n current: restoredFiles,\r\n total: totalItems,\r\n percentage: (restoredFiles / totalItems) * 80\r\n });\r\n }\r\n\r\n // 2. 分批恢复系统设置\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: '正在恢复系统设置...',\r\n current: restoredFiles,\r\n total: totalItems\r\n });\r\n\r\n const settingChunks = this.splitIntoChunks(settingEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < settingChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = settingChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('settings', chunkData);\r\n restoredSettings += result.restoredCount;\r\n failedSettings += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: `正在恢复系统设置 ${restoredSettings}/${totalSettings}...`,\r\n current: restoredFiles + restoredSettings,\r\n total: totalItems,\r\n percentage: 80 + (restoredSettings / totalSettings) * 20\r\n });\r\n }\r\n\r\n // 3. 完成\r\n this.onProgress({\r\n phase: 'completed',\r\n message: '恢复完成',\r\n current: totalItems,\r\n total: totalItems,\r\n percentage: 100\r\n });\r\n\r\n return {\r\n success: true,\r\n restoredFiles,\r\n restoredSettings,\r\n failedFiles,\r\n failedSettings,\r\n backupTimestamp: backupData.timestamp\r\n };\r\n\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError\r\n ? error\r\n : new BatchOperationError(\r\n error.message || '恢复失败',\r\n 'RESTORE_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 将数组分割为多个块\r\n */\r\n splitIntoChunks(entries, chunkSize) {\r\n const chunks = [];\r\n for (let i = 0; i < entries.length; i += chunkSize) {\r\n chunks.push(entries.slice(i, i + chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n */\r\n async uploadChunkWithRetry(type, data) {\r\n let lastError;\r\n\r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(type, data);\r\n } catch (error) {\r\n lastError = error;\r\n\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' ||\r\n error.code === 'FORBIDDEN' ||\r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n\r\n if (attempt < this.maxRetries) {\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n }\r\n }\r\n }\r\n\r\n throw lastError;\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n */\r\n async uploadChunk(type, data) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/restore/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ type, data })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n\r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查备份文件格式'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n}\r\n\r\nexport default RestoreProcessor;\r\n","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nimport \"core-js/modules/web.url-search-params.delete.js\";\nimport \"core-js/modules/web.url-search-params.has.js\";\nimport \"core-js/modules/web.url-search-params.size.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport packageInfo from '../../../package.json';\nimport { Doughnut, Line } from 'vue-chartjs';\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler } from 'chart.js';\nimport IndexRebuilder from '@/utils/indexRebuilder';\nimport BackupGenerator from '@/utils/backupGenerator';\nimport RestoreProcessor from '@/utils/restoreProcessor';\nimport DateRangeCalendar from '@/components/DateRangeCalendar.vue';\nChartJS.register(ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler);\nconst DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateInput(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction getDefaultTrendDateRange() {\n const endDate = new Date();\n endDate.setHours(0, 0, 0, 0);\n const startDate = new Date(endDate.getTime() - 6 * DAY_MS);\n return [formatDateInput(startDate), formatDateInput(endDate)];\n}\nexport default {\n name: 'SysCogStatus',\n components: {\n Doughnut,\n Line,\n DateRangeCalendar\n },\n data() {\n return {\n loading: false,\n rebuilding: false,\n backing: false,\n restoring: false,\n indexInfo: {},\n version: packageInfo.version,\n // 从package.json获取版本号\n loadErrors: {\n newest: false,\n oldest: false\n },\n trendGroupBy: 'channel',\n trendDatePickerVisible: false,\n trendDateRange: getDefaultTrendDateRange(),\n // 渠道图表颜色\n channelColors: ['#8B5CF6', '#EC4899', '#06B6D4', '#10B981', '#F59E0B', '#EF4444', '#6366F1', '#84CC16'],\n // 状态图表颜色\n typeColors: ['#10B981', '#3B82F6', '#F59E0B', '#EF4444', '#8B5CF6', '#EC4899', '#06B6D4', '#84CC16'],\n // 上传趋势折线图颜色\n trendColors: ['#2563EB', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6', '#06B6D4', '#EC4899', '#84CC16', '#64748B'],\n // 批量操作进度状态\n isProcessing: false,\n processingPhase: '',\n // fetching, sorting, uploading, finalizing, building, downloading, completed\n processingProgress: {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n },\n processingError: null,\n processingStartTime: null,\n // 当前处理器实例(用于取消操作)\n currentRebuilder: null,\n currentBackupGenerator: null,\n currentRestoreProcessor: null\n };\n },\n computed: {\n // 渠道分布图表数据\n channelChartData() {\n const stats = this.indexInfo.channelStats || {};\n return {\n labels: Object.keys(stats),\n datasets: [{\n data: Object.values(stats),\n backgroundColor: this.channelColors.slice(0, Object.keys(stats).length),\n borderWidth: 0\n }]\n };\n },\n // 文件状态图表数据 - 将Block映射为\"已屏蔽\",其余为\"正常\"\n typeChartData() {\n const aggregatedStats = this.aggregatedTypeStats;\n return {\n labels: Object.keys(aggregatedStats),\n datasets: [{\n data: Object.values(aggregatedStats),\n backgroundColor: this.typeColors.slice(0, Object.keys(aggregatedStats).length),\n borderWidth: 0\n }]\n };\n },\n // 聚合后的状态统计:Block -> 已屏蔽,其余 -> 正常\n aggregatedTypeStats() {\n const stats = this.indexInfo.typeStats || {};\n const aggregatedStats = {};\n for (const [status, count] of Object.entries(stats)) {\n const mappedStatus = status === 'Block' ? this.$t('sysStatus.blocked') : this.$t('sysStatus.normalStatus');\n aggregatedStats[mappedStatus] = (aggregatedStats[mappedStatus] || 0) + count;\n }\n return aggregatedStats;\n },\n // 当前趋势维度数据\n currentTrendGroup() {\n const trend = this.indexInfo.uploadTrend || {};\n const groupBy = trend.groupBy || {};\n return groupBy[this.trendGroupBy] || {\n series: []\n };\n },\n // 趋势图原始日期标签\n trendRawLabels() {\n const trend = this.indexInfo.uploadTrend || {};\n return trend.labels || [];\n },\n // 当前范围是否跨年\n trendRangeCrossesYear() {\n const years = new Set();\n this.trendRawLabels.forEach(label => {\n this.extractTrendLabelDates(label).forEach(date => years.add(date.year));\n });\n return years.size > 1;\n },\n // 用于横轴展示的短日期标签\n trendDisplayLabels() {\n return this.trendRawLabels.map(label => this.formatTrendAxisLabel(label));\n },\n // 是否存在趋势图数据\n hasTrendData() {\n const trend = this.indexInfo.uploadTrend || {};\n return (trend.labels || []).length > 0;\n },\n // 日期选择弹窗宽度保持与项目内其他弹窗一致\n trendDateDialogWidth() {\n return window.innerWidth > 768 ? '420px' : '90%';\n },\n // 上传趋势折线图数据\n uploadTrendChartData() {\n const trend = this.indexInfo.uploadTrend || {};\n const series = this.currentTrendGroup.series || [];\n const totalColor = '#F97316';\n return {\n labels: this.trendDisplayLabels,\n datasets: [{\n label: this.$t('sysStatus.totalUploads'),\n data: trend.total || [],\n borderColor: totalColor,\n backgroundColor: this.hexToRgba(totalColor, 0.1),\n pointBackgroundColor: totalColor,\n pointBorderColor: totalColor,\n borderWidth: 3,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.28,\n fill: false\n }, ...series.map((item, index) => {\n const color = this.getTrendColor(index);\n return {\n label: this.formatTrendSeriesName(item),\n data: item.data || [],\n borderColor: color,\n backgroundColor: this.hexToRgba(color, 0.12),\n pointBackgroundColor: color,\n pointBorderColor: color,\n borderWidth: 2,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.32,\n fill: false\n };\n })]\n };\n },\n // 折线图配置\n lineChartOptions() {\n const textColor = '#64748B';\n return {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n mode: 'index',\n intersect: false\n },\n plugins: {\n legend: {\n display: true,\n position: 'bottom',\n labels: {\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n padding: 16,\n color: textColor\n }\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n callbacks: {\n title: items => {\n const index = items?.[0]?.dataIndex;\n return this.trendRawLabels[index] || '';\n },\n label: context => {\n const parsed = context.parsed || {};\n const value = parsed.y !== undefined ? parsed.y : context.raw;\n return ` ${context.dataset.label}: ${Number(value || 0).toLocaleString()} ${this.$t('sysStatus.uploadsUnit')}`;\n }\n }\n }\n },\n scales: {\n x: {\n grid: {\n display: false\n },\n ticks: {\n color: textColor,\n maxTicksLimit: 8,\n autoSkip: true\n }\n },\n y: {\n beginAtZero: true,\n grid: {\n color: 'rgba(148, 163, 184, 0.18)'\n },\n ticks: {\n color: textColor,\n precision: 0,\n callback: value => Number(value).toLocaleString()\n }\n }\n }\n };\n },\n // 图表配置\n chartOptions() {\n return {\n responsive: true,\n maintainAspectRatio: true,\n cutout: '65%',\n hoverOffset: 8,\n layout: {\n padding: 10\n },\n plugins: {\n legend: {\n display: false\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n z: 100,\n callbacks: {\n label: context => {\n const value = context.raw;\n const total = context.dataset.data.reduce((a, b) => a + b, 0);\n const percentage = (value / total * 100).toFixed(1);\n return ` ${value.toLocaleString()} (${percentage}%)`;\n }\n }\n }\n },\n animation: {\n animateRotate: true,\n animateScale: true\n }\n };\n },\n // 预计剩余时间\n estimatedTimeRemaining() {\n if (!this.isProcessing || !this.processingStartTime) return '';\n if (this.processingProgress.current === 0 || this.processingProgress.percentage === 0) return '';\n const elapsed = Date.now() - this.processingStartTime;\n const progress = this.processingProgress.percentage / 100;\n if (progress <= 0) return '';\n const totalEstimated = elapsed / progress;\n const remaining = totalEstimated - elapsed;\n if (remaining <= 0) return this.$t('sysStatus.aboutToComplete');\n const seconds = Math.ceil(remaining / 1000);\n if (seconds < 60) return this.$t('sysStatus.seconds', {\n count: seconds\n });\n const minutes = Math.ceil(seconds / 60);\n if (minutes < 60) return this.$t('sysStatus.minutes', {\n count: minutes\n });\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return this.$t('sysStatus.hoursMinutes', {\n hours,\n minutes: remainingMinutes\n });\n },\n // 处理阶段描述\n phaseDescription() {\n const phaseMap = {\n 'fetching': this.$t('sysStatus.phaseFetching'),\n 'sorting': this.$t('sysStatus.phaseSorting'),\n 'uploading': this.$t('sysStatus.phaseUploading'),\n 'finalizing': this.$t('sysStatus.phaseFinalizing'),\n 'building': this.$t('sysStatus.phaseBuilding'),\n 'downloading': this.$t('sysStatus.phaseDownloading'),\n 'restoring_files': this.$t('sysStatus.phaseRestoringFiles'),\n 'restoring_settings': this.$t('sysStatus.phaseRestoringSettings'),\n 'completed': this.$t('sysStatus.phaseCompleted'),\n 'retrying': this.$t('sysStatus.phaseRetrying')\n };\n return phaseMap[this.processingPhase] || this.processingPhase;\n }\n },\n mounted() {\n this.fetchIndexInfo();\n },\n methods: {\n // 获取渠道图表颜色\n getChartColor(index) {\n return this.channelColors[index % this.channelColors.length];\n },\n // 获取状态图表颜色\n getTypeChartColor(index) {\n return this.typeColors[index % this.typeColors.length];\n },\n // 获取趋势图表颜色\n getTrendColor(index) {\n return this.trendColors[index % this.trendColors.length];\n },\n // 格式化趋势序列名称\n formatTrendSeriesName(series) {\n if (series?.isOther || series?.name === '__other__') {\n return this.$t('sysStatus.otherChannels');\n }\n return series?.name || this.$t('sysStatus.unknown');\n },\n // 十六进制颜色转换为 rgba\n hexToRgba(hex, alpha) {\n const normalized = (hex || '').replace('#', '');\n if (normalized.length !== 6) {\n return `rgba(37, 99, 235, ${alpha})`;\n }\n const r = parseInt(normalized.slice(0, 2), 16);\n const g = parseInt(normalized.slice(2, 4), 16);\n const b = parseInt(normalized.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n },\n // 提取趋势标签中的日期\n extractTrendLabelDates(label) {\n const matches = String(label || '').match(/\\d{4}-\\d{2}-\\d{2}/g) || [];\n return matches.map(item => {\n const [year, month, day] = item.split('-').map(Number);\n return {\n year,\n month,\n day\n };\n });\n },\n // 横轴日期标签按范围简化,仅跨年时显示年份\n formatTrendAxisLabel(label) {\n const dates = this.extractTrendLabelDates(label);\n if (dates.length === 0) return label;\n const formatSingleDate = (date, includeYear) => {\n const monthDay = `${date.month}/${date.day}`;\n return includeYear ? `${date.year}/${monthDay}` : monthDay;\n };\n if (dates.length === 1) {\n return formatSingleDate(dates[0], this.trendRangeCrossesYear);\n }\n const [startDate, endDate] = dates;\n if (!this.trendRangeCrossesYear) {\n return `${formatSingleDate(startDate, false)}-${formatSingleDate(endDate, false)}`;\n }\n const endLabel = startDate.year === endDate.year ? formatSingleDate(endDate, false) : formatSingleDate(endDate, true);\n return `${formatSingleDate(startDate, true)}-${endLabel}`;\n },\n // 打开居中的日期范围选择弹窗\n openTrendDateDialog() {\n this.trendDatePickerVisible = true;\n },\n // 日期范围变更后重新拉取趋势数据\n handleTrendDateRangeChange(value) {\n if (!Array.isArray(value) || value.length !== 2 || !value[0] || !value[1]) {\n return;\n }\n this.trendDatePickerVisible = false;\n this.fetchIndexInfo();\n },\n // 获取趋势查询参数\n getTrendDateRangeParams() {\n if (!Array.isArray(this.trendDateRange) || this.trendDateRange.length !== 2) {\n this.trendDateRange = getDefaultTrendDateRange();\n }\n return {\n startDate: this.trendDateRange[0],\n endDate: this.trendDateRange[1]\n };\n },\n // 获取索引信息\n async fetchIndexInfo() {\n this.loading = true;\n try {\n const {\n startDate,\n endDate\n } = this.getTrendDateRangeParams();\n const params = new URLSearchParams({\n action: 'info',\n timezoneOffset: String(new Date().getTimezoneOffset()),\n trendMaxPoints: '90',\n trendSeriesLimit: '8',\n trendStartDate: startDate,\n trendEndDate: endDate\n });\n const response = await fetchWithAuth(`/api/manage/list?${params.toString()}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.indexInfo = data;\n } else {\n throw new Error('API请求失败');\n }\n } catch (error) {\n console.error('获取索引信息失败:', error);\n this.$message.error(this.$t('sysStatus.fetchIndexFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 重建索引 - 使用前端辅助重建流程\n async rebuildIndex() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.rebuilding = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 IndexRebuilder 实例\n this.currentRebuilder = new IndexRebuilder({\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n try {\n const result = await this.currentRebuilder.rebuild();\n\n // 成功完成\n this.$message.success(this.$t('sysStatus.rebuildSuccess', {\n count: result.totalFiles.toLocaleString()\n }));\n\n // 刷新索引信息\n setTimeout(() => {\n this.fetchIndexInfo();\n }, 1000);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.rebuilding = false;\n this.isProcessing = false;\n this.currentRebuilder = null;\n this.processingStartTime = null;\n }\n },\n // 备份数据 - 使用前端辅助备份流程\n async backupData() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.backing = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 BackupGenerator 实例\n this.currentBackupGenerator = new BackupGenerator({\n onProgress: progress => this.handleProgress(progress)\n });\n try {\n const result = await this.currentBackupGenerator.generateBackup();\n\n // 成功完成\n const settingsMsg = result.settingsCount > 0 ? this.$t('sysStatus.backupSuccessWithSettings', {\n fileCount: result.fileCount.toLocaleString(),\n settingsCount: result.settingsCount\n }) : this.$t('sysStatus.backupSuccess', {\n count: result.fileCount.toLocaleString()\n });\n this.$message.success(settingsMsg);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.backing = false;\n this.isProcessing = false;\n this.currentBackupGenerator = null;\n this.processingStartTime = null;\n }\n },\n // 选择恢复文件\n selectRestoreFile() {\n if (this.restoring) return;\n this.$refs.fileInput.click();\n },\n // 处理文件选择\n async handleFileSelect(event) {\n const file = event.target.files[0];\n if (!file) return;\n if (!file.name.endsWith('.json')) {\n this.$message.error(this.$t('sysStatus.selectJsonFile'));\n return;\n }\n\n // 确认恢复操作\n try {\n await this.$confirm(this.$t('sysStatus.restoreConfirmMessage'), this.$t('sysStatus.restoreConfirmTitle'), {\n confirmButtonText: this.$t('sysStatus.restoreConfirmOk'),\n cancelButtonText: this.$t('sysStatus.restoreConfirmCancel'),\n type: 'warning'\n });\n await this.restoreData(file);\n } catch (error) {\n if (error !== 'cancel') {\n console.error('确认恢复失败:', error);\n }\n }\n\n // 清除文件选择\n event.target.value = '';\n },\n // 恢复数据 - 使用前端辅助分批恢复流程\n async restoreData(file) {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.restoring = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n try {\n // 解析备份文件\n const fileContent = await file.text();\n let backupData;\n try {\n backupData = JSON.parse(fileContent);\n } catch (parseError) {\n throw new Error(this.$t('sysStatus.invalidBackupFile'));\n }\n\n // 创建 RestoreProcessor 实例\n this.currentRestoreProcessor = new RestoreProcessor({\n chunkSize: 100,\n // 每批恢复 100 条\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n const result = await this.currentRestoreProcessor.restore(backupData);\n\n // 恢复完成,重置恢复状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n\n // 显示恢复成功消息\n this.$message.success(this.$t('sysStatus.restoreSuccess', {\n files: result.restoredFiles,\n settings: result.restoredSettings\n }));\n\n // 短暂延迟后自动开始重建索引\n await new Promise(resolve => setTimeout(resolve, 500));\n await this.rebuildIndex();\n } catch (error) {\n console.error('恢复数据失败:', error);\n\n // 出错时重置状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(this.$t('sysStatus.restoreFailed') + ': ' + errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n }\n },\n // 格式化时间\n formatTime(timestamp) {\n if (!timestamp) return this.$t('sysStatus.unknown');\n const date = new Date(timestamp);\n return date.toLocaleString('zh-CN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n });\n },\n // 计算百分比\n getPercentage(value, total) {\n if (!total || total === 0) return 0;\n return Math.round(value / total * 100);\n },\n // 计算时间差\n getTimeAgo(timestamp) {\n if (!timestamp) return '';\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n if (days > 0) return this.$t('sysStatus.daysAgo', {\n count: days\n });\n if (hours > 0) return this.$t('sysStatus.hoursAgo', {\n count: hours\n });\n if (minutes > 0) return this.$t('sysStatus.minutesAgo', {\n count: minutes\n });\n return this.$t('sysStatus.justNow');\n },\n // 图片加载失败处理\n handleImageError(type) {\n this.loadErrors[type] = true;\n },\n // 检查是否应该显示预览图\n isValidPreview(type, file) {\n if (this.loadErrors[type]) return false;\n if (!file?.metadata?.FileType) return false;\n return file.metadata.FileType.includes('image') || file.metadata.FileType.includes('video');\n },\n // 打开发布页面\n openReleases() {\n window.open('https://github.com/MarSeventh/CloudFlare-ImgBed/releases', '_blank');\n },\n // 判断是否为图片文件\n isImageFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('image')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'avif', 'heic', 'heif'];\n return imageExtensions.includes(extension);\n },\n // 判断是否为视频文件\n isVideoFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('video')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'm4v', '3gp', 'mpeg', 'mpg'];\n return videoExtensions.includes(extension);\n },\n // 在新窗口打开文件\n openFileInNewTab(file) {\n if (!file?.id) return;\n window.open('/file/' + file.id + '?from=admin', '_blank');\n },\n // 处理进度更新\n handleProgress(progress) {\n this.processingPhase = progress.phase;\n this.processingProgress.message = progress.message || '';\n this.processingProgress.current = progress.current || 0;\n\n // 根据不同阶段计算进度百分比\n if (progress.phase === 'fetching') {\n // 获取阶段:基于已获取的记录数估算(假设总数未知时显示已获取数量)\n this.processingProgress.total = progress.total || 0;\n // 获取阶段占总进度的 60%\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = Math.min(60, progress.current / progress.total * 60);\n } else {\n // 未知总数时,使用对数增长模拟进度\n this.processingProgress.percentage = Math.min(50, Math.log10(progress.current + 1) * 15);\n }\n } else if (progress.phase === 'sorting') {\n // 排序阶段:占 60-70%\n this.processingProgress.percentage = 65;\n this.processingProgress.total = progress.total || this.processingProgress.total;\n } else if (progress.phase === 'uploading') {\n // 上传阶段:占 70-95%\n this.processingProgress.total = progress.total || 0;\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = 70 + progress.current / progress.total * 25;\n }\n } else if (progress.phase === 'finalizing') {\n // 完成阶段:95-100%\n this.processingProgress.percentage = 97;\n } else if (progress.phase === 'building') {\n // 构建备份阶段:70-90%\n this.processingProgress.percentage = 80;\n } else if (progress.phase === 'downloading') {\n // 下载阶段:90-100%\n this.processingProgress.percentage = 95;\n } else if (progress.phase === 'restoring_files') {\n // 恢复文件阶段:0-80%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 0;\n } else if (progress.phase === 'restoring_settings') {\n // 恢复设置阶段:80-100%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 80;\n } else if (progress.phase === 'completed') {\n // 完成\n this.processingProgress.percentage = 100;\n } else if (progress.phase === 'retrying') {\n // 重试阶段:保持当前进度\n this.processingProgress.message = progress.message;\n }\n },\n // 处理错误\n handleError(error) {\n console.error('批量操作错误:', error);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n },\n // 取消当前操作\n cancelOperation() {\n if (this.currentRebuilder) {\n this.currentRebuilder.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentBackupGenerator) {\n this.currentBackupGenerator.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentRestoreProcessor) {\n this.currentRestoreProcessor.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n },\n // 重试操作\n retryOperation() {\n this.processingError = null;\n if (this.rebuilding) {\n this.rebuilding = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.rebuildIndex();\n });\n } else if (this.backing) {\n this.backing = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.backupData();\n });\n }\n },\n // 关闭错误提示\n dismissError() {\n this.processingError = null;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogStatus.vue?vue&type=template&id=90d03e30&scoped=true\"\nimport script from \"./SysCogStatus.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogStatus.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogStatus.vue?vue&type=style&index=0&id=90d03e30&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-90d03e30\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, createBlock as _createBlock, createCommentVNode as _createCommentVNode, vShow as _vShow, withModifiers as _withModifiers, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"custom-select\", {\n 'is-open': $data.isOpen\n }]),\n style: _normalizeStyle({\n width: $props.width\n })\n }, [_createElementVNode(\"div\", {\n class: \"custom-select-trigger\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleDropdown && $options.toggleDropdown(...args))\n }, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-select-value\", {\n 'is-placeholder': !$props.modelValue\n }])\n }, _toDisplayString($options.displayLabel), 3), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"custom-select-arrow\"\n })]), _createVNode(_Transition, {\n name: \"dropdown-fade\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: \"custom-select-dropdown\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.options, option => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: option.value,\n class: _normalizeClass([\"custom-select-option\", {\n 'is-selected': $props.modelValue === option.value\n }]),\n onClick: $event => $options.selectOption(option.value)\n }, [_renderSlot(_ctx.$slots, \"option\", {\n option: option\n }, () => [option.channelType ? (_openBlock(), _createBlock(_component_ChannelIcon, {\n key: 0,\n type: option.channelType,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"type\", \"class\"])) : option.icon ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: option.icon,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"icon\", \"class\"])) : _createCommentVNode(\"\", true), _createElementVNode(\"span\", null, _toDisplayString(option.label), 1)], true)], 10, _hoisted_1);\n }), 128))], 512), [[_vShow, $data.isOpen]])]),\n _: 3\n })], 6);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'CustomSelect',\n components: {\n ChannelIcon\n },\n props: {\n modelValue: {\n type: [String, Number],\n default: ''\n },\n options: {\n type: Array,\n required: true\n // 格式: [{ value: '', label: '', icon?: '', iconClass?: '', channelType?: '' }]\n },\n placeholder: {\n type: String,\n default: ''\n },\n width: {\n type: String,\n default: '160px'\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n return {\n isOpen: false\n };\n },\n computed: {\n resolvedPlaceholder() {\n return this.placeholder || this.$t('common.select');\n },\n displayLabel() {\n const selected = this.options.find(opt => opt.value === this.modelValue);\n return selected ? selected.label : this.resolvedPlaceholder;\n }\n },\n mounted() {\n document.addEventListener('click', this.handleClickOutside);\n },\n beforeUnmount() {\n document.removeEventListener('click', this.handleClickOutside);\n },\n methods: {\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n },\n selectOption(value) {\n this.$emit('update:modelValue', value);\n this.$emit('change', value);\n this.isOpen = false;\n },\n handleClickOutside(e) {\n if (!this.$el.contains(e.target)) {\n this.isOpen = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomSelect.vue?vue&type=template&id=3c680cc7&scoped=true\"\nimport script from \"./CustomSelect.vue?vue&type=script&lang=js\"\nexport * from \"./CustomSelect.vue?vue&type=script&lang=js\"\n\nimport \"./CustomSelect.vue?vue&type=style&index=0&id=3c680cc7&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-3c680cc7\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withModifiers as _withModifiers, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-settings\"\n};\nconst _hoisted_2 = {\n class: \"page-header\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"header-actions\"\n};\nconst _hoisted_5 = {\n class: \"group-header\"\n};\nconst _hoisted_6 = {\n class: \"group-title\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"load-balance-switch\"\n};\nconst _hoisted_8 = {\n class: \"switch-label\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"channel-cards\"\n};\nconst _hoisted_10 = [\"onMousemove\", \"onMouseleave\"];\nconst _hoisted_11 = {\n class: \"card-header\"\n};\nconst _hoisted_12 = {\n class: \"card-title\"\n};\nconst _hoisted_13 = {\n class: \"channel-name\"\n};\nconst _hoisted_14 = {\n class: \"card-body\"\n};\nconst _hoisted_15 = {\n class: \"card-info\"\n};\nconst _hoisted_16 = {\n class: \"info-item\"\n};\nconst _hoisted_17 = {\n class: \"info-text\"\n};\nconst _hoisted_18 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_19 = {\n class: \"info-text\"\n};\nconst _hoisted_20 = {\n key: 1,\n class: \"info-item\"\n};\nconst _hoisted_21 = [\"title\"];\nconst _hoisted_22 = {\n class: \"info-item\"\n};\nconst _hoisted_23 = {\n class: \"info-text\"\n};\nconst _hoisted_24 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_25 = [\"title\"];\nconst _hoisted_26 = {\n class: \"info-item\"\n};\nconst _hoisted_27 = {\n class: \"info-text\"\n};\nconst _hoisted_28 = {\n class: \"info-item\"\n};\nconst _hoisted_29 = {\n class: \"info-text\"\n};\nconst _hoisted_30 = {\n class: \"info-item\"\n};\nconst _hoisted_31 = {\n class: \"info-text\"\n};\nconst _hoisted_32 = {\n class: \"info-item\"\n};\nconst _hoisted_33 = [\"title\"];\nconst _hoisted_34 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_35 = [\"title\"];\nconst _hoisted_36 = {\n key: 0,\n class: \"quota-mini\"\n};\nconst _hoisted_37 = {\n class: \"quota-text\"\n};\nconst _hoisted_38 = {\n class: \"card-actions\"\n};\nconst _hoisted_39 = {\n key: 1,\n class: \"empty-tip\"\n};\nconst _hoisted_40 = {\n class: \"channel-type-option\"\n};\nconst _hoisted_41 = {\n key: 0,\n class: \"form-warning\",\n style: {\n \"margin-top\": \"0\"\n }\n};\nconst _hoisted_42 = [\"innerHTML\"];\nconst _hoisted_43 = {\n class: \"form-warning\"\n};\nconst _hoisted_44 = {\n class: \"quota-label\"\n};\nconst _hoisted_45 = {\n class: \"quota-status\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_CustomSelect = _resolveComponent(\"CustomSelect\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.title')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.titleTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_CustomSelect, {\n modelValue: $data.channelFilter,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.channelFilter = $event),\n options: $options.filterOptions,\n placeholder: _ctx.$t('sysUpload.filterPlaceholder'),\n width: \"160px\"\n }, null, 8, [\"modelValue\", \"options\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => $data.showAddDialog = true),\n class: \"add-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.addChannel')), 1)]),\n _: 1\n })])]), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.filteredChannels, channelType => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channelType.value,\n class: \"channel-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_ChannelIcon, {\n type: channelType.value,\n class: _normalizeClass(['group-icon', $options.getChannelIconClass(channelType.value)])\n }, null, 8, [\"type\", \"class\"]), _createElementVNode(\"span\", null, _toDisplayString(channelType.label), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n class: \"channel-count\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelList(channelType.value).length), 1)]),\n _: 2\n }, 1024)]), $options.hasLoadBalance(channelType.value) ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('sysUpload.loadBalance')), 1), _createVNode(_component_el_switch, {\n modelValue: $options.getSettings(channelType.value).loadBalance.enabled,\n \"onUpdate:modelValue\": $event => $options.getSettings(channelType.value).loadBalance.enabled = $event,\n size: \"small\",\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])])) : _createCommentVNode(\"\", true)]), $options.getChannelList(channelType.value).length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.getChannelList(channelType.value), (channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel.name || index,\n class: _normalizeClass([\"channel-card\", [channelType.value, {\n 'disabled': !channel.enabled,\n 'fixed': channel.fixed\n }]]),\n onMousemove: $event => $options.handleCardMouseMove($event, channelType.value, index),\n onMouseleave: $event => $options.handleCardMouseLeave(channelType.value, index)\n }, [_createElementVNode(\"div\", {\n class: \"card-glow\",\n ref_for: true,\n ref: `glow-${channelType.value}-${index}`\n }, null, 512), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(channel.name || _ctx.$t('sysUpload.unnamedChannel')), 1), channel.fixed ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_switch, {\n modelValue: channel.enabled,\n \"onUpdate:modelValue\": $event => channel.enabled = $event,\n size: \"small\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, [channelType.value === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_17, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), channel.chatId ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [_createVNode(_component_font_awesome_icon, {\n icon: \"comments\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_19, \"Channel: \" + _toDisplayString($options.maskText(channel.chatId)), 1)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_21)])) : channelType.value === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"server\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_23, _toDisplayString(channel.bucketName || _ctx.$t('sysUpload.notSet')), 1)]), channel.endpoint ? (_openBlock(), _createElementBlock(\"div\", _hoisted_24, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.endpoint\n }, _toDisplayString(channel.endpoint), 9, _hoisted_25)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_27, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_29, \"Channel: \" + _toDisplayString($options.maskText(channel.channelId)), 1)]), channel.isNitro ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"success\"\n }, {\n default: _withCtx(() => [...(_cache[78] || (_cache[78] = [_createTextVNode(\"Nitro\", -1)]))]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(channel.repo || _ctx.$t('sysUpload.notSet')), 1)]), channel.isPrivate ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.baseUrl\n }, _toDisplayString(channel.baseUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_33)]), channel.publicUrl ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl), 9, _hoisted_35)])) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]), channel.quota?.enabled ? (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage(channel),\n status: $options.getQuotaStatus(channel),\n \"stroke-width\": 6\n }, null, 8, [\"percentage\", \"status\"]), _createElementVNode(\"span\", _hoisted_37, _toDisplayString($options.getQuotaText(channel)), 1)])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_38, [_createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openDetailDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"eye\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.detail')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openEditDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"danger\",\n size: \"small\",\n onClick: $event => $options.deleteChannel(channelType.value, index),\n disabled: channel.fixed\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])], 42, _hoisted_10);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\",\n class: \"empty-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysUpload.noChannels', {\n type: channelType.label\n })), 1)]))]);\n }), 128)), _createVNode(_component_el_dialog, {\n modelValue: $data.showAddDialog,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.showAddDialog = $event),\n title: _ctx.$t('sysUpload.addDialogTitle'),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetAddForm\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[34] || (_cache[34] = $event => $data.showAddDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), $data.newChannel.type !== 'cfr2' ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.confirmAddChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.confirmAdd')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newChannel,\n \"label-position\": \"top\",\n ref: \"addForm\",\n rules: $options.addRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelTypeLabel'),\n prop: \"type\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.newChannel.type,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.newChannel.type = $event),\n placeholder: _ctx.$t('sysUpload.channelTypePlaceholder'),\n style: {\n \"width\": \"100%\"\n },\n onChange: $options.onChannelTypeChange\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.addableChannels, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.value,\n label: ch.label,\n value: ch.value\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_40, [_createVNode(_component_ChannelIcon, {\n type: ch.value,\n class: _normalizeClass(['select-option-icon', $options.getChannelIconClass(ch.value)])\n }, null, 8, [\"type\", \"class\"]), _createElementVNode(\"span\", null, _toDisplayString(ch.label), 1)])]),\n _: 2\n }, 1032, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.type === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_41, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('sysUpload.r2ConfigNote')\n }, null, 8, _hoisted_42)])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameImmutableTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.name,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.newChannel.name = $event),\n placeholder: _ctx.$t('sysUpload.channelNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), $data.newChannel.type === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.chatId,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.newChannel.chatId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.chatIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.newChannel.type === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.endpoint,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.newChannel.endpoint = $event),\n placeholder: _ctx.$t('sysUpload.endpointPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.newChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.bucketName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.newChannel.bucketName = $event),\n placeholder: _ctx.$t('sysUpload.bucketNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.region,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.newChannel.region = $event),\n placeholder: _ctx.$t('sysUpload.bucketRegionPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.newChannel.accessKeyId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessKeyIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.newChannel.secretAccessKey = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.secretAccessKeyPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.newChannel.pathStyle = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.newChannel.type === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.channelId,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.newChannel.channelId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.channelIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isNitro,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.newChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_43, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.discordWarning')), 1)])], 64)) : $data.newChannel.type === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.repo,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newChannel.repo = $event),\n placeholder: _ctx.$t('sysUpload.repoNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.token,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newChannel.token = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.newChannel.type === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newChannel.baseUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavBaseUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.username,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.newChannel.username = $event),\n placeholder: _ctx.$t('sysUpload.webdavUsernamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.password,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.newChannel.password = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.webdavPasswordPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.newChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.headersText,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.newChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.newChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)], 64))]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showDetailDialog,\n \"onUpdate:modelValue\": _cache[37] || (_cache[37] = $event => $data.showDetailDialog = $event),\n title: _ctx.$t('sysUpload.detailDialogTitle', {\n name: $data.currentChannel?.name || ''\n }),\n class: \"channel-dialog\",\n onClosed: $options.resetDetailData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[36] || (_cache[36] = $event => $data.showDetailDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.closeBtn')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.openEditFromDetail\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_descriptions, {\n column: 1,\n border: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelNameDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelTypeDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelTypeLabel($data.currentChannelType)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.statusLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: $data.currentChannel?.enabled ? 'success' : 'info'\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.enabled ? _ctx.$t('sysUpload.enabled') : _ctx.$t('sysUpload.disabled')), 1)]),\n _: 1\n }, 8, [\"type\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannel?.fixed ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 0,\n label: _ctx.$t('sysUpload.configSource')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.chatIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.chatId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 2,\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"])) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.endpointLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.endpoint,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.cdnDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.cdnDomain || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.bucketName), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketRegion')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.region), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.pathStyle')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.pathStyle ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.channelId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.nitroMember')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isNitro ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.repoName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.repo), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.privateRepo')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isPrivate ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 6\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.baseUrl,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.username || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $options.formatHeaders($data.currentChannel?.headers),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavCreateDirectory')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.createDirectory !== false ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true), $data.currentChannel?.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 7\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.limitGB) + \" GB\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.threshold) + \"%\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, null, {\n label: _withCtx(() => [_createElementVNode(\"span\", _hoisted_44, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.currentUsage')) + \" \", 1), _createVNode(_component_el_button, {\n link: \"\",\n type: \"primary\",\n onClick: $options.refreshQuota,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\",\n class: _normalizeClass({\n 'fa-spin': $data.quotaLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_45, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage($data.currentChannel),\n status: $options.getQuotaStatus($data.currentChannel),\n \"stroke-width\": 16,\n \"text-inside\": true,\n format: () => $options.getQuotaText($data.currentChannel)\n }, null, 8, [\"percentage\", \"status\", \"format\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quota-info\", {\n 'quota-warning': $options.isQuotaExceeded($data.currentChannel)\n }])\n }, _toDisplayString($options.getQuotaStatusText($data.currentChannel)), 3)])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditDialog,\n \"onUpdate:modelValue\": _cache[77] || (_cache[77] = $event => $data.showEditDialog = $event),\n title: _ctx.$t('sysUpload.editDialogTitle', {\n name: $data.editChannel?.name || ''\n }),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetEditData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[76] || (_cache[76] = $event => $data.showEditDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.confirmEditChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.saveChanges')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editChannel,\n \"label-position\": \"top\",\n ref: \"editForm\",\n rules: $options.editRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameEditDisabledTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.name,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.editChannel.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.enableChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.enabled,\n \"onUpdate:modelValue\": _cache[39] || (_cache[39] = $event => $data.editChannel.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[40] || (_cache[40] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.chatId,\n \"onUpdate:modelValue\": _cache[41] || (_cache[41] = $event => $data.editChannel.chatId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[42] || (_cache[42] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[43] || (_cache[43] = $event => $data.editChannel.publicUrl = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[44] || (_cache[44] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[45] || (_cache[45] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[46] || (_cache[46] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[47] || (_cache[47] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.endpoint,\n \"onUpdate:modelValue\": _cache[48] || (_cache[48] = $event => $data.editChannel.endpoint = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[49] || (_cache[49] = $event => $data.editChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.bucketName,\n \"onUpdate:modelValue\": _cache[50] || (_cache[50] = $event => $data.editChannel.bucketName = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.region,\n \"onUpdate:modelValue\": _cache[51] || (_cache[51] = $event => $data.editChannel.region = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[52] || (_cache[52] = $event => $data.editChannel.accessKeyId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[53] || (_cache[53] = $event => $data.editChannel.secretAccessKey = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[54] || (_cache[54] = $event => $data.editChannel.pathStyle = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[55] || (_cache[55] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[56] || (_cache[56] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[57] || (_cache[57] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[58] || (_cache[58] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[59] || (_cache[59] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.channelId,\n \"onUpdate:modelValue\": _cache[60] || (_cache[60] = $event => $data.editChannel.channelId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[61] || (_cache[61] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isNitro,\n \"onUpdate:modelValue\": _cache[62] || (_cache[62] = $event => $data.editChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.repo,\n \"onUpdate:modelValue\": _cache[63] || (_cache[63] = $event => $data.editChannel.repo = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.token,\n \"onUpdate:modelValue\": _cache[64] || (_cache[64] = $event => $data.editChannel.token = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[65] || (_cache[65] = $event => $data.editChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[66] || (_cache[66] = $event => $data.editChannel.baseUrl = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.username,\n \"onUpdate:modelValue\": _cache[67] || (_cache[67] = $event => $data.editChannel.username = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.password,\n \"onUpdate:modelValue\": _cache[68] || (_cache[68] = $event => $data.editChannel.password = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[69] || (_cache[69] = $event => $data.editChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.headersText,\n \"onUpdate:modelValue\": _cache[70] || (_cache[70] = $event => $data.editChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[71] || (_cache[71] = $event => $data.editChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[72] || (_cache[72] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[73] || (_cache[73] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[74] || (_cache[74] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[75] || (_cache[75] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nimport CustomSelect from './CustomSelect.vue';\nexport default {\n components: {\n ChannelIcon,\n CustomSelect\n },\n data() {\n return {\n // 渠道类型筛选\n channelFilter: '',\n // 渠道类型列表\n channels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 可添加的渠道类型\n addableChannels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 各渠道配置\n telegramSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n cfr2Settings: {\n channels: []\n },\n s3Settings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n discordSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n huggingfaceSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n webdavSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n // 弹窗控制\n showAddDialog: false,\n showDetailDialog: false,\n showEditDialog: false,\n // 当前操作的渠道\n currentChannelType: '',\n currentChannelIndex: -1,\n currentChannel: null,\n editChannel: {},\n // 新增渠道表单\n newChannel: {\n type: '',\n name: '',\n enabled: true,\n // Telegram\n botToken: '',\n chatId: '',\n proxyUrl: '',\n // S3\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n // Discord\n channelId: '',\n isNitro: false,\n // HuggingFace\n repo: '',\n token: '',\n isPrivate: false,\n // WebDAV\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n },\n // 容量统计数据\n quotaStats: {},\n quotaLoading: false,\n // 加载状态\n loading: false\n };\n },\n computed: {\n // 筛选下拉框选项\n filterOptions() {\n return [{\n value: '',\n label: this.$t('common.all')\n }, ...this.channels.map(ch => ({\n value: ch.value,\n label: ch.label,\n channelType: ch.value,\n iconClass: this.getChannelIconClass(ch.value)\n }))];\n },\n // 根据筛选条件过滤渠道类型\n filteredChannels() {\n if (!this.channelFilter) {\n return this.channels;\n }\n return this.channels.filter(ch => ch.value === this.channelFilter);\n },\n addRules() {\n return {\n type: [{\n required: true,\n message: this.$t('sysUpload.channelTypePlaceholder'),\n trigger: 'change'\n }],\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n },\n editRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n // 卡片光斑跟随鼠标\n handleCardMouseMove(event, channelType, index) {\n const card = event.currentTarget;\n const rect = card.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '1';\n glowEl[0].style.left = `${x}px`;\n glowEl[0].style.top = `${y}px`;\n }\n },\n handleCardMouseLeave(channelType, index) {\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '0';\n }\n },\n getChannelIconClass(type) {\n return `channel-brand-${type}`;\n },\n // 获取渠道类型标签\n getChannelTypeLabel(type) {\n const channel = this.channels.find(c => c.value === type);\n return channel ? channel.label : type;\n },\n // 获取渠道列表\n getChannelList(type) {\n return this.getSettings(type)?.channels || [];\n },\n // 获取渠道设置对象\n getSettings(type) {\n const map = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n return map[type];\n },\n // 是否有负载均衡选项\n hasLoadBalance(type) {\n return ['telegram', 's3', 'discord', 'huggingface', 'webdav'].includes(type);\n },\n // 文本脱敏\n maskText(text, showLength = 4) {\n if (!text) return this.$t('sysUpload.notSet');\n if (text.length <= showLength * 2) return '****';\n return text.slice(0, showLength) + '****' + text.slice(-showLength);\n },\n formatHeaders(headers) {\n if (!headers || typeof headers === 'object' && Object.keys(headers).length === 0) {\n return this.$t('sysUpload.notSet');\n }\n if (typeof headers === 'string') {\n return headers;\n }\n return JSON.stringify(headers, null, 2);\n },\n headersToText(headers) {\n if (!headers) return '';\n if (typeof headers === 'string') return headers;\n return JSON.stringify(headers, null, 2);\n },\n parseHeadersText(text) {\n if (!text || !text.trim()) return {};\n try {\n const parsed = JSON.parse(text);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return null;\n }\n return parsed;\n } catch (error) {\n return null;\n }\n },\n // 打开详情弹窗\n openDetailDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n this.currentChannel = this.getChannelList(type)[index];\n this.showDetailDialog = true;\n },\n // 打开编辑弹窗\n openEditDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n const channel = this.getChannelList(type)[index];\n this.editChannel = JSON.parse(JSON.stringify(channel));\n if (type === 'webdav') {\n this.editChannel.headersText = this.headersToText(this.editChannel.headers);\n this.editChannel.createDirectory = this.editChannel.createDirectory !== false;\n }\n // 确保 quota 对象存在\n if (!this.editChannel.quota) {\n this.editChannel.quota = {\n enabled: false,\n limitGB: 10,\n threshold: 95\n };\n }\n this.showEditDialog = true;\n },\n // 从详情页打开编辑\n openEditFromDetail() {\n this.showDetailDialog = false;\n this.openEditDialog(this.currentChannelType, this.currentChannelIndex);\n },\n // 重置添加表单\n resetAddForm() {\n this.newChannel = {\n type: '',\n name: '',\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 重置详情弹窗数据\n resetDetailData() {\n this.currentChannel = null;\n },\n // 重置编辑弹窗数据\n resetEditData() {\n this.editChannel = {};\n },\n // 渠道类型变更时重置表单\n onChannelTypeChange() {\n // 保留 type 和 name,重置其他字段\n const {\n type,\n name\n } = this.newChannel;\n this.newChannel = {\n type,\n name,\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 确认添加渠道\n confirmAddChannel() {\n this.$refs.addForm.validate(valid => {\n if (!valid) return;\n const {\n type,\n name\n } = this.newChannel;\n const settings = this.getSettings(type);\n\n // 检查是否为保留名称({type}_env)\n const reservedNames = ['Telegram_env', 'R2_env', 'S3_env', 'Discord_env', 'HuggingFace_env', 'WebDAV_env'];\n if (reservedNames.includes(name)) {\n this.$message.warning(this.$t('sysUpload.reservedName'));\n return;\n }\n\n // 检查名称是否重复\n const isDuplicate = settings.channels.some(ch => ch.name === name);\n if (isDuplicate) {\n this.$message.warning(this.$t('sysUpload.duplicateName'));\n return;\n }\n let newChannelData = {\n id: settings.channels.length + 1,\n name: this.newChannel.name,\n type: type,\n savePath: 'database',\n enabled: true,\n fixed: false\n };\n\n // 根据类型添加特定字段\n if (type === 'telegram') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n chatId: this.newChannel.chatId,\n proxyUrl: this.newChannel.proxyUrl\n });\n } else if (type === 's3') {\n Object.assign(newChannelData, {\n endpoint: this.newChannel.endpoint,\n cdnDomain: this.newChannel.cdnDomain,\n bucketName: this.newChannel.bucketName,\n region: this.newChannel.region,\n accessKeyId: this.newChannel.accessKeyId,\n secretAccessKey: this.newChannel.secretAccessKey,\n pathStyle: this.newChannel.pathStyle,\n quota: {\n ...this.newChannel.quota\n }\n });\n } else if (type === 'discord') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n channelId: this.newChannel.channelId,\n proxyUrl: this.newChannel.proxyUrl,\n isNitro: this.newChannel.isNitro\n });\n } else if (type === 'huggingface') {\n Object.assign(newChannelData, {\n repo: this.newChannel.repo,\n token: this.newChannel.token,\n isPrivate: this.newChannel.isPrivate\n });\n } else if (type === 'webdav') {\n const headers = this.parseHeadersText(this.newChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n Object.assign(newChannelData, {\n baseUrl: this.newChannel.baseUrl,\n username: this.newChannel.username,\n password: this.newChannel.password,\n publicUrl: this.newChannel.publicUrl,\n headers,\n createDirectory: this.newChannel.createDirectory !== false,\n quota: {\n ...this.newChannel.quota\n }\n });\n }\n settings.channels.push(newChannelData);\n this.showAddDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 确认编辑渠道\n confirmEditChannel() {\n this.$refs.editForm.validate(valid => {\n if (!valid) return;\n const settings = this.getSettings(this.currentChannelType);\n const currentIndex = this.currentChannelIndex;\n const originalName = settings.channels[currentIndex]?.name || this.editChannel.name;\n const editedChannel = {\n ...this.editChannel,\n name: originalName\n };\n if (this.currentChannelType === 'webdav') {\n const headers = this.parseHeadersText(editedChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n editedChannel.headers = headers;\n editedChannel.createDirectory = editedChannel.createDirectory !== false;\n delete editedChannel.headersText;\n }\n settings.channels[this.currentChannelIndex] = editedChannel;\n this.showEditDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 删除渠道\n deleteChannel(type, index) {\n const channel = this.getChannelList(type)[index];\n if (channel.fixed) {\n this.$message.warning(this.$t('sysUpload.fixedChannelCannotDelete'));\n return;\n }\n this.$confirm(this.$t('sysUpload.deleteChannelConfirm'), this.$t('common.warning'), {\n confirmButtonText: this.$t('common.confirm'),\n cancelButtonText: this.$t('common.cancel'),\n type: 'warning'\n }).then(() => {\n const settings = this.getSettings(type);\n settings.channels.splice(index, 1);\n // 重新调整 id\n settings.channels.forEach((item, i) => {\n item.id = i + 1;\n });\n // 自动保存\n this.saveSettings();\n }).catch(() => {});\n },\n saveSettings() {\n // 保存设置\n const settings = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n fetchWithAuth('/api/manage/sysConfig/upload', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(() => {\n this.$message.success(this.$t('sysOthers.settingsSaved'));\n });\n },\n // 获取容量统计(重新计算)\n async refreshQuota() {\n this.quotaLoading = true;\n try {\n // 使用 POST 请求重新统计容量(会触发索引重建)\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n } else {\n // 如果重新统计失败,尝试获取已有数据\n const getResponse = await fetchWithAuth('/api/manage/quota');\n const getData = await getResponse.json();\n if (getData.success) {\n this.quotaStats = getData.quotaStats || {};\n }\n }\n } catch (error) {\n console.error('Failed to refresh quota stats:', error);\n } finally {\n this.quotaLoading = false;\n }\n },\n // 获取容量统计(仅读取,不重建索引)\n async loadQuotaStats() {\n try {\n const response = await fetchWithAuth('/api/manage/quota');\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.quotaStats || {};\n }\n } catch (error) {\n console.error('Failed to load quota stats:', error);\n }\n },\n // 获取渠道已用容量 (GB)\n getChannelUsedGB(channel) {\n const stats = this.quotaStats[channel.name];\n if (!stats) return 0;\n return (stats.usedMB || 0) / 1024;\n },\n // 获取容量百分比\n getQuotaPercentage(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n const percentage = usedGB / limitGB * 100;\n return Math.min(100, Math.round(percentage * 10) / 10);\n },\n // 获取进度条状态\n getQuotaStatus(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) return 'exception';\n if (percentage >= 80) return 'warning';\n return 'success';\n },\n // 获取容量文本\n getQuotaText(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n return `${usedGB.toFixed(2)} / ${limitGB} GB`;\n },\n // 判断是否超过阈值\n isQuotaExceeded(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n return percentage >= threshold;\n },\n // 获取状态文本\n getQuotaStatusText(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) {\n return `⚠️ 已达到容量阈值 (${threshold}%),渠道写入已暂停`;\n }\n if (percentage >= 80) {\n return `⚡ 容量使用较高,接近阈值`;\n }\n return `✓ 容量正常`;\n },\n // 容量限制开关变化时\n async onQuotaEnabledChange(enabled, channel) {\n if (enabled && channel.name) {\n // 首次启用时,检查是否有该渠道的统计数据\n const stats = this.quotaStats[channel.name];\n if (!stats) {\n // 没有统计数据,提示用户需要重新统计\n this.$confirm(this.$t('sysUpload.quotaInitConfirm'), this.$t('sysUpload.quotaInitTitle'), {\n confirmButtonText: this.$t('sysUpload.quotaInitConfirmBtn'),\n cancelButtonText: this.$t('sysUpload.quotaInitCancelBtn'),\n type: 'info'\n }).then(async () => {\n await this.recalculateQuota();\n }).catch(() => {\n this.$message.info(this.$t('sysUpload.quotaInitLater'));\n });\n }\n }\n },\n // 重新统计容量\n async recalculateQuota() {\n this.quotaLoading = true;\n try {\n this.$message.info(this.$t('sysUpload.quotaCalculating'));\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n this.$message.success(this.$t('sysUpload.quotaCalculateSuccess'));\n } else {\n this.$message.error(this.$t('sysUpload.quotaCalculateError') + (data.error || ''));\n }\n } catch (error) {\n console.error('Failed to recalculate quota:', error);\n this.$message.error(this.$t('sysUpload.quotaCalculateFailed'));\n } finally {\n this.quotaLoading = false;\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/upload').then(response => response.json()).then(data => {\n this.telegramSettings = data.telegram;\n // 确保 R2 渠道有 quota 默认值\n if (data.cfr2 && data.cfr2.channels) {\n data.cfr2.channels = data.cfr2.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.cfr2Settings = data.cfr2;\n // 确保 S3 渠道有 quota 默认值\n if (data.s3 && data.s3.channels) {\n data.s3.channels = data.s3.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.s3Settings = data.s3;\n // 确保 Discord 渠道有默认值\n if (data.discord && data.discord.channels) {\n data.discord.channels = data.discord.channels.map(channel => ({\n ...channel,\n proxyUrl: channel.proxyUrl || ''\n }));\n }\n this.discordSettings = data.discord || {\n loadBalance: {},\n channels: []\n };\n // 确保 HuggingFace 渠道有默认值\n if (data.huggingface && data.huggingface.channels) {\n data.huggingface.channels = data.huggingface.channels.map(channel => ({\n ...channel,\n isPrivate: channel.isPrivate || false\n }));\n }\n this.huggingfaceSettings = data.huggingface || {\n loadBalance: {},\n channels: []\n };\n // 确保 WebDAV 渠道有默认值\n if (data.webdav && data.webdav.channels) {\n data.webdav.channels = data.webdav.channels.map(channel => ({\n ...channel,\n username: channel.username || '',\n password: channel.password || '',\n publicUrl: channel.publicUrl || '',\n headers: channel.headers || {},\n createDirectory: channel.createDirectory !== false,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.webdavSettings = data.webdav || {\n loadBalance: {},\n channels: []\n };\n // 加载容量统计(仅读取,不重建索引)\n this.loadQuotaStats();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogUpload.vue?vue&type=template&id=9a9d7c2a&scoped=true\"\nimport script from \"./SysCogUpload.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogUpload.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogUpload.vue?vue&type=style&index=0&id=9a9d7c2a&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-9a9d7c2a\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"save-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"fade-up\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: _normalizeClass([\"floating-save-btn\", {\n 'is-loading': $props.loading\n }]),\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleClick && $options.handleClick(...args))\n }, [$props.loading ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"spinner\",\n spin: \"\"\n })) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"save\"\n })), _createElementVNode(\"span\", _hoisted_1, _toDisplayString($props.loading ? _ctx.$t('floatingSave.saving') : _ctx.$t('floatingSave.save')), 1)], 2), [[_vShow, $data.visible]])]),\n _: 1\n });\n}","export default {\n name: 'FloatingSaveButton',\n emits: ['click'],\n props: {\n loading: {\n type: Boolean,\n default: false\n },\n show: {\n type: Boolean,\n default: true\n }\n },\n data() {\n return {\n visible: false\n };\n },\n watch: {\n show: {\n immediate: true,\n handler(val) {\n if (val) {\n // 延迟显示,等待 Element Plus 加载遮罩淡出动画完成\n setTimeout(() => {\n this.visible = true;\n }, 600);\n } else {\n this.visible = false;\n }\n }\n }\n },\n methods: {\n handleClick() {\n if (!this.loading) {\n this.$emit('click');\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FloatingSaveButton.vue?vue&type=template&id=53091626&scoped=true\"\nimport script from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\nexport * from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\n\nimport \"./FloatingSaveButton.vue?vue&type=style&index=0&id=53091626&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-53091626\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"security-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"second-title\"\n};\nconst _hoisted_5 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_6 = {\n class: \"second-title\"\n};\nconst _hoisted_7 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_8 = {\n class: \"second-title token-title\"\n};\nconst _hoisted_9 = {\n class: \"token-actions\"\n};\nconst _hoisted_10 = {\n class: \"token-table-container\"\n};\nconst _hoisted_11 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_12 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_13 = {\n class: \"token-display\"\n};\nconst _hoisted_14 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_15 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_16 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_17 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_18 = {\n class: \"table-cell-content action-buttons\"\n};\nconst _hoisted_19 = {\n class: \"first-settings\"\n};\nconst _hoisted_20 = {\n class: \"first-title\"\n};\nconst _hoisted_21 = {\n class: \"second-title\"\n};\nconst _hoisted_22 = {\n class: \"second-title\"\n};\nconst _hoisted_23 = {\n class: \"query-param-list\"\n};\nconst _hoisted_24 = {\n class: \"query-param-list\"\n};\nconst _hoisted_25 = {\n class: \"first-settings\"\n};\nconst _hoisted_26 = {\n class: \"first-title\"\n};\nconst _hoisted_27 = {\n class: \"second-title\"\n};\nconst _hoisted_28 = {\n class: \"second-title\"\n};\nconst _hoisted_29 = {\n class: \"second-title\"\n};\nconst _hoisted_30 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_31 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_32 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_33 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_34 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_35 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_36 = {\n class: \"token-result\"\n};\nconst _hoisted_37 = {\n style: {\n \"margin-bottom\": \"15px\",\n \"color\": \"#e6a23c\"\n }\n};\nconst _hoisted_38 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, _toDisplayString(_ctx.$t('sysSecurity.authManagement')), 1), _createElementVNode(\"h4\", _hoisted_4, _toDisplayString(_ctx.$t('sysSecurity.userAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.user,\n rules: $options.userPassRules,\n ref: \"userPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.uploadPassword'),\n prop: \"authCode\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.authCode,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.authSettings.user.authCode = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleUserPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.user._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearUserPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.user._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearUserPassword,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.clearUserPassword = $event),\n onChange: $options.handleClearUserPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showUserPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewUserPassword\",\n key: \"user-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.confirmNewUserPassword,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.authSettings.user.confirmNewUserPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_6, _toDisplayString(_ctx.$t('sysSecurity.adminAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.admin,\n rules: $options.adminPassRules,\n ref: \"adminPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminUsername'),\n prop: \"adminUsername\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminUsername,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.authSettings.admin.adminUsername = $event),\n autocomplete: \"new-password\",\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminPassword'),\n prop: \"adminPassword\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminPassword,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.authSettings.admin.adminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleAdminPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.admin._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.admin._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearAdminPassword,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.clearAdminPassword = $event),\n onChange: $options.handleClearAdminPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showAdminPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewAdminPassword\",\n key: \"admin-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.confirmNewAdminPassword,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.authSettings.admin.confirmNewAdminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.apiTokenManagement')) + \" \", 1), _createElementVNode(\"a\", _hoisted_9, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: _cache[7] || (_cache[7] = $event => $data.showCreateTokenDialog = true),\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n })])]), _createElementVNode(\"div\", _hoisted_10, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $data.apiTokens,\n class: \"token-table\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"name\",\n label: _ctx.$t('sysSecurity.tokenName'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_11, _toDisplayString(scope.row.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"token\",\n label: _ctx.$t('sysSecurity.tokenValue'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(scope.row.token), 1)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"permissions\",\n label: _ctx.$t('sysSecurity.permissions'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(scope.row.permissions, perm => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: perm,\n size: \"small\",\n class: \"permission-tag\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getPermissionText(perm)), 1)]),\n _: 2\n }, 1024);\n }), 128))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"createdAt\",\n label: _ctx.$t('sysSecurity.createdAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_15, _toDisplayString($options.formatDate(scope.row.createdAt)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.status'),\n \"header-align\": \"center\",\n width: \"90\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tag, {\n type: $options.getTokenStatus(scope.row.expiresAt).status === 'active' ? 'success' : 'danger',\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getTokenStatus(scope.row.expiresAt).label), 1)]),\n _: 2\n }, 1032, [\"type\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.expiresAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.getTokenStatus(scope.row.expiresAt).expiresText), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.operation'),\n fixed: \"right\",\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n onClick: $event => $options.editToken(scope.row)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteToken(scope.row.id)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, $data.tokenLoading]])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"h3\", _hoisted_20, _toDisplayString(_ctx.$t('sysSecurity.uploadManagement')), 1), _createElementVNode(\"h4\", _hoisted_21, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.imageReview')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.imageReviewTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.moderate,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.moderate.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.uploadSettings.moderate.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.reviewChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.moderate.channel,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.uploadSettings.moderate.channel = $event),\n placeholder: _ctx.$t('sysSecurity.reviewChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"moderatecontent.com\",\n value: \"moderatecontent.com\"\n }), _createVNode(_component_el_option, {\n label: \"nsfwjs\",\n value: \"nsfwjs\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.moderate.channel === 'moderatecontent.com' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.apiKey')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.moderateContentApiKey,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.uploadSettings.moderate.moderateContentApiKey = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.uploadSettings.moderate.channel === 'nsfwjs' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.nsfwApiPath,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.uploadSettings.moderate.nsfwApiPath = $event),\n placeholder: \"https://nsfwjs.your.domain\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.ipQuery')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.ipQueryTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.ipQuery,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableIpQuery')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.ipQuery.enabled,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.uploadSettings.ipQuery.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.ipQueryChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.ipQuery.channel,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.uploadSettings.ipQuery.channel = $event),\n placeholder: _ctx.$t('sysSecurity.ipQueryChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: _ctx.$t('sysSecurity.customApi'),\n value: \"customApi\"\n }, null, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.ipQuery.channel === 'customApi' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.url,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.uploadSettings.ipQuery.customApi.url = $event),\n placeholder: \"https://api.example.com/ip\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.queryParams')\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_23, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.params, (param, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"query-param-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: param.key,\n \"onUpdate:modelValue\": $event => param.key = $event,\n placeholder: _ctx.$t('sysSecurity.paramNamePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_input, {\n modelValue: param.value,\n \"onUpdate:modelValue\": $event => param.value = $event,\n placeholder: _ctx.$t('sysSecurity.paramValuePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryParam(index),\n disabled: $data.uploadSettings.ipQuery.customApi.params.length <= 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryParam\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addQueryParam')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.responseFields')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.responseFieldsTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_24, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.responseFields, (field, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"response-field-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.responseFields[index],\n \"onUpdate:modelValue\": $event => $data.uploadSettings.ipQuery.customApi.responseFields[index] = $event,\n placeholder: _ctx.$t('sysSecurity.responseFieldPathPlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, -1),\n disabled: index === 0\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, 1),\n disabled: index === $data.uploadSettings.ipQuery.customApi.responseFields.length - 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryResponseField(index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryResponseField\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addResponseField')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"h3\", _hoisted_26, _toDisplayString(_ctx.$t('sysSecurity.accessManagement')), 1), _createElementVNode(\"h4\", _hoisted_27, _toDisplayString(_ctx.$t('sysSecurity.domainFilter')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.allowedDomains')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.allowedDomainsTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.accessSettings.allowedDomains,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.accessSettings.allowedDomains = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_28, _toDisplayString(_ctx.$t('sysSecurity.whiteListMode')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n rules: $options.accessRules,\n ref: \"accessForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.enableWhiteList')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.enableWhiteListTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.whiteListMode,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.accessSettings.whiteListMode = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_29, _toDisplayString(_ctx.$t('sysSecurity.sessionSecurityPolicy')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.secureMode')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.secureModeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.sessionSecure,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.accessSettings.sessionSecure = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.userSessionMaxAge'),\n prop: \"userSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.userSessionMaxAge,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.accessSettings.userSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_30, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminSessionMaxAge'),\n prop: \"adminSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.adminSessionMaxAge,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.accessSettings.adminSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showCreateTokenDialog,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.showCreateTokenDialog = $event),\n title: _ctx.$t('sysSecurity.createTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_33, [_createVNode(_component_el_button, {\n onClick: _cache[26] || (_cache[26] = $event => $data.showCreateTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.createToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.createBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newToken,\n rules: $options.tokenRules,\n ref: \"tokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel'),\n prop: \"name\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newToken.name,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.newToken.name = $event),\n placeholder: _ctx.$t('sysSecurity.tokenNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.newToken.permissions,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.newToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.neverExpire,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newToken.neverExpire = $event),\n onChange: $options.onCreateNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_el_input_number, {\n modelValue: $data.newToken.expirationValue,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.newToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.autoDelete,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditTokenDialog,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.showEditTokenDialog = $event),\n title: _ctx.$t('sysSecurity.editTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_35, [_createVNode(_component_el_button, {\n onClick: _cache[34] || (_cache[34] = $event => $data.showEditTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.updateToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.updateBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editingToken,\n rules: $options.editTokenRules,\n ref: \"editTokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editingToken.name,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.editingToken.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.editingToken.permissions,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.editingToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.neverExpire,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.editingToken.neverExpire = $event),\n onChange: $options.onEditNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_34, [_createVNode(_component_el_input_number, {\n modelValue: $data.editingToken.expirationValue,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.editingToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.editingToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.editingToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.autoDelete,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.editingToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showTokenResultDialog,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.showTokenResultDialog = $event),\n title: _ctx.$t('sysSecurity.tokenCreatedTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_38, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[37] || (_cache[37] = $event => $data.showTokenResultDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.savedBtn')), 1)]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"p\", _hoisted_37, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"5px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysSecurity.tokenCreatedWarning')), 1)]), _createVNode(_component_el_form, {\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString($data.createdToken.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.fullToken')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.createdToken.token,\n \"onUpdate:modelValue\": _cache[36] || (_cache[36] = $event => $data.createdToken.token = $event),\n readonly: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.copyToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.copyBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])])), [[_directive_loading, $data.loading]]);\n}","/**\r\n * Token 过期时间工具模块\r\n * 提供 Token 有效期计算、状态判定和向后兼容默认值填充功能\r\n */\r\n\r\n/**\r\n * 时间单位到毫秒的映射(月和年需要特殊处理)\r\n */\r\nconst SIMPLE_UNIT_MS = {\r\n s: 1000,\r\n m: 60 * 1000,\r\n h: 60 * 60 * 1000,\r\n d: 24 * 60 * 60 * 1000,\r\n};\r\n\r\n/**\r\n * 根据基准时间、数值和时间单位计算过期时间\r\n * @param {Date|string} baseTime - 基准时间(Date 对象或 ISO 8601 字符串)\r\n * @param {number} value - 正整数有效期数值\r\n * @param {string} unit - 时间单位:'s','m','h','d','M','Y'\r\n * @returns {string} 过期时间 ISO 8601 字符串\r\n * @throws {Error} 当 value <= 0 或 unit 无效时抛出错误\r\n */\r\nexport function computeExpiresAt(baseTime, value, unit) {\r\n if (!Number.isFinite(value) || value <= 0) {\r\n throw new Error('有效期数值必须大于 0');\r\n }\r\n\r\n const base = typeof baseTime === 'string' ? new Date(baseTime) : new Date(baseTime.getTime());\r\n\r\n if (SIMPLE_UNIT_MS[unit]) {\r\n return new Date(base.getTime() + value * SIMPLE_UNIT_MS[unit]).toISOString();\r\n }\r\n\r\n if (unit === 'M') {\r\n base.setUTCMonth(base.getUTCMonth() + value);\r\n return base.toISOString();\r\n }\r\n\r\n if (unit === 'Y') {\r\n base.setUTCFullYear(base.getUTCFullYear() + value);\r\n return base.toISOString();\r\n }\r\n\r\n throw new Error(`无效的时间单位: ${unit}`);\r\n}\r\n\r\n\r\n/**\r\n * 格式化过期时间为可读字符串\r\n * @param {string} isoString - ISO 8601 时间字符串\r\n * @returns {string} 格式化后的时间字符串\r\n */\r\nfunction formatExpiresTime(isoString) {\r\n const date = new Date(isoString);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const hours = String(date.getHours()).padStart(2, '0');\r\n const minutes = String(date.getMinutes()).padStart(2, '0');\r\n const seconds = String(date.getSeconds()).padStart(2, '0');\r\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\r\n}\r\n\r\n/**\r\n * 获取 Token 的状态信息\r\n * @param {string|null} expiresAt - 过期时间 ISO 8601 字符串,null 表示永不过期\r\n * @param {Date} [now=new Date()] - 当前时间\r\n * @returns {{ status: 'active'|'expired', label: '有效'|'已过期', expiresText: string }}\r\n */\r\nexport function getTokenStatus(expiresAt, now = new Date()) {\r\n if (expiresAt === null || expiresAt === undefined) {\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: '永不过期',\r\n };\r\n }\r\n\r\n const expiresDate = new Date(expiresAt);\r\n const currentTime = now instanceof Date ? now : new Date(now);\r\n const formattedTime = formatExpiresTime(expiresAt);\r\n\r\n if (currentTime.getTime() > expiresDate.getTime()) {\r\n return {\r\n status: 'expired',\r\n label: '已过期',\r\n expiresText: formattedTime,\r\n };\r\n }\r\n\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: formattedTime,\r\n };\r\n}\r\n\r\n\r\n/**\r\n * 为缺少过期相关字段的旧 Token 数据填充默认值\r\n * @param {Object} tokenData - Token 数据对象\r\n * @returns {Object} 填充默认值后的新 Token 数据对象\r\n */\r\nexport function applyTokenDefaults(tokenData) {\r\n return {\r\n ...tokenData,\r\n expiresAt: tokenData.expiresAt ?? null,\r\n autoDelete: tokenData.autoDelete ?? false,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nimport { computeExpiresAt, getTokenStatus } from '@/utils/tokenExpiration';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n authSettings: {\n user: {},\n admin: {}\n },\n uploadSettings: {\n moderate: {},\n ipQuery: {\n enabled: false,\n channel: 'customApi',\n customApi: {\n url: '',\n params: [{\n key: 'ip',\n value: '{ip}'\n }],\n responseFields: []\n }\n }\n },\n accessSettings: {},\n apiTokens: [],\n // API Token列表\n // 加载状态\n loading: true,\n tokenLoading: false,\n // 修改密码相关\n oriUserPassword: '',\n // 原上传密码\n oriAdminPassword: '',\n // 原管理端密码\n\n showUserPassConfirm: false,\n // 显示用户密码确认框\n showAdminPassConfirm: false,\n // 显示管理密码确认框\n clearUserPassword: false,\n // 清除用户密码开关\n clearAdminPassword: false,\n // 清除管理密码开关\n\n // Token对话框相关\n showCreateTokenDialog: false,\n showEditTokenDialog: false,\n showTokenResultDialog: false,\n timeUnitOptions: [{\n labelKey: 'sysSecurity.timeUnitSeconds',\n value: 's'\n }, {\n labelKey: 'sysSecurity.timeUnitMinutes',\n value: 'm'\n }, {\n labelKey: 'sysSecurity.timeUnitHours',\n value: 'h'\n }, {\n labelKey: 'sysSecurity.timeUnitDays',\n value: 'd'\n }, {\n labelKey: 'sysSecurity.timeUnitMonths',\n value: 'M'\n }, {\n labelKey: 'sysSecurity.timeUnitYears',\n value: 'Y'\n }],\n newToken: {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n editingToken: {\n id: '',\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n createdToken: {\n name: '',\n token: ''\n }\n };\n },\n computed: {\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n userPassRules() {\n return {\n authCode: [{\n validator: (rule, value, callback) => {\n const urlReservedChars = ['%', '&', '?', '#', '/'];\n const hasReservedChar = urlReservedChars.some(char => value && value.includes(char));\n if (hasReservedChar) {\n callback(new Error(this.$t('sysSecurity.passwordUrlReserved')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }],\n confirmNewUserPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmUploadPassword')));\n } else if (value !== this.authSettings.user.authCode) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n adminPassRules() {\n return {\n confirmNewAdminPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmAdminPassword')));\n } else if (value !== this.authSettings.admin.adminPassword) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n accessRules() {\n const validateSessionMaxAge = (rule, value, callback) => {\n if (!Number.isInteger(value) || value < 1 || value > 3650) {\n callback(new Error(this.$t('sysSecurity.sessionMaxAgeInvalid')));\n } else {\n callback();\n }\n };\n return {\n userSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }],\n adminSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }]\n };\n },\n tokenRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysSecurity.tokenNameRequired'),\n trigger: 'blur'\n }],\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.newToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n editTokenRules() {\n return {\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.editingToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n normalizeIpQuerySettings(settings = {}) {\n const ipQuery = settings.ipQuery || {};\n const customApi = ipQuery.customApi || {};\n const params = Array.isArray(customApi.params) && customApi.params.length > 0 ? customApi.params.map(param => ({\n key: param?.key || '',\n value: param?.value || ''\n })) : [{\n key: 'ip',\n value: '{ip}'\n }];\n const responseFields = Array.isArray(customApi.responseFields) ? customApi.responseFields.map(field => {\n if (typeof field === 'string') return field;\n return field?.path || '';\n }) : [];\n return {\n ...settings,\n moderate: settings.moderate || {},\n ipQuery: {\n enabled: ipQuery.enabled ?? false,\n channel: ipQuery.channel || 'customApi',\n customApi: {\n url: customApi.url || '',\n params,\n responseFields\n }\n }\n };\n },\n addIpQueryParam() {\n this.uploadSettings.ipQuery.customApi.params.push({\n key: '',\n value: ''\n });\n },\n removeIpQueryParam(index) {\n if (this.uploadSettings.ipQuery.customApi.params.length <= 1) return;\n this.uploadSettings.ipQuery.customApi.params.splice(index, 1);\n },\n addIpQueryResponseField() {\n this.uploadSettings.ipQuery.customApi.responseFields.push('');\n },\n removeIpQueryResponseField(index) {\n this.uploadSettings.ipQuery.customApi.responseFields.splice(index, 1);\n },\n moveIpQueryResponseField(index, direction) {\n const fields = this.uploadSettings.ipQuery.customApi.responseFields;\n const targetIndex = index + direction;\n if (targetIndex < 0 || targetIndex >= fields.length) return;\n const [field] = fields.splice(index, 1);\n fields.splice(targetIndex, 0, field);\n },\n handleUserPassInput() {\n if (this.authSettings.user.authCode !== this.oriUserPassword) {\n this.showUserPassConfirm = true;\n } else {\n this.showUserPassConfirm = false;\n }\n },\n handleAdminPassInput() {\n if (this.authSettings.admin.adminPassword !== this.oriAdminPassword) {\n this.showAdminPassConfirm = true;\n } else {\n this.showAdminPassConfirm = false;\n }\n },\n handleClearUserPassword(checked) {\n if (checked) {\n this.authSettings.user.authCode = '';\n this.showUserPassConfirm = false;\n }\n },\n handleClearAdminPassword(checked) {\n if (checked) {\n this.authSettings.admin.adminPassword = '';\n this.authSettings.admin.adminUsername = '';\n this.showAdminPassConfirm = false;\n }\n },\n // Token相关方法\n getPermissionText(permission) {\n const permissionMap = {\n 'upload': this.$t('sysSecurity.permUpload'),\n 'delete': this.$t('sysSecurity.permDelete'),\n 'list': this.$t('sysSecurity.permList'),\n 'manage': this.$t('sysSecurity.permManage')\n };\n return permissionMap[permission] || permission;\n },\n formatDate(dateString) {\n return new Date(dateString).toLocaleString('zh-CN');\n },\n async loadApiTokens() {\n this.tokenLoading = true;\n try {\n const response = await fetchWithAuth('/api/manage/apiTokens');\n const data = await response.json();\n this.apiTokens = data.tokens || [];\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenListFailed'));\n } finally {\n this.tokenLoading = false;\n }\n },\n createToken() {\n this.$refs.tokenForm.validate(async valid => {\n if (!valid) return;\n try {\n this.newToken.owner = 'admin'; // 默认所有Token归属管理员\n\n let expiresAt = null;\n let autoDelete = false;\n if (!this.newToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.newToken.expirationValue, this.newToken.expirationUnit);\n autoDelete = this.newToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n name: this.newToken.name,\n owner: this.newToken.owner,\n permissions: this.newToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.createdToken = {\n name: data.name,\n token: data.token\n };\n this.showCreateTokenDialog = false;\n this.showTokenResultDialog = true;\n this.newToken = {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n };\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenCreateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenCreateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenCreateFailed'));\n }\n });\n },\n editToken(token) {\n const hasExpiration = token.expiresAt !== null && token.expiresAt !== undefined;\n this.editingToken = {\n id: token.id,\n name: token.name,\n owner: token.owner,\n permissions: [...token.permissions],\n neverExpire: !hasExpiration,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: token.autoDelete || false\n };\n this.showEditTokenDialog = true;\n },\n updateToken() {\n this.$refs.editTokenForm.validate(async valid => {\n if (!valid) return;\n try {\n let expiresAt = null;\n let autoDelete = false;\n if (!this.editingToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.editingToken.expirationValue, this.editingToken.expirationUnit);\n autoDelete = this.editingToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n tokenId: this.editingToken.id,\n permissions: this.editingToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.showEditTokenDialog = false;\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenUpdateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenUpdateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenUpdateFailed'));\n }\n });\n },\n async deleteToken(tokenId) {\n try {\n await this.$confirm(this.$t('sysSecurity.tokenDeleteConfirm'), this.$t('sysSecurity.tokenDeleteConfirmTitle'), {\n confirmButtonText: this.$t('sysSecurity.tokenDeleteConfirmOk'),\n cancelButtonText: this.$t('sysSecurity.tokenDeleteConfirmCancel'),\n type: 'warning'\n });\n const response = await fetchWithAuth(`/api/manage/apiTokens?id=${tokenId}`, {\n method: 'DELETE'\n });\n const data = await response.json();\n if (response.ok) {\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenDeleteSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenDeleteFailed'));\n }\n } catch (error) {\n if (error !== 'cancel') {\n this.$message.error(this.$t('sysSecurity.tokenDeleteFailed'));\n }\n }\n },\n async copyToken() {\n try {\n await navigator.clipboard.writeText(this.createdToken.token);\n this.$message.success(this.$t('sysSecurity.tokenCopied'));\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.copyFailed'));\n }\n },\n onCreateNeverExpireChange(val) {\n if (val) {\n this.newToken.autoDelete = false;\n }\n },\n onEditNeverExpireChange(val) {\n if (val) {\n this.editingToken.autoDelete = false;\n }\n },\n getTokenStatus(expiresAt) {\n return getTokenStatus(expiresAt);\n },\n saveSettings() {\n // 所有表单的Promise数组\n let validationPromises = [];\n\n // 验证用户密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.userPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证管理密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.adminPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证会话安全策略表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.accessForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 等待所有验证完成\n Promise.all(validationPromises).then(results => {\n const isValid = results.every(valid => valid);\n if (!isValid) {\n return;\n }\n\n // 验证会话有效期为 1-3650 的正整数\n if (this.accessSettings.userSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.userSessionMaxAge) || this.accessSettings.userSessionMaxAge > 3650 || this.accessSettings.adminSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.adminSessionMaxAge) || this.accessSettings.adminSessionMaxAge > 3650) {\n this.$message.error(this.$t('sysSecurity.sessionMaxAgeInvalid'));\n return;\n }\n const settings = {\n auth: this.authSettings,\n upload: this.uploadSettings,\n access: this.accessSettings\n };\n // 不保存确认密码相关字段\n delete settings.auth.user.confirmNewUserPassword;\n delete settings.auth.admin.confirmNewAdminPassword;\n\n // 标记清除密码\n if (this.clearUserPassword) {\n settings.auth.user._clear = true;\n settings.auth.user.authCode = '';\n }\n if (this.clearAdminPassword) {\n settings.auth.admin._clear = true;\n settings.auth.admin.adminPassword = '';\n }\n fetchWithAuth('/api/manage/sysConfig/security', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(res => res.json()).then(data => {\n // 管理端密码变更后,当前会话已被清除,需要重新登录\n if (data.adminPasswordChanged) {\n const msg = this.$t('sysSecurity.adminPasswordChangedRelogin');\n this.$message.warning(msg);\n setTimeout(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n }, 1500);\n return;\n }\n this.$message.success(this.$t('sysSecurity.settingsSaved'));\n // 保存成功后重置密码字段为空(后端已处理)\n this.authSettings.user.authCode = '';\n this.authSettings.admin.adminPassword = '';\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n // 标记已有密码(如果用户刚设置了密码,且不是清除操作)\n if (settings.auth.user.authCode && !settings.auth.user._clear) {\n this.authSettings.user._hasPassword = true;\n } else if (settings.auth.user._clear) {\n this.authSettings.user._hasPassword = false;\n }\n if (settings.auth.admin.adminPassword && !settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = true;\n } else if (settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = false;\n }\n this.showUserPassConfirm = false;\n this.showAdminPassConfirm = false;\n this.clearUserPassword = false;\n this.clearAdminPassword = false;\n }).catch(() => {\n // 如果请求过程中 session 已失效导致 fetchWithAuth 跳转,忽略后续错误\n });\n });\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/security').then(response => response.json()).then(data => {\n this.authSettings = data.auth;\n this.uploadSettings = this.normalizeIpQuerySettings(data.upload);\n this.accessSettings = data.access;\n\n // 密码从后端返回为空(安全考虑),记录原始空值\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n this.authSettings.user.confirmNewUserPassword = '';\n this.authSettings.admin.confirmNewAdminPassword = '';\n\n // 加载API Token列表\n this.loadApiTokens();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogSecurity.vue?vue&type=template&id=906380e0&scoped=true\"\nimport script from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogSecurity.vue?vue&type=style&index=0&id=906380e0&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-906380e0\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"page-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedSettings, (categoryGroup, categoryName) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: categoryName,\n class: \"first-settings\"\n }, [_createElementVNode(\"h3\", _hoisted_2, _toDisplayString(categoryName), 1), _createVNode(_component_el_form, {\n model: $data.settings,\n \"label-width\": \"150px\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(categoryGroup, (setting, index) => {\n return _openBlock(), _createBlock(_component_el_form_item, {\n key: setting.id\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString($options.localized(setting, 'label')) + \" \", 1), setting.tooltip ? (_openBlock(), _createBlock(_component_el_tooltip, {\n key: 0,\n content: $options.localized(setting, 'tooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [setting.type === 'select' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 0,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder'),\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(setting.options, option => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: option.value,\n label: $options.localizedOption(option),\n value: option.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'channelName' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 1,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: !$options.currentUploadChannel || $options.currentChannelList.length === 0,\n placeholder: _ctx.$t('sysPage.channelSelectPlaceholder'),\n clearable: \"\",\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'boolean' ? (_openBlock(), _createBlock(_component_el_switch, {\n key: 2,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\"])) : setting.type === 'textarea' ? (_openBlock(), _createBlock(_component_el_input, {\n key: 3,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n resize: \"vertical\",\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 4,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"]))]),\n _: 2\n }, 1024);\n }), 128))]),\n _: 2\n }, 1032, [\"model\"])]);\n }), 128)), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport axios from '@/utils/axios';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n config: []\n },\n // 加载状态\n loading: true,\n // 可用渠道列表\n availableChannels: {}\n };\n },\n computed: {\n isEn() {\n return this.$i18n.locale === 'en';\n },\n // 根据category将配置项分组\n groupedSettings() {\n const grouped = {};\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n const category = this.isEn ? setting.category_en || setting.category || this.$t('sysPage.otherSettings') : setting.category || this.$t('sysPage.otherSettings');\n if (!grouped[category]) {\n grouped[category] = [];\n }\n grouped[category].push(setting);\n });\n }\n return grouped;\n },\n // 当前选择的上传渠道\n currentUploadChannel() {\n const channelSetting = this.settings.config?.find(s => s.id === 'defaultUploadChannel');\n return channelSetting?.value || '';\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.currentUploadChannel] || [];\n }\n },\n watch: {\n // 监听上传渠道变化,清空渠道名称(如果不在新列表中)\n currentUploadChannel(newVal, oldVal) {\n if (newVal !== oldVal) {\n const channelNameSetting = this.settings.config?.find(s => s.id === 'defaultChannelName');\n if (channelNameSetting) {\n const newChannelList = this.availableChannels[newVal] || [];\n if (!newChannelList.some(ch => ch.name === channelNameSetting.value)) {\n channelNameSetting.value = '';\n }\n }\n }\n }\n },\n methods: {\n localized(item, field) {\n if (this.isEn && item[field + '_en']) return item[field + '_en'];\n return item[field] || '';\n },\n localizedOption(option) {\n if (this.isEn && option.label_en) return option.label_en;\n return option.label;\n },\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/page', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(this.settings)\n }).then(() => this.$message.success(this.$t('sysPage.settingsSaved')));\n },\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels');\n if (response.data) {\n this.availableChannels = response.data;\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/page').then(response => response.json()).then(data => {\n this.settings = data;\n // 处理布尔类型的值初始化\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n if (setting.type === 'boolean') {\n // 将字符串转换为布尔值\n if (typeof setting.value === 'string') {\n setting.value = setting.value === 'true';\n } else if (setting.value === undefined || setting.value === null) {\n // 如果没有值,使用默认值\n setting.value = setting.default || false;\n }\n }\n });\n }\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogPage.vue?vue&type=template&id=e4c3a742&scoped=true\"\nimport script from \"./SysCogPage.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogPage.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogPage.vue?vue&type=style&index=0&id=e4c3a742&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-e4c3a742\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"others-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"first-title\"\n};\nconst _hoisted_5 = {\n class: \"first-title\"\n};\nconst _hoisted_6 = {\n class: \"first-title\"\n};\nconst _hoisted_7 = [\"innerHTML\"];\nconst _hoisted_8 = {\n class: \"first-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.remoteTelemetry')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.remoteTelemetryTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.telemetry,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.telemetry.enabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.settings.telemetry.enabled = $event),\n disabled: $data.settings.telemetry.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_4, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.cloudflareApiToken')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.cloudflareApiTokenTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.cloudflareApiToken,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.zoneId')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_ZONE_ID,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.settings.cloudflareApiToken.CF_ZONE_ID = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.accountEmail')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_EMAIL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.settings.cloudflareApiToken.CF_EMAIL = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: \"API Key\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_API_KEY,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.settings.cloudflareApiToken.CF_API_KEY = $event),\n disabled: $data.settings.cloudflareApiToken.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_5, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.randomImageApi')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.randomImageApiTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.randomImageAPI,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.randomImageAPI.enabled,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.settings.randomImageAPI.enabled = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"randomImageAPI.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.directory')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.directoryTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.randomImageAPI.allowedDir,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.settings.randomImageAPI.allowedDir = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_6, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.publicBrowse')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.publicBrowseTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.publicBrowse,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.publicBrowse.enabled,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.settings.publicBrowse.enabled = $event),\n disabled: $data.settings.publicBrowse.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"publicBrowse.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.openDirectory')), 1), _createVNode(_component_el_tooltip, {\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n content: _withCtx(() => [_createElementVNode(\"div\", {\n style: {\n \"max-width\": \"320px\",\n \"line-height\": \"1.6\"\n },\n innerHTML: _ctx.$t('sysOthers.openDirectoryTooltip')\n }, null, 8, _hoisted_7)]),\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.publicBrowse.allowedDir,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.settings.publicBrowse.allowedDir = $event),\n disabled: $data.settings.publicBrowse.fixed,\n placeholder: \"wallpaper,photos,album\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.webdav')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.webdavTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.webDAV,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.webDAV.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.settings.webDAV.enabled = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.username,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.settings.webDAV.username = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.password,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.settings.webDAV.password = $event),\n disabled: $data.settings.webDAV.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUploadChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.uploadChannel,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.settings.webDAV.uploadChannel = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('sysOthers.webdavDefaultChannel'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"Telegram\",\n value: \"telegram\"\n }), _createVNode(_component_el_option, {\n label: \"Cloudflare R2\",\n value: \"cfr2\"\n }), _createVNode(_component_el_option, {\n label: \"S3\",\n value: \"s3\"\n }), _createVNode(_component_el_option, {\n label: \"Discord\",\n value: \"discord\"\n }), _createVNode(_component_el_option, {\n label: \"HuggingFace\",\n value: \"huggingface\"\n }), _createVNode(_component_el_option, {\n label: \"WebDAV\",\n value: \"webdav\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.settings.webDAV.uploadChannel && $options.webdavChannelList.length > 1 ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysOthers.webdavChannelName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.channelName,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.settings.webDAV.channelName = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.webdavChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n telemetry: {},\n randomImageAPI: {},\n cloudflareApiToken: {},\n webDAV: {},\n publicBrowse: {}\n },\n availableChannels: {},\n // 可用渠道列表\n // 加载状态\n loading: true\n };\n },\n computed: {\n // WebDAV 当前渠道类型对应的渠道列表\n webdavChannelList() {\n const channelType = this.settings.webDAV?.uploadChannel;\n return channelType ? this.availableChannels[channelType] || [] : [];\n }\n },\n watch: {\n 'settings.webDAV.uploadChannel'() {\n // 切换渠道类型时清空指定的渠道名称\n if (this.settings.webDAV) {\n this.settings.webDAV.channelName = '';\n }\n }\n },\n methods: {\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/others', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(this.settings)\n }).then(() => this.$message.success(this.$t('sysOthers.settingsSaved')));\n },\n async fetchAvailableChannels() {\n try {\n const response = await fetchWithAuth('/api/channels');\n if (response.ok) {\n this.availableChannels = await response.json();\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/others').then(response => response.json()).then(data => {\n this.settings = data;\n }).finally(() => {\n this.loading = false;\n });\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogOthers.vue?vue&type=template&id=67b1b002&scoped=true\"\nimport script from \"./SysCogOthers.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogOthers.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogOthers.vue?vue&type=style&index=0&id=67b1b002&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-67b1b002\"]])\n\nexport default __exports__","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport SysConfigTabs from '@/components/config/SysConfigTabs.vue';\nimport SysCogStatus from '@/components/config/SysCogStatus.vue';\nimport SysCogUpload from '@/components/config/SysCogUpload.vue';\nimport SysCogSecurity from '@/components/config/SysCogSecurity.vue';\nimport SysCogPage from '@/components/config/SysCogPage.vue';\nimport SysCogOthers from '@/components/config/SysCogOthers.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'SystemConfig',\n mixins: [backgroundManager],\n data() {\n return {\n activeIndex: 'status',\n isSidebarCollapse: false\n };\n },\n watch: {\n // 监听锚点变化\n '$route.hash': {\n immediate: true,\n handler(newHash) {\n this.activeIndex = newHash.replace('#', '');\n window.scrollTo(0, 0); // 滚动到页面顶部\n }\n },\n activeIndex(newIndex) {\n // 更新锚点\n const hash = `#${newIndex}`;\n this.$router.push({\n hash\n });\n }\n },\n components: {\n DashboardTabs,\n SysConfigTabs,\n SysCogStatus,\n SysCogUpload,\n SysCogSecurity,\n SysCogPage,\n SysCogOthers\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n },\n // 根据锚点动态返回对应的组件\n currentComponent() {\n const hash = this.$route.hash.replace('#', '');\n switch (hash) {\n case 'status':\n return SysCogStatus;\n case 'upload':\n return SysCogUpload;\n case 'security':\n return SysCogSecurity;\n case 'page':\n return SysCogPage;\n case 'others':\n return SysCogOthers;\n default:\n return SysCogStatus;\n }\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n // 设置默认锚点\n setDefaultHash() {\n const defaultHash = '#status'; // 默认锚点\n window.location.hash = defaultHash;\n this.activeIndex = defaultHash.replace('#', '');\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n\n // 如果 URL 中没有锚点,则设置默认锚点\n if (!window.location.hash) {\n this.setDefaultHash();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SystemConfig.vue?vue&type=template&id=7607b77d&scoped=true\"\nimport script from \"./SystemConfig.vue?vue&type=script&lang=js\"\nexport * from \"./SystemConfig.vue?vue&type=script&lang=js\"\n\nimport \"./SystemConfig.vue?vue&type=style&index=0&id=7607b77d&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-7607b77d\"]])\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\"\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=33933ada&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=33933ada&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-33933ada\"]])\n\nexport default __exports__","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","isCollapse","ref","style","sidebarStyle","menuItems","item","key","index","activeIndex","onClick","$event","handleSelect","icon","$t","titleKey","args","toggleCollapse","name","props","type","String","default","Boolean","data","expandedWidth","computed","collapsedWidth","window","innerWidth","this","width","watch","$nextTick","measureWidth","methods","$emit","checkMobile","isMobile","el","$refs","sidebar","prevWidth","prevTransition","transition","wasCollapsed","classList","contains","remove","offsetWidth","natural","scrollWidth","add","mounted","addEventListener","beforeDestroy","removeEventListener","__exports__","_component_DashboardTabs","_component_el_tooltip","_component_el_header","_component_SysConfigTabs","activeTab","disabled","disableTooltip","content","placement","handleLogout","_","isSidebarCollapse","currentComponent","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","inputStart","inputmode","startDateLabel","onChange","handleManualInput","trim","rangeSeparator","inputEnd","endDateLabel","previousMonthLabel","goToPreviousMonth","monthTitle","nextMonthLabel","goToNextMonth","weekdayLabels","weekday","calendarDays","day","isCurrentMonth","isToday","draftStart","draftEnd","isInRange","selectDay","dayOfMonth","DAY_MS","padDatePart","value","padStart","formatDateKey","date","getFullYear","getMonth","getDate","parseDateKey","match","year","Number","month","Date","setHours","shiftMonth","amount","modelValue","Array","emits","today","displayYear","displayMonth","awaitingEnd","monthStart","start","getDay","todayKey","from","length","getTime","immediate","handler","syncFromModel","startDate","endDate","displayDate","range","commitRange","startKey","endKey","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_component_el_button","_component_el_radio_button","_component_el_radio_group","_component_DateRangeCalendar","_component_el_dialog","_component_Line","_component_Doughnut","_component_el_progress","_component_el_image","_directive_loading","fetchIndexInfo","indexInfo","totalFiles","toLocaleString","formatTime","lastUpdated","getTimeAgo","openReleases","version","circle","openTrendDateDialog","trendGroupBy","size","label","trendDatePickerVisible","title","trendDateDialogWidth","trendDateRange","handleTrendDateRangeChange","hasTrendData","uploadTrendChartData","options","lineChartOptions","Object","keys","channelStats","channelChartData","chartOptions","count","channel","background","getChartColor","getPercentage","typeStats","typeChartData","aggregatedTypeStats","status","getTypeChartColor","isProcessing","phaseDescription","Math","round","processingProgress","percentage","current","total","estimatedTimeRemaining","message","plain","cancelOperation","processingError","suggestion","recoverable","retryOperation","dismissError","loading","rebuilding","rebuildIndex","backing","backupData","accept","handleFileSelect","restoring","selectRestoreFile","newestFile","oldestFile","openFileInNewTab","isImageFile","loadErrors","src","id","fit","onError","handleImageError","isVideoFile","muted","loop","autoplay","metadata","FileName","TimeStamp","v","lim","l","h","max","min","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","a","b","c","d","e","f","hex","h1","h2","eq","isShort","r","g","hexParse","str","ret","len","alpha","hexString","undefined","HUE_RE","hsl2rgbn","s","n","k","hsv2rgbn","hwb2rgbn","w","rgb","i","hueValue","rgb2hsl","calln","isArray","map","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","exec","p1","p2","rotate","deg","hslString","x","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","unpack","unpacked","tkeys","j","ok","nk","replace","parseInt","names","nameParse","transparent","toLowerCase","RGB_RE","rgbParse","rgbString","to","pow","interpolate","rgb1","rgb2","t","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","charAt","Color","constructor","_rgb","_valid","valid","obj","mix","color","weight","c1","c2","w2","p","w1","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","noop","uid","isNullOrUndef","prototype","toString","call","slice","isObject","isNumberFinite","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","thisArg","apply","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","source","target","create","klen","isValidKey","indexOf","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","keyResolvers","o","y","_splitKey","parts","split","part","push","_getKeyResolver","resolveObjectKey","resolver","_capitalize","toUpperCase","defined","isFunction","setsEqual","has","_isClickEvent","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","roundedRange","niceRange","floor","fraction","niceFraction","_factorize","result","sqrt","sort","pop","isNonPrimitive","Symbol","toPrimitive","isNumber","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","end","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","check","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","applyAnimationsDefaults","defaults","duration","easing","describe","_fallback","_indexable","_scriptable","properties","active","animation","resize","show","animations","visible","hide","applyLayoutsDefaults","autoPadding","padding","top","bottom","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","Ticks","applyScaleDefaults","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","border","dash","dashOffset","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","overrides","descriptors","getScope$1","node","root","scope","Defaults","_descriptors","_appliers","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","toFontString","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","setRenderOpts","opts","translation","fillStyle","textAlign","textBaseline","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","resolve","inputs","info","cacheable","_addGrace","minmax","change","keepZero","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","_resolveScriptable","_resolveArray","getValue","Error","join","delete","createSubResolver","arr","filter","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","event","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","maintainHeight","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","startBound","endBound","_boundSegment","prevValue","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetArea","getDatasetClipArea","_clip","Animator","_request","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","initial","currentStep","_refresh","_update","now","remaining","running","draw","_active","_total","tick","_getAnims","charts","complete","progress","listen","cb","reduce","acc","_duration","cancel","animator","interpolators","boolean","factor","c0","number","Animation","cfg","currentValue","_fn","_easing","_start","_target","_prop","_from","_to","_promises","update","elapsed","wait","promises","Promise","rej","resolved","Animations","config","_properties","configure","animationOptions","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","resolveTargetOptions","_createAnimations","$shared","awaitAll","$animations","then","anim","all","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","found","convertObjectDataToArray","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","itemStacks","_top","_bottom","visualValues","_visualValues","getFirstScaleId","shift","createDatasetContext","createDataContext","dataIndex","raw","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","DatasetController","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","otherScale","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","resolveDatasetElementOptions","resolveDataElementOptions","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","getAllScaleValues","$bar","visibleMetas","concat","computeMinSampleSize","curr","_length","updateMinAndPrev","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","_defineProperty","BarController","super","bars","getBasePixel","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","currentParsed","iScaleValue","skipNull","find","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","_startPixel","_endPixel","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","axisCount","axisID","axisNumber","stackIndex","rects","_index_","_value_","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","useBorderRadius","borderRadius","fontColor","lineDash","lineDashOffset","lineJoin","legendItem","toggleDataVisibility","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","abstract","DateAdapterBase","members","init","formats","diff","startOf","endOf","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","position","getSortedVisibleDatasetMetas","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","isPointInArea","evaluationFunc","inRange","getNearestRadialItems","getProps","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","minPadding","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","native","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","DomPlatform","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","Element","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","ceil","majorStart","majorEnd","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","decimal","getDecimalForPixel","getBaseValue","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","tz","gz","bz","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","registerDefaults","unregister","itemDefaults","defaultRoutes","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","localIds","getOpts","pluginOpts","pluginScopeKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","scalesOptions","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","_handleEvent","_getActiveElements","clipSelf","outerAngleClip","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","inner","selfJoin","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineCap","getLineMethod","stepped","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","strokePathWithCache","path","_path","Path2D","strokePathDirect","segmentMethod","usePath2D","LineElement","_points","_segments","_pointsUpdated","_interpolate","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","maxR","enableBorder","boundingRects","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","unshift","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","itemsEqual","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","SQRT2","yBoxTop","xBoxLeft","textDirection","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","isListened","hoveredItem","sameItem","onLeave","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","_element","afterEvent","ci","WeakMap","positioners","average","xSet","xAverage","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","beforeTitle","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","addIfString","addedLabels","findOrAddLabel","lastIndexOf","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","numericGeneratorOptions","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","apexesInArea","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","animate","INTERVALS","millisecond","common","second","minute","hour","week","quarter","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","timestamp","setMajorTicks","majorUnit","ticksFromTimestamps","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","CommonProps","required","datasetIdKey","updateMode","A11yProps","ariaLabel","ariaDescribedby","Props","destroyDelay","compatProps","internals","attrs","toRawIfProxy","isProxy","toRaw","cloneProxy","setOptions","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","addedDatasets","nextDataset","currentDataset","cloneData","nextData","defineComponent","setup","param","expose","slots","canvasRef","chartRef","shallowRef","renderChart","clonedData","proxiedData","Chart$1","destroyChart","onMounted","onUnmounted","param1","nextOptionsProxy","nextDataProxy","prevOptionsProxy","prevDataProxy","shouldUpdate","prevOptions","prevLabels","prevDatasets","nextTick","deep","role","createTypedChart","registerables","reforwardRef","Doughnut","Line","BatchOperationError","code","ERROR_HANDLERS","details","NETWORK","ABORT","createError","Response","TypeError","BatchProcessor","batchSize","abortController","fetchAllRecords","includeValue","AbortController","allRecords","totalFetched","batchCount","signal","aborted","response","fetchBatch","records","nextCursor","phase","batchError","URLSearchParams","fetchWithAuth","errorDetails","errorData","json","success","totalProcessed","abort","isAborted","IndexRebuilder","chunkSize","maxRetries","retryDelay","sessionId","generateSessionId","fetchConfig","databaseType","rebuild","processor","sortByTimestampDescending","chunks","splitIntoChunks","uploadChunkWithRetry","finalize","timestampA","timestampB","chunkId","lastError","attempt","uploadChunk","sleep","checksum","calculateChecksum","headers","createHttpError","totalChunks","random","encoder","TextEncoder","dataBuffer","encode","crypto","subtle","hashBuffer","digest","hashArray","Uint8Array","imul","ms","BackupGenerator","generateBackup","packageInfo","fileCount","files","settings","record","fetchSettings","downloadBackup","settingsCount","blob","Blob","url","URL","createObjectURL","createElement","href","download","toISOString","appendChild","click","removeChild","revokeObjectURL","RestoreProcessor","fileEntries","settingEntries","totalSettings","totalItems","restoredFiles","restoredSettings","failedFiles","failedSettings","fileChunks","chunkData","fromEntries","restoredCount","failedCount","settingChunks","backupTimestamp","formatDateInput","getDefaultTrendDateRange","components","DateRangeCalendar","newest","oldest","channelColors","typeColors","trendColors","processingPhase","processingStartTime","currentRebuilder","currentBackupGenerator","currentRestoreProcessor","stats","aggregatedStats","mappedStatus","currentTrendGroup","trend","uploadTrend","groupBy","series","trendRawLabels","trendRangeCrossesYear","years","extractTrendLabelDates","trendDisplayLabels","formatTrendAxisLabel","totalColor","hexToRgba","pointBackgroundColor","pointBorderColor","pointRadius","pointHoverRadius","getTrendColor","formatTrendSeriesName","toFixed","totalEstimated","seconds","minutes","hours","remainingMinutes","phaseMap","isOther","dates","formatSingleDate","includeYear","monthDay","endLabel","getTrendDateRangeParams","action","timezoneOffset","getTimezoneOffset","trendMaxPoints","trendSeriesLimit","trendStartDate","trendEndDate","$message","warning","handleProgress","handleError","errorMessage","settingsMsg","fileInput","file","$confirm","confirmButtonText","cancelButtonText","restoreData","fileContent","parseError","days","isValidPreview","FileType","open","fileName","extension","substring","imageExtensions","videoExtensions","_component_ChannelIcon","isOpen","toggleDropdown","displayLabel","selectOption","$slots","channelType","iconClass","ChannelIcon","placeholder","resolvedPlaceholder","selected","opt","handleClickOutside","beforeUnmount","$el","_component_CustomSelect","_component_el_tag","_component_el_switch","_component_el_option","_component_el_select","_component_el_form_item","_component_el_input","_component_el_input_number","_component_el_form","_component_el_descriptions_item","_component_el_descriptions","channelFilter","filterOptions","showAddDialog","filteredChannels","getChannelIconClass","getChannelList","hasLoadBalance","getSettings","loadBalance","saveSettings","fixed","onMousemove","handleCardMouseMove","onMouseleave","handleCardMouseLeave","ref_for","maskText","botToken","chatId","publicUrl","bucketName","endpoint","channelId","isNitro","repo","isPrivate","baseUrl","quota","getQuotaPercentage","getQuotaStatus","getQuotaText","openDetailDialog","openEditDialog","deleteChannel","onClosed","resetAddForm","newChannel","confirmAddChannel","model","rules","addRules","onChannelTypeChange","addableChannels","ch","innerHTML","proxyUrl","cdnDomain","region","accessKeyId","secretAccessKey","pathStyle","limitGB","threshold","token","username","password","headersText","autosize","minRows","createDirectory","showDetailDialog","currentChannel","resetDetailData","openEditFromDetail","column","getChannelTypeLabel","currentChannelType","readonly","formatHeaders","link","refreshQuota","quotaLoading","isQuotaExceeded","getQuotaStatusText","showEditDialog","editChannel","resetEditData","confirmEditChannel","editRules","onQuotaEnabledChange","CustomSelect","channels","telegramSettings","cfr2Settings","s3Settings","discordSettings","huggingfaceSettings","webdavSettings","currentChannelIndex","quotaStats","pattern","card","currentTarget","refKey","glowEl","telegram","cfr2","s3","discord","huggingface","webdav","showLength","headersToText","parseHeadersText","addForm","validate","reservedNames","isDuplicate","newChannelData","savePath","editForm","currentIndex","originalName","editedChannel","catch","getResponse","getData","loadQuotaStats","getChannelUsedGB","usedMB","usedGB","async","recalculateQuota","finally","handleClick","spin","_component_el_checkbox","_component_el_table_column","_component_el_table","_component_FloatingSaveButton","_component_el_checkbox_group","authSettings","user","userPassRules","authCode","onInput","handleUserPassInput","autocomplete","_hasPassword","clearUserPassword","handleClearUserPassword","showUserPassConfirm","confirmNewUserPassword","admin","adminPassRules","adminUsername","clearAdminPassword","adminPassword","handleAdminPassInput","handleClearAdminPassword","showAdminPassConfirm","confirmNewAdminPassword","showCreateTokenDialog","apiTokens","permissions","perm","getPermissionText","formatDate","createdAt","getTokenStatus","expiresAt","expiresText","editToken","deleteToken","tokenLoading","uploadSettings","moderate","moderateContentApiKey","nsfwApiPath","ipQuery","customApi","removeIpQueryParam","addIpQueryParam","responseFields","moveIpQueryResponseField","removeIpQueryResponseField","addIpQueryResponseField","accessSettings","allowedDomains","accessRules","whiteListMode","sessionSecure","userSessionMaxAge","adminSessionMaxAge","dialogWidth","createToken","newToken","tokenRules","neverExpire","onCreateNeverExpireChange","expirationValue","expirationUnit","timeUnitOptions","labelKey","autoDelete","showEditTokenDialog","updateToken","editingToken","editTokenRules","onEditNeverExpireChange","showTokenResultDialog","createdToken","append","copyToken","SIMPLE_UNIT_MS","computeExpiresAt","baseTime","setUTCMonth","getUTCMonth","setUTCFullYear","getUTCFullYear","formatExpiresTime","isoString","getHours","getMinutes","getSeconds","expiresDate","currentTime","formattedTime","FloatingSaveButton","oriUserPassword","oriAdminPassword","owner","validator","rule","urlReservedChars","hasReservedChar","char","validateSessionMaxAge","isInteger","normalizeIpQuerySettings","fields","targetIndex","checked","permission","permissionMap","dateString","loadApiTokens","tokens","tokenForm","hasExpiration","editTokenForm","tokenId","navigator","clipboard","writeText","validationPromises","userPassForm","adminPassForm","accessForm","results","isValid","every","auth","upload","access","_clear","adminPasswordChanged","msg","$store","commit","$router","groupedSettings","categoryGroup","categoryName","setting","localized","localizedOption","currentUploadChannel","currentChannelList","clearable","availableChannels","isEn","$i18n","category","category_en","channelSetting","newVal","oldVal","channelNameSetting","newChannelList","label_en","fetchAvailableChannels","axios","telemetry","cloudflareApiToken","CF_ZONE_ID","CF_EMAIL","CF_API_KEY","randomImageAPI","allowedDir","publicBrowse","webDAV","uploadChannel","webdavChannelList","channelName","mixins","backgroundManager","newHash","scrollTo","newIndex","hash","DashboardTabs","SysConfigTabs","SysCogStatus","SysCogUpload","SysCogSecurity","SysCogPage","SysCogOthers","$route","fetch","credentials","authType","setDefaultHash","defaultHash","location","initializeBackground","viewBox","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons","_typeof","iterator","toPropertyKey"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/529.287c329f.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?54ab","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue","webpack://sanyue_imghub/./src/components/config/SysConfigTabs.vue?cf73","webpack://sanyue_imghub/./src/views/SystemConfig.vue?c088","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?5501","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue","webpack://sanyue_imghub/./src/components/DateRangeCalendar.vue?7c9a","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?9618","webpack://sanyue_imghub/./node_modules/@kurkle/color/dist/color.esm.js","webpack://sanyue_imghub/../../src/helpers/helpers.core.ts","webpack://sanyue_imghub/../../src/helpers/helpers.math.ts","webpack://sanyue_imghub/../../src/helpers/helpers.collection.ts","webpack://sanyue_imghub/../../src/helpers/helpers.extras.ts","webpack://sanyue_imghub/../../src/helpers/helpers.easing.ts","webpack://sanyue_imghub/../../src/helpers/helpers.color.ts","webpack://sanyue_imghub/../../src/core/core.animations.defaults.js","webpack://sanyue_imghub/../../src/core/core.layouts.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.intl.ts","webpack://sanyue_imghub/../../src/core/core.ticks.js","webpack://sanyue_imghub/../../src/core/core.scale.defaults.js","webpack://sanyue_imghub/../../src/core/core.defaults.js","webpack://sanyue_imghub/../../src/helpers/helpers.canvas.ts","webpack://sanyue_imghub/../../src/helpers/helpers.options.ts","webpack://sanyue_imghub/../../src/helpers/helpers.config.ts","webpack://sanyue_imghub/../../src/helpers/helpers.curve.ts","webpack://sanyue_imghub/../../src/helpers/helpers.dom.ts","webpack://sanyue_imghub/../../src/helpers/helpers.interpolation.ts","webpack://sanyue_imghub/../../src/helpers/helpers.rtl.ts","webpack://sanyue_imghub/../../src/helpers/helpers.segment.js","webpack://sanyue_imghub/../../src/helpers/helpers.dataset.ts","webpack://sanyue_imghub/../src/core/core.animator.js","webpack://sanyue_imghub/../src/core/core.animation.js","webpack://sanyue_imghub/../src/core/core.animations.js","webpack://sanyue_imghub/../src/core/core.datasetController.js","webpack://sanyue_imghub/../src/controllers/controller.bar.js","webpack://sanyue_imghub/../src/controllers/controller.bubble.js","webpack://sanyue_imghub/../src/controllers/controller.doughnut.js","webpack://sanyue_imghub/../src/controllers/controller.line.js","webpack://sanyue_imghub/../src/controllers/controller.polarArea.js","webpack://sanyue_imghub/../src/controllers/controller.pie.js","webpack://sanyue_imghub/../src/controllers/controller.radar.js","webpack://sanyue_imghub/../src/controllers/controller.scatter.js","webpack://sanyue_imghub/../src/core/core.adapters.ts","webpack://sanyue_imghub/../src/core/core.interaction.js","webpack://sanyue_imghub/../src/core/core.layouts.js","webpack://sanyue_imghub/../src/platform/platform.base.js","webpack://sanyue_imghub/../src/platform/platform.basic.js","webpack://sanyue_imghub/../src/platform/platform.dom.js","webpack://sanyue_imghub/../src/platform/index.js","webpack://sanyue_imghub/../src/core/core.element.ts","webpack://sanyue_imghub/../src/core/core.scale.autoskip.js","webpack://sanyue_imghub/../src/core/core.scale.js","webpack://sanyue_imghub/../src/core/core.typedRegistry.js","webpack://sanyue_imghub/../src/core/core.registry.js","webpack://sanyue_imghub/../src/core/core.plugins.js","webpack://sanyue_imghub/../src/core/core.config.js","webpack://sanyue_imghub/../src/core/core.controller.js","webpack://sanyue_imghub/../src/elements/element.arc.ts","webpack://sanyue_imghub/../src/elements/element.line.js","webpack://sanyue_imghub/../src/elements/element.point.ts","webpack://sanyue_imghub/../src/elements/element.bar.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.segment.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.helper.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.options.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.stack.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/simpleArc.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.target.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/filler.drawing.js","webpack://sanyue_imghub/../src/plugins/plugin.filler/index.js","webpack://sanyue_imghub/../src/plugins/plugin.legend.js","webpack://sanyue_imghub/../src/plugins/plugin.subtitle.js","webpack://sanyue_imghub/../src/plugins/plugin.tooltip.js","webpack://sanyue_imghub/../src/scales/scale.category.js","webpack://sanyue_imghub/../src/scales/scale.linearbase.js","webpack://sanyue_imghub/../src/scales/scale.linear.js","webpack://sanyue_imghub/../src/scales/scale.logarithmic.js","webpack://sanyue_imghub/../src/scales/scale.radialLinear.js","webpack://sanyue_imghub/../src/scales/scale.time.js","webpack://sanyue_imghub/../src/scales/scale.timeseries.js","webpack://sanyue_imghub/../src/props.ts","webpack://sanyue_imghub/../src/utils.ts","webpack://sanyue_imghub/../src/chart.ts","webpack://sanyue_imghub/../src/typedCharts.ts","webpack://sanyue_imghub/./src/utils/batchProcessor.js","webpack://sanyue_imghub/./src/utils/indexRebuilder.js","webpack://sanyue_imghub/./src/utils/backupGenerator.js","webpack://sanyue_imghub/./src/utils/restoreProcessor.js","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue","webpack://sanyue_imghub/./src/components/config/SysCogStatus.vue?ce78","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?6aa1","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue","webpack://sanyue_imghub/./src/components/config/CustomSelect.vue?1e7e","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?8495","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue","webpack://sanyue_imghub/./src/components/config/SysCogUpload.vue?a7b6","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?6295","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue","webpack://sanyue_imghub/./src/components/FloatingSaveButton.vue?45e6","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?8a8c","webpack://sanyue_imghub/./src/utils/tokenExpiration.js","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue","webpack://sanyue_imghub/./src/components/config/SysCogSecurity.vue?3739","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?0bc4","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue","webpack://sanyue_imghub/./src/components/config/SysCogPage.vue?4209","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?5501","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue","webpack://sanyue_imghub/./src/components/config/SysCogOthers.vue?780f","webpack://sanyue_imghub/./src/views/SystemConfig.vue","webpack://sanyue_imghub/./src/views/SystemConfig.vue?d269","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?4482","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://sanyue_imghub/./node_modules/@babel/runtime/helpers/esm/defineProperty.js"],"sourcesContent":["import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"menu-list\"\n};\nconst _hoisted_2 = [\"onClick\"];\nconst _hoisted_3 = {\n class: \"menu-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"sidebar-container\", {\n 'is-collapsed': $props.isCollapse\n }]),\n ref: \"sidebar\",\n style: _normalizeStyle($options.sidebarStyle)\n }, [_createElementVNode(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.menuItems, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.index,\n class: _normalizeClass([\"menu-item\", {\n 'is-active': $props.activeIndex === item.index\n }]),\n onClick: $event => $options.handleSelect(item.index)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: item.icon,\n class: \"menu-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t(item.titleKey)), 1)], 10, _hoisted_2);\n }), 128))]), _createElementVNode(\"div\", {\n class: \"toggle-button\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleCollapse && $options.toggleCollapse(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $props.isCollapse ? 'angle-double-right' : 'angle-double-left'\n }, null, 8, [\"icon\"])])], 6);\n}","export default {\n name: 'SysConfigTabs',\n props: {\n activeIndex: {\n type: String,\n default: 'status'\n },\n isCollapse: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n expandedWidth: null,\n menuItems: [{\n index: 'status',\n icon: 'chart-bar',\n titleKey: 'sysConfigTabs.systemStatus'\n }, {\n index: 'upload',\n icon: 'cloud-upload',\n titleKey: 'sysConfigTabs.uploadSettings'\n }, {\n index: 'security',\n icon: 'shield',\n titleKey: 'sysConfigTabs.securitySettings'\n }, {\n index: 'page',\n icon: 'pager',\n titleKey: 'sysConfigTabs.pageSettings'\n }, {\n index: 'others',\n icon: 'cog',\n titleKey: 'sysConfigTabs.otherSettings'\n }]\n };\n },\n computed: {\n collapsedWidth() {\n return window.innerWidth <= 768 ? 50 : 56;\n },\n sidebarStyle() {\n if (this.isCollapse) {\n return {\n width: this.collapsedWidth + 'px'\n };\n }\n return this.expandedWidth ? {\n width: this.expandedWidth + 'px'\n } : {};\n }\n },\n watch: {\n '$i18n.locale'() {\n this.$nextTick(() => this.measureWidth());\n }\n },\n methods: {\n toggleCollapse() {\n this.$emit('update:isCollapse', !this.isCollapse);\n },\n checkMobile() {\n const isMobile = window.innerWidth <= 768;\n this.$emit('update:isCollapse', isMobile);\n },\n handleSelect(index) {\n this.$emit('update:activeIndex', index);\n },\n measureWidth() {\n const el = this.$refs.sidebar;\n if (!el) return;\n // Temporarily expand to measure natural content width\n const prevWidth = el.style.width;\n const prevTransition = el.style.transition;\n const wasCollapsed = el.classList.contains('is-collapsed');\n el.style.transition = 'none';\n if (wasCollapsed) {\n el.classList.remove('is-collapsed');\n }\n el.style.width = 'auto';\n // Force reflow to apply changes\n void el.offsetWidth;\n const natural = el.scrollWidth;\n // Restore original state\n el.style.width = prevWidth;\n if (wasCollapsed) {\n el.classList.add('is-collapsed');\n }\n void el.offsetWidth;\n el.style.transition = prevTransition;\n this.expandedWidth = natural;\n }\n },\n mounted() {\n this.checkMobile();\n this.$nextTick(() => this.measureWidth());\n window.addEventListener('resize', this.checkMobile);\n },\n beforeDestroy() {\n window.removeEventListener('resize', this.checkMobile);\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysConfigTabs.vue?vue&type=template&id=2718059d&scoped=true\"\nimport script from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\nexport * from \"./SysConfigTabs.vue?vue&type=script&lang=js\"\n\nimport \"./SysConfigTabs.vue?vue&type=style&index=0&id=2718059d&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-2718059d\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content\"\n};\nconst _hoisted_3 = {\n class: \"header-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_SysConfigTabs = _resolveComponent(\"SysConfigTabs\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"systemConfig\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('sysConfig.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_SysConfigTabs, {\n activeIndex: $data.activeIndex,\n \"onUpdate:activeIndex\": _cache[0] || (_cache[0] = $event => $data.activeIndex = $event),\n isCollapse: $data.isSidebarCollapse,\n \"onUpdate:isCollapse\": _cache[1] || (_cache[1] = $event => $data.isSidebarCollapse = $event)\n }, null, 8, [\"activeIndex\", \"isCollapse\"]), (_openBlock(), _createBlock(_resolveDynamicComponent($options.currentComponent), {\n class: _normalizeClass(['main-container', {\n 'collapsed': $data.isSidebarCollapse\n }])\n }, null, 8, [\"class\"]))]);\n}","import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"date-range-calendar\"\n};\nconst _hoisted_2 = {\n class: \"selected-range\"\n};\nconst _hoisted_3 = {\n class: \"selected-range-inputs\"\n};\nconst _hoisted_4 = [\"aria-label\"];\nconst _hoisted_5 = {\n class: \"date-range-separator\"\n};\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = {\n class: \"calendar-header\"\n};\nconst _hoisted_8 = [\"aria-label\"];\nconst _hoisted_9 = {\n class: \"calendar-title\"\n};\nconst _hoisted_10 = [\"aria-label\"];\nconst _hoisted_11 = {\n class: \"calendar-weekdays\"\n};\nconst _hoisted_12 = {\n class: \"calendar-grid\"\n};\nconst _hoisted_13 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputStart = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.startDateLabel,\n onChange: _cache[1] || (_cache[1] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_4), [[_vModelText, $data.inputStart, void 0, {\n trim: true\n }]]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.rangeSeparator), 1), _withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.inputEnd = $event),\n class: \"date-input\",\n type: \"text\",\n inputmode: \"numeric\",\n \"aria-label\": $options.endDateLabel,\n onChange: _cache[3] || (_cache[3] = (...args) => $options.handleManualInput && $options.handleManualInput(...args))\n }, null, 40, _hoisted_6), [[_vModelText, $data.inputEnd, void 0, {\n trim: true\n }]])])]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.previousMonthLabel,\n onClick: _cache[4] || (_cache[4] = (...args) => $options.goToPreviousMonth && $options.goToPreviousMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-left\"\n })], 8, _hoisted_8), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.monthTitle), 1), _createElementVNode(\"button\", {\n type: \"button\",\n class: \"calendar-nav\",\n \"aria-label\": $options.nextMonthLabel,\n onClick: _cache[5] || (_cache[5] = (...args) => $options.goToNextMonth && $options.goToNextMonth(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-right\"\n })], 8, _hoisted_10)]), _createElementVNode(\"div\", _hoisted_11, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.weekdayLabels, weekday => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: weekday\n }, _toDisplayString(weekday), 1);\n }), 128))]), _createElementVNode(\"div\", _hoisted_12, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.calendarDays, day => {\n return _openBlock(), _createElementBlock(\"button\", {\n key: day.key,\n type: \"button\",\n class: _normalizeClass([\"calendar-day\", {\n 'is-muted': !day.isCurrentMonth,\n 'is-today': day.isToday,\n 'is-range-start': day.key === $data.draftStart,\n 'is-range-end': day.key === $data.draftEnd,\n 'is-in-range': $options.isInRange(day.key)\n }]),\n onClick: $event => $options.selectDay(day.key)\n }, _toDisplayString(day.dayOfMonth), 11, _hoisted_13);\n }), 128))])]);\n}","const DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateKey(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction parseDateKey(value) {\n if (typeof value !== 'string') return null;\n const match = value.trim().match(/^(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})$/);\n if (!match) return null;\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n const date = new Date(year, month, day);\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\n return null;\n }\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction shiftMonth(date, amount) {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\n}\nexport default {\n name: 'DateRangeCalendar',\n props: {\n modelValue: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return {\n displayYear: today.getFullYear(),\n displayMonth: today.getMonth(),\n draftStart: '',\n draftEnd: '',\n inputStart: '',\n inputEnd: '',\n awaitingEnd: false\n };\n },\n computed: {\n previousMonthLabel() {\n return this.$t('dateRangeCalendar.previousMonth');\n },\n nextMonthLabel() {\n return this.$t('dateRangeCalendar.nextMonth');\n },\n startDateLabel() {\n return this.$t('dateRangeCalendar.startDate');\n },\n endDateLabel() {\n return this.$t('dateRangeCalendar.endDate');\n },\n rangeSeparator() {\n return this.$t('dateRangeCalendar.rangeSeparator');\n },\n monthTitle() {\n return this.$t('dateRangeCalendar.monthTitle', {\n year: this.displayYear,\n month: padDatePart(this.displayMonth + 1)\n });\n },\n weekdayLabels() {\n return [this.$t('dateRangeCalendar.weekdaySun'), this.$t('dateRangeCalendar.weekdayMon'), this.$t('dateRangeCalendar.weekdayTue'), this.$t('dateRangeCalendar.weekdayWed'), this.$t('dateRangeCalendar.weekdayThu'), this.$t('dateRangeCalendar.weekdayFri'), this.$t('dateRangeCalendar.weekdaySat')];\n },\n calendarDays() {\n const monthStart = new Date(this.displayYear, this.displayMonth, 1);\n const start = new Date(this.displayYear, this.displayMonth, 1 - monthStart.getDay());\n const todayKey = formatDateKey(new Date());\n return Array.from({\n length: 42\n }, (_, index) => {\n const date = new Date(start.getTime() + index * DAY_MS);\n const key = formatDateKey(date);\n return {\n key,\n dayOfMonth: date.getDate(),\n isCurrentMonth: date.getMonth() === this.displayMonth,\n isToday: key === todayKey\n };\n });\n }\n },\n watch: {\n modelValue: {\n immediate: true,\n handler(value) {\n this.syncFromModel(value);\n }\n }\n },\n methods: {\n syncFromModel(value) {\n const startDate = parseDateKey(value?.[0]);\n const endDate = parseDateKey(value?.[1]);\n this.draftStart = startDate ? formatDateKey(startDate) : '';\n this.draftEnd = endDate ? formatDateKey(endDate) : '';\n this.inputStart = this.draftStart;\n this.inputEnd = this.draftEnd;\n this.awaitingEnd = false;\n const displayDate = startDate || endDate;\n if (displayDate) {\n this.displayYear = displayDate.getFullYear();\n this.displayMonth = displayDate.getMonth();\n }\n },\n goToPreviousMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), -1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n goToNextMonth() {\n const date = shiftMonth(new Date(this.displayYear, this.displayMonth, 1), 1);\n this.displayYear = date.getFullYear();\n this.displayMonth = date.getMonth();\n },\n selectDay(key) {\n if (!this.draftStart || this.draftEnd || !this.awaitingEnd) {\n this.draftStart = key;\n this.draftEnd = '';\n this.inputStart = key;\n this.inputEnd = '';\n this.awaitingEnd = true;\n return;\n }\n const range = key < this.draftStart ? [key, this.draftStart] : [this.draftStart, key];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.commitRange(range);\n },\n handleManualInput() {\n const startDate = parseDateKey(this.inputStart);\n const endDate = parseDateKey(this.inputEnd);\n if (!startDate || !endDate) return;\n const startKey = formatDateKey(startDate);\n const endKey = formatDateKey(endDate);\n const range = startKey <= endKey ? [startKey, endKey] : [endKey, startKey];\n this.draftStart = range[0];\n this.draftEnd = range[1];\n this.inputStart = range[0];\n this.inputEnd = range[1];\n this.awaitingEnd = false;\n this.displayYear = startDate.getFullYear();\n this.displayMonth = startDate.getMonth();\n this.commitRange(range);\n },\n commitRange(range) {\n this.$emit('update:modelValue', range);\n this.$emit('change', range);\n },\n isInRange(key) {\n return Boolean(this.draftStart && this.draftEnd && key > this.draftStart && key < this.draftEnd);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DateRangeCalendar.vue?vue&type=template&id=65a4b58c&scoped=true\"\nimport script from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\nexport * from \"./DateRangeCalendar.vue?vue&type=script&lang=js\"\n\nimport \"./DateRangeCalendar.vue?vue&type=style&index=0&id=65a4b58c&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-65a4b58c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"status-panel\"\n};\nconst _hoisted_2 = {\n class: \"overview-cards\"\n};\nconst _hoisted_3 = {\n class: \"card-icon\"\n};\nconst _hoisted_4 = {\n class: \"card-content\"\n};\nconst _hoisted_5 = {\n class: \"card-title\"\n};\nconst _hoisted_6 = {\n class: \"card-value\"\n};\nconst _hoisted_7 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_8 = {\n class: \"overview-card index-status\"\n};\nconst _hoisted_9 = {\n class: \"card-icon\"\n};\nconst _hoisted_10 = {\n class: \"card-content\"\n};\nconst _hoisted_11 = {\n class: \"card-title\"\n};\nconst _hoisted_12 = {\n class: \"card-value\"\n};\nconst _hoisted_13 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_14 = {\n class: \"card-icon\"\n};\nconst _hoisted_15 = {\n class: \"card-content\"\n};\nconst _hoisted_16 = {\n class: \"card-title\"\n};\nconst _hoisted_17 = {\n class: \"card-value\"\n};\nconst _hoisted_18 = {\n class: \"card-subtitle\"\n};\nconst _hoisted_19 = {\n class: \"charts-section\"\n};\nconst _hoisted_20 = {\n class: \"chart-card trend-chart-card\"\n};\nconst _hoisted_21 = {\n class: \"chart-header trend-chart-header\"\n};\nconst _hoisted_22 = {\n class: \"chart-title\"\n};\nconst _hoisted_23 = {\n class: \"trend-controls\"\n};\nconst _hoisted_24 = {\n class: \"trend-date-panel\"\n};\nconst _hoisted_25 = {\n class: \"chart-content trend-chart-content\"\n};\nconst _hoisted_26 = {\n key: 0,\n class: \"empty-state trend-empty-state\"\n};\nconst _hoisted_27 = {\n key: 1,\n class: \"line-chart-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"chart-card\"\n};\nconst _hoisted_29 = {\n class: \"chart-header\"\n};\nconst _hoisted_30 = {\n class: \"chart-content\"\n};\nconst _hoisted_31 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_33 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_34 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_35 = {\n class: \"center-value\"\n};\nconst _hoisted_36 = {\n class: \"center-label\"\n};\nconst _hoisted_37 = {\n class: \"chart-legend\"\n};\nconst _hoisted_38 = {\n class: \"legend-label\"\n};\nconst _hoisted_39 = {\n class: \"legend-value\"\n};\nconst _hoisted_40 = {\n class: \"legend-percent\"\n};\nconst _hoisted_41 = {\n class: \"chart-card\"\n};\nconst _hoisted_42 = {\n class: \"chart-header\"\n};\nconst _hoisted_43 = {\n class: \"chart-content\"\n};\nconst _hoisted_44 = {\n key: 0,\n class: \"empty-state\"\n};\nconst _hoisted_45 = {\n key: 1,\n class: \"pie-chart-container\"\n};\nconst _hoisted_46 = {\n class: \"pie-chart-wrapper\"\n};\nconst _hoisted_47 = {\n class: \"chart-center-text\"\n};\nconst _hoisted_48 = {\n class: \"center-value\"\n};\nconst _hoisted_49 = {\n class: \"center-label\"\n};\nconst _hoisted_50 = {\n class: \"chart-legend\"\n};\nconst _hoisted_51 = {\n class: \"legend-label\"\n};\nconst _hoisted_52 = {\n class: \"legend-value\"\n};\nconst _hoisted_53 = {\n class: \"legend-percent\"\n};\nconst _hoisted_54 = {\n class: \"actions-section\"\n};\nconst _hoisted_55 = {\n class: \"action-card\"\n};\nconst _hoisted_56 = {\n class: \"action-header\"\n};\nconst _hoisted_57 = {\n class: \"action-content\"\n};\nconst _hoisted_58 = {\n key: 0,\n class: \"progress-container\"\n};\nconst _hoisted_59 = {\n class: \"progress-header\"\n};\nconst _hoisted_60 = {\n class: \"progress-phase\"\n};\nconst _hoisted_61 = {\n class: \"progress-percentage\"\n};\nconst _hoisted_62 = {\n class: \"progress-details\"\n};\nconst _hoisted_63 = {\n key: 0,\n class: \"progress-count\"\n};\nconst _hoisted_64 = {\n key: 1,\n class: \"progress-time\"\n};\nconst _hoisted_65 = {\n key: 0,\n class: \"progress-message\"\n};\nconst _hoisted_66 = {\n key: 1,\n class: \"error-container\"\n};\nconst _hoisted_67 = {\n class: \"error-icon\"\n};\nconst _hoisted_68 = {\n class: \"error-content\"\n};\nconst _hoisted_69 = {\n class: \"error-message\"\n};\nconst _hoisted_70 = {\n key: 0,\n class: \"error-suggestion\"\n};\nconst _hoisted_71 = {\n class: \"error-actions\"\n};\nconst _hoisted_72 = {\n key: 2,\n class: \"action-buttons\"\n};\nconst _hoisted_73 = {\n class: \"restore-section\"\n};\nconst _hoisted_74 = {\n key: 0,\n class: \"file-info-section\"\n};\nconst _hoisted_75 = [\"src\"];\nconst _hoisted_76 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_77 = {\n class: \"file-card-header\"\n};\nconst _hoisted_78 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_79 = {\n class: \"file-name\"\n};\nconst _hoisted_80 = {\n class: \"file-meta\"\n};\nconst _hoisted_81 = [\"src\"];\nconst _hoisted_82 = {\n key: 2,\n class: \"card-bg-fallback\"\n};\nconst _hoisted_83 = {\n class: \"file-card-header warning\"\n};\nconst _hoisted_84 = {\n class: \"info-card-footer\"\n};\nconst _hoisted_85 = {\n class: \"file-name\"\n};\nconst _hoisted_86 = {\n class: \"file-meta\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_DateRangeCalendar = _resolveComponent(\"DateRangeCalendar\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_Line = _resolveComponent(\"Line\");\n const _component_Doughnut = _resolveComponent(\"Doughnut\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", {\n class: \"overview-card total-files\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.fetchIndexInfo && $options.fetchIndexInfo(...args))\n }, [_createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\"\n })]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('sysStatus.totalFiles')), 1), _createElementVNode(\"div\", _hoisted_6, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('sysStatus.clickToRefresh')), 1)])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n })]), _createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"div\", _hoisted_11, _toDisplayString(_ctx.$t('sysStatus.indexUpdateTime')), 1), _createElementVNode(\"div\", _hoisted_12, _toDisplayString($options.formatTime($data.indexInfo.lastUpdated)), 1), _createElementVNode(\"div\", _hoisted_13, _toDisplayString($options.getTimeAgo($data.indexInfo.lastUpdated)), 1)])]), _createElementVNode(\"div\", {\n class: \"overview-card system-version\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.openReleases && $options.openReleases(...args))\n }, [_createElementVNode(\"div\", _hoisted_14, [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\"\n })]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, _toDisplayString(_ctx.$t('sysStatus.systemVersion')), 1), _createElementVNode(\"div\", _hoisted_17, \"v\" + _toDisplayString($data.version), 1), _createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('sysStatus.clickToViewChangelog')), 1)])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"chart-line\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.uploadTrend')), 1), _createVNode(_component_el_button, {\n class: \"trend-calendar-btn\",\n circle: \"\",\n \"aria-label\": _ctx.$t('sysStatus.selectDateRange'),\n onClick: $options.openTrendDateDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"calendar\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]), _createElementVNode(\"div\", _hoisted_23, [_createVNode(_component_el_radio_group, {\n modelValue: $data.trendGroupBy,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.trendGroupBy = $event),\n size: \"small\",\n class: \"trend-group-switch\",\n \"aria-label\": _ctx.$t('sysStatus.uploadTrendGroupBy')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"channel\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelType')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"channelName\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.byChannelName')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"aria-label\"])])]), _createVNode(_component_el_dialog, {\n modelValue: $data.trendDatePickerVisible,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.trendDatePickerVisible = $event),\n title: _ctx.$t('sysStatus.selectDateRange'),\n width: $options.trendDateDialogWidth,\n class: \"trend-date-dialog\",\n \"align-center\": \"\",\n \"append-to-body\": \"\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_24, [_createVNode(_component_DateRangeCalendar, {\n modelValue: $data.trendDateRange,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.trendDateRange = $event),\n onChange: $options.handleTrendDateRangeChange\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createElementVNode(\"div\", _hoisted_25, [!$options.hasTrendData ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [_createVNode(_component_Line, {\n data: $options.uploadTrendChartData,\n options: $options.lineChartOptions\n }, null, 8, [\"data\", \"options\"])]))])]), _createElementVNode(\"div\", _hoisted_28, [_createElementVNode(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"share-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.channelDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_30, [Object.keys($data.indexInfo.channelStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createElementVNode(\"div\", _hoisted_33, [_createVNode(_component_Doughnut, {\n data: $options.channelChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"div\", _hoisted_35, _toDisplayString($data.indexInfo.totalFiles?.toLocaleString() || '0'), 1), _createElementVNode(\"div\", _hoisted_36, _toDisplayString(_ctx.$t('sysStatus.totalFilesLabel')), 1)])]), _createElementVNode(\"div\", _hoisted_37, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.indexInfo.channelStats, (count, channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_38, _toDisplayString(channel), 1), _createElementVNode(\"span\", _hoisted_39, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_40, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])]), _createElementVNode(\"div\", _hoisted_41, [_createElementVNode(\"div\", _hoisted_42, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.fileStatusDistribution')), 1)]), _createElementVNode(\"div\", _hoisted_43, [Object.keys($data.indexInfo.typeStats || {}).length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_44, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.noData')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_45, [_createElementVNode(\"div\", _hoisted_46, [_createVNode(_component_Doughnut, {\n data: $options.typeChartData,\n options: $options.chartOptions\n }, null, 8, [\"data\", \"options\"]), _createElementVNode(\"div\", _hoisted_47, [_createElementVNode(\"div\", _hoisted_48, _toDisplayString(Object.keys($data.indexInfo.typeStats).length), 1), _createElementVNode(\"div\", _hoisted_49, _toDisplayString(_ctx.$t('sysStatus.statusTypes')), 1)])]), _createElementVNode(\"div\", _hoisted_50, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.aggregatedTypeStats, (count, status, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: status,\n class: \"legend-item\"\n }, [_createElementVNode(\"span\", {\n class: \"legend-color\",\n style: _normalizeStyle({\n background: $options.getTypeChartColor(index)\n })\n }, null, 4), _createElementVNode(\"span\", _hoisted_51, _toDisplayString(status), 1), _createElementVNode(\"span\", _hoisted_52, _toDisplayString(count.toLocaleString()), 1), _createElementVNode(\"span\", _hoisted_53, _toDisplayString($options.getPercentage(count, $data.indexInfo.totalFiles)) + \"%\", 1)]);\n }), 128))])]))])])]), _createElementVNode(\"div\", _hoisted_54, [_createElementVNode(\"div\", _hoisted_55, [_createElementVNode(\"div\", _hoisted_56, [_createVNode(_component_font_awesome_icon, {\n icon: \"tools\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.systemMaintenance')), 1)]), _createElementVNode(\"div\", _hoisted_57, [$data.isProcessing ? (_openBlock(), _createElementBlock(\"div\", _hoisted_58, [_createElementVNode(\"div\", _hoisted_59, [_createElementVNode(\"span\", _hoisted_60, _toDisplayString($options.phaseDescription), 1), _createElementVNode(\"span\", _hoisted_61, _toDisplayString(Math.round($data.processingProgress.percentage)) + \"%\", 1)]), _createVNode(_component_el_progress, {\n percentage: $data.processingProgress.percentage,\n \"stroke-width\": 12,\n \"show-text\": false,\n class: \"progress-bar\"\n }, null, 8, [\"percentage\"]), _createElementVNode(\"div\", _hoisted_62, [$data.processingProgress.current > 0 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_63, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.processingProgress.current.toLocaleString()) + \" \", 1), $data.processingProgress.total > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createTextVNode(\" / \" + _toDisplayString($data.processingProgress.total.toLocaleString()), 1)], 64)) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.records')), 1)])) : _createCommentVNode(\"\", true), $options.estimatedTimeRemaining ? (_openBlock(), _createElementBlock(\"span\", _hoisted_64, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\"\n }), _createTextVNode(\" \" + _toDisplayString($options.estimatedTimeRemaining), 1)])) : _createCommentVNode(\"\", true)]), $data.processingProgress.message ? (_openBlock(), _createElementBlock(\"div\", _hoisted_65, _toDisplayString($data.processingProgress.message), 1)) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n size: \"small\",\n onClick: $options.cancelOperation,\n class: \"cancel-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.cancelOperation')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : $data.processingError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_66, [_createElementVNode(\"div\", _hoisted_67, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\"\n })]), _createElementVNode(\"div\", _hoisted_68, [_createElementVNode(\"div\", _hoisted_69, _toDisplayString($data.processingError.message), 1), $data.processingError.suggestion ? (_openBlock(), _createElementBlock(\"div\", _hoisted_70, _toDisplayString($data.processingError.suggestion), 1)) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_71, [$data.processingError.recoverable ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n size: \"small\",\n onClick: $options.retryOperation\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysStatus.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true), _createVNode(_component_el_button, {\n type: \"default\",\n size: \"small\",\n onClick: $options.dismissError\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysStatus.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_72, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.rebuildTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.rebuilding,\n disabled: $data.isProcessing,\n onClick: $options.rebuildIndex,\n class: \"action-btn rebuild-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\"\n }), _createTextVNode(\" \" + _toDisplayString($data.rebuilding ? _ctx.$t('sysStatus.rebuilding') : _ctx.$t('sysStatus.rebuildIndex')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.backupTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n type: \"success\",\n loading: $data.backing,\n disabled: $data.isProcessing,\n onClick: $options.backupData,\n class: \"action-btn backup-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n }), _createTextVNode(\" \" + _toDisplayString($data.backing ? _ctx.$t('sysStatus.backingUp') : _ctx.$t('sysStatus.backupData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysStatus.restoreTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_73, [_createElementVNode(\"input\", {\n type: \"file\",\n ref: \"fileInput\",\n accept: \".json\",\n onChange: _cache[5] || (_cache[5] = (...args) => $options.handleFileSelect && $options.handleFileSelect(...args)),\n style: {\n \"display\": \"none\"\n }\n }, null, 544), _createVNode(_component_el_button, {\n type: \"warning\",\n loading: $data.restoring,\n disabled: $data.isProcessing,\n onClick: $options.selectRestoreFile,\n class: \"action-btn restore-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"upload\"\n }), _createTextVNode(\" \" + _toDisplayString($data.restoring ? _ctx.$t('sysStatus.restoring') : _ctx.$t('sysStatus.restoreData')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\", \"onClick\"])])]),\n _: 1\n }, 8, [\"content\"])]))])])]), $data.indexInfo.newestFile || $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", _hoisted_74, [$data.indexInfo.newestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"file-info-card info-card-newest\",\n onClick: _cache[8] || (_cache[8] = $event => $options.openFileInNewTab($data.indexInfo.newestFile))\n }, [$options.isImageFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[6] || (_cache[6] = $event => $options.handleImageError('newest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.newestFile) && !$data.loadErrors['newest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.newestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[7] || (_cache[7] = $event => $options.handleImageError('newest'))\n }, null, 40, _hoisted_75)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_76, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_77, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.latestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_78, [_createElementVNode(\"div\", _hoisted_79, _toDisplayString($data.indexInfo.newestFile.metadata?.FileName || $data.indexInfo.newestFile.id), 1), _createElementVNode(\"div\", _hoisted_80, _toDisplayString($options.formatTime($data.indexInfo.newestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true), $data.indexInfo.oldestFile ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-info-card info-card-oldest\",\n onClick: _cache[11] || (_cache[11] = $event => $options.openFileInNewTab($data.indexInfo.oldestFile))\n }, [$options.isImageFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createBlock(_component_el_image, {\n key: 0,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n fit: \"cover\",\n class: \"card-bg-media\",\n onError: _cache[9] || (_cache[9] = $event => $options.handleImageError('oldest'))\n }, null, 8, [\"src\"])) : $options.isVideoFile($data.indexInfo.oldestFile) && !$data.loadErrors['oldest'] ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: '/file/' + $data.indexInfo.oldestFile.id + '?from=admin',\n class: \"card-bg-media\",\n muted: \"\",\n loop: \"\",\n autoplay: \"\",\n onError: _cache[10] || (_cache[10] = $event => $options.handleImageError('oldest'))\n }, null, 40, _hoisted_81)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_82, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-alt\",\n class: \"fallback-icon\"\n })])), _createElementVNode(\"div\", _hoisted_83, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysStatus.earliestUpload')), 1)]), _createElementVNode(\"div\", _hoisted_84, [_createElementVNode(\"div\", _hoisted_85, _toDisplayString($data.indexInfo.oldestFile.metadata?.FileName || $data.indexInfo.oldestFile.id), 1), _createElementVNode(\"div\", _hoisted_86, _toDisplayString($options.formatTime($data.indexInfo.oldestFile.metadata?.TimeStamp)), 1)])])) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)])), [[_directive_loading, $data.loading]]);\n}","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n let id = 0;\n return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray(value: unknown): value is T[] {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault(value: T | undefined, defaultValue: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback R, TA, R>(\n fn: T | undefined,\n args: unknown[],\n thisArg?: TA\n): R | undefined {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each(\n loopable: Record,\n fn: (this: TA, v: T, i: string) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[],\n fn: (this: TA, v: T, i: number) => void,\n thisArg?: TA,\n reverse?: boolean\n): void;\nexport function each(\n loopable: T[] | Record,\n fn: (this: TA, v: T, i: any) => void,\n thisArg?: TA,\n reverse?: boolean\n) {\n let i: number, len: number, keys: string[];\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone(source: T): T {\n if (isArray(source)) {\n return source.map(clone) as unknown as T;\n }\n\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key: string) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\n\nexport interface MergeOptions {\n merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge(target: T, source: [], options?: MergeOptions): T;\nexport function merge(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge(\n target: T,\n source: [S1, S2, S3, S4],\n options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n\n if (!isObject(target)) {\n return target as AnyObject;\n }\n\n options = options || {};\n const merger = options.merger || _merger;\n let current: AnyObject;\n\n for (let i = 0; i < ilen; ++i) {\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n\n const keys = Object.keys(current);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, current, options as AnyObject);\n }\n }\n\n return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf(target: T, source: []): T;\nexport function mergeIf(target: T, source: S1): T & S1;\nexport function mergeIf(target: T, source: [S1]): T & S1;\nexport function mergeIf(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf(target: T, source: AnyObject[]): AnyObject {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n if (!isValidKey(key)) {\n return;\n }\n\n const tval = target[key];\n const sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': v => v,\n // default resolvers\n x: o => o.x,\n y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n const parts = key.split('.');\n const keys: string[] = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n // For backward compatibility:\n // Chart.helpers.core resolveObjectKey should break at empty key\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = (a: Set, b: Set) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n","import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n const result: number[] = [];\n const sqrt = Math.sqrt(value);\n let i: number;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) { // if value is a square number\n result.push(sqrt);\n }\n\n result.sort((a, b) => a - b).pop();\n return result;\n}\n\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */\nfunction isNonPrimitive(n: unknown) {\n return typeof n === 'symbol' || (typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n));\n}\n\nexport function isNumber(n: unknown): n is number {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n array: Record[],\n target: { min: number, max: number },\n property: string\n) {\n let i: number, ilen: number, value: number;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nexport function toRadians(degrees: number) {\n return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n if (!isFiniteNumber(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n centrePoint: Point,\n anglePoint: Point\n) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < (-0.5 * PI)) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n","import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n table: number[],\n value: number,\n cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: T[],\n value: number,\n cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n table: unknown[],\n value: number,\n cmp?: (value: number) => boolean\n) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid: number;\n\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n table: Record[],\n key: string,\n value: number,\n last?: boolean\n) =>\n _lookup(table, value, last\n ? index => {\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n }\n : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n table: Record[],\n key: string,\n value: number\n) =>\n _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n let start = 0;\n let end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener {\n _onDataPush?(...item: T[]): void;\n _onDataPop?(): void;\n _onDataShift?(): void;\n _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents(array: T[], listener: ArrayListener): void;\nexport function unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n\n delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique(items: T[]) {\n const set = new Set(items);\n\n if (set.size === items.length) {\n return items;\n }\n\n return Array.from(set);\n}\n","import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\nimport {isNullOrUndef} from './helpers.core.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled>(\n fn: (...args: TArgs) => void,\n thisArg: any,\n) {\n let argsToUse = [] as TArgs;\n let ticking = false;\n\n return function(...args: TArgs) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce>(fn: (...args: TArgs) => void, delay: number) {\n let timeout;\n return function(...args: TArgs) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n const pointCount = points.length;\n\n let start = 0;\n let count = pointCount;\n\n if (meta._sorted) {\n const {iScale, vScale, _parsed} = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n if (minDefined) {\n start = Math.min(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = (_parsed\n .slice(0, start + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(\n // @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = (_parsed\n .slice(end - 1)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n","import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n linear: (t: number) => t,\n\n easeInQuad: (t: number) => t * t,\n\n easeOutQuad: (t: number) => -t * (t - 2),\n\n easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n\n easeInCubic: (t: number) => t * t * t,\n\n easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n\n easeInQuart: (t: number) => t * t * t * t,\n\n easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n\n easeInQuint: (t: number) => t * t * t * t * t,\n\n easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n easeInOutElastic(t: number) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n\n easeInBack(t: number) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n\n easeOutBack(t: number) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n\n easeInOutBack(t: number) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n\n easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n easeOutBounce(t: number) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n\n easeInOutBounce: (t: number) => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n","import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n value:\n | string\n | { r: number; g: number; b: number; a: number }\n | [number, number, number]\n | [number, number, number, number]\n): Color;\nexport function color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n","const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n });\n\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n });\n\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n });\n\n defaults.describe('animations', {\n _fallback: 'animation',\n });\n\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0 // show immediately\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n },\n }\n }\n });\n}\n","export function applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n","\nconst intlCache = new Map();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n return getNumberFormat(locale, options).format(num);\n}\n","import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values(value) {\n return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n },\n\n /**\n * Formatter for numeric ticks\n * @method Chart.Ticks.formatters.numeric\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0'; // never show decimal places for 0\n }\n\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n if (ticks.length > 1) {\n // all ticks are small or there huge numbers; use scientific notation\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n const logDelta = log10(Math.abs(delta));\n\n // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n //\n // toFixed has a max of 20 decimal places\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n\n return formatNumber(tickValue, locale, options);\n },\n\n\n /**\n * Formatter for logarithmic ticks\n * @method Chart.Ticks.formatters.logarithmic\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {object[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n // Figure out how many digits to show\n // The space between the first two ticks might be smaller than normal spacing\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n","import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 3.0.0\n */\n bounds: 'ticks',\n\n clip: true,\n\n /**\n * Addition grace added to max and reduced from min data value.\n * @since 3.0.0\n */\n grace: 0,\n\n // grid line settings\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n },\n\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n\n // scale title\n title: {\n // display property\n display: false,\n\n // actual label\n text: '',\n\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n\n // label settings\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n });\n\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n });\n\n defaults.describe('scales', {\n _fallback: 'scale',\n });\n\n defaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n });\n}\n","import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\n\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope(root, scope), values);\n }\n return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n constructor(_descriptors, _appliers) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n set(scope, values) {\n return set(this, scope, values);\n }\n\n /**\n\t * @param {string} scope\n\t */\n get(scope) {\n return getScope(this, scope);\n }\n\n /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n\n override(scope, values) {\n return set(overrides, scope, values);\n }\n\n /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t * - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope(this, scope);\n const targetScopeObject = getScope(this, targetScope);\n const privateName = '_' + name;\n\n Object.defineProperties(scopeObject, {\n // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n\n apply(appliers) {\n appliers.forEach((apply) => apply(this));\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n","import type {\n Chart,\n Point,\n FontSpec,\n CanvasFontSpec,\n PointStyle,\n RenderTextOpts,\n BackdropOptions\n} from '../types/index.js';\nimport type {\n TRBL,\n SplinePoint,\n RoundedRect,\n TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n ctx: CanvasRenderingContext2D,\n data: Record,\n gc: string[],\n longest: number,\n string: string\n) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n ctx: CanvasRenderingContext2D,\n font: string,\n arrayOfThings: Things,\n cache?: {data?: Record, garbageCollect?: string[], font?: string}\n) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas?: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n if (!ctx && !canvas) {\n return;\n }\n\n ctx = ctx || canvas.getContext('2d');\n\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nexport interface DrawPointOptions {\n pointStyle: PointStyle;\n rotation?: number;\n radius: number;\n borderWidth: number;\n}\n\nexport function drawPoint(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number\n) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n ctx: CanvasRenderingContext2D,\n options: DrawPointOptions,\n x: number,\n y: number,\n w: number\n) {\n let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n point: Point,\n area: TRBL,\n margin?: number\n) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n ctx: CanvasRenderingContext2D,\n previous: Point,\n target: Point,\n flip?: boolean,\n mode?: string\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n ctx: CanvasRenderingContext2D,\n previous: SplinePoint,\n target: SplinePoint,\n flip?: boolean\n) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n line: string,\n opts: RenderTextOpts\n) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n const oldColor = ctx.fillStyle;\n\n ctx.fillStyle = opts.color as string;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n ctx: CanvasRenderingContext2D,\n text: string | string[],\n x: number,\n y: number,\n font: CanvasFontSpec,\n opts: RenderTextOpts = {}\n) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i: number, line: string;\n\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n\n y += Number(font.lineHeight);\n }\n\n ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n ctx: CanvasRenderingContext2D,\n rect: RoundedRect & { radius: TRBLCorners }\n) {\n const {x, y, w, h, radius} = rect;\n\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n","import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n default:\n break;\n }\n\n return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps(value: number | Record, props: K[]): Record;\nexport function _readValueToProps(value: number | Record, props: Record): Record;\nexport function _readValueToProps(value: number | Record, props: string[] | Record) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n const obj = toTRBL(value) as ChartArea;\n\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n\n return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial, fallback?: Partial) {\n options = options || {};\n fallback = fallback || defaults.font as FontSpec;\n\n let size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n\n font.string = toFontString(font);\n return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array, context?: object, index?: number, info?: { cacheable: boolean }) {\n let cacheable = true;\n let i: number, ilen: number, value: unknown;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext(parentContext: null, context: T): T;\nexport function createContext(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n return Object.assign(Object.create(parentContext), context);\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n ResolverObjectKey,\n ResolverCache,\n ResolverProxy,\n DescriptorDefaults,\n Descriptor,\n ContextCache,\n ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n scopes: T,\n prefixes = [''],\n rootScopes?: R,\n fallback?: ResolverObjectKey,\n getTarget = () => scopes[0]\n) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache: ResolverCache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop: string) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop: string) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop: string, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n }) as ResolverProxy;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n T extends AnyObject[] = AnyObject[],\n R extends AnyObject[] = T\n>(\n proxy: ResolverProxy,\n context: AnyObject,\n subProxy?: ResolverProxy,\n descriptorDefaults?: DescriptorDefaults\n) {\n const cache: ContextCache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */\n deleteProperty(target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n\n /**\n * A trap for getting property values.\n */\n get(target, prop: string, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n\n /**\n * A trap for Object.getPrototypeOf.\n */\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n\n /**\n * A trap for the in operator.\n */\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n\n /**\n * A trap for setting property values.\n */\n set(target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n }) as ContextProxy;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n proxy: ResolverCache,\n defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n target: AnyObject,\n prop: string,\n resolve: () => unknown\n) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(\n target: ContextCache,\n prop: string,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop]; // resolve from proxy\n\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\n\nfunction _resolveScriptable(\n prop: string,\n getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n target: ContextCache,\n receiver: AnyObject\n) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\n\nfunction _resolveArray(\n prop: string,\n value: unknown[],\n target: ContextCache,\n isIndexable: (key: string) => boolean\n) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\n\nfunction resolveFallback(\n fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n prop: ResolverObjectKey,\n value: unknown\n) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n set: Set,\n parentScopes: AnyObject[],\n key: ResolverObjectKey,\n parentFallback: ResolverObjectKey,\n value: unknown\n) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\n\nfunction createSubResolver(\n parentScopes: AnyObject[],\n resolver: ResolverCache,\n prop: ResolverObjectKey,\n value: unknown\n) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n set: Set,\n allScopes: AnyObject[],\n key: ResolverObjectKey,\n fallback: ResolverObjectKey,\n item: unknown\n) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\n\nfunction subGetTarget(\n resolver: ResolverCache,\n prop: string,\n value: unknown\n) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\n\nfunction _resolveWithPrefixes(\n prop: string,\n prefixes: string[],\n scopes: AnyObject[],\n proxy: ResolverProxy\n) {\n let value: unknown;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n meta: ChartMeta<'line' | 'scatter'>,\n data: AnyObject[],\n start: number,\n count: number\n) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array<{r: unknown}>(count);\n let i: number, ilen: number, index: number, item: AnyObject;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n","import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n firstPoint: SplinePoint,\n middlePoint: SplinePoint,\n afterPoint: SplinePoint,\n t: number\n): {\n previous: SplinePoint\n next: SplinePoint\n } {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n // This function must also respect \"skipped\" points\n\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n const pointsLen = points.length;\n\n let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK: number[] = Array(pointsLen).fill(0);\n const mK: number[] = Array(pointsLen);\n\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n let pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n points: SplinePoint[],\n options,\n area: ChartArea,\n loop: boolean,\n indexAxis: 'x' | 'y'\n) {\n let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType;\n\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n","import type {ChartArea, Scale} from '../types/index.js';\nimport type PrivateChart from '../core/core.controller.js';\nimport type {Chart, ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = (parent as ShadowRoot).host;\n }\n return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n let valueInPixels: number;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n const result = {} as ChartArea;\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n e: Event | TouchEvent | MouseEvent,\n canvas: HTMLCanvasElement\n): {\n x: number;\n y: number;\n box: boolean;\n } {\n const touches = (e as TouchEvent).touches;\n const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n const {offsetX, offsetY} = source as MouseEvent;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n event: Event | ChartEvent | TouchEvent | MouseEvent,\n chart: Chart | PrivateChart\n): { x: number; y: number } {\n if ('native' in event) {\n return event;\n }\n\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial {\n let maxWidth: number, maxHeight: number;\n\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n canvas: HTMLCanvasElement,\n bbWidth?: number,\n bbHeight?: number,\n aspectRatio?: number\n): { width: number; height: number } {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n\n return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n chart: Chart | PrivateChart,\n forceRatio: number,\n forceStyle?: boolean\n): boolean | void {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = round1(chart.height * pixelRatio);\n const deviceWidth = round1(chart.width * pixelRatio);\n\n (chart as PrivateChart).height = round1(chart.height);\n (chart as PrivateChart).width = round1(chart.width);\n\n const canvas = chart.canvas;\n\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n (chart as PrivateChart).currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() { // This function will be called when the browser attempts to access the passive property.\n passiveSupported = true;\n return false;\n }\n } as EventListenerOptions;\n\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n element: HTMLElement,\n property: 'width' | 'height'\n): number | undefined {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n","import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n p1: Point,\n p2: Point,\n t: number, mode: 'middle' | 'after' | unknown\n) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n","export interface RTLAdapter {\n x(x: number): number;\n setWidth(w: number): void;\n textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n xPlus(x: number, value: number): number;\n leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n return {\n x(x) {\n return x;\n },\n setWidth(w) { // eslint-disable-line no-unused-vars\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n return x;\n },\n };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n let style: CSSStyleDeclaration, original: [string, string];\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n\n style.setProperty('direction', direction, 'important');\n (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n if (original !== undefined) {\n delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n","import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n // eslint-disable-next-line prefer-const\n let {start, end, loop} = segment;\n let i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n\n return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n\n if (loop && !spanGaps) {\n // loop and not spanning gaps, first find a gap to start from\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n // find first non skipped point (after the first gap possibly)\n while (start < count && points[start].skip) {\n start++;\n }\n\n // if we looped to count, start needs to be 0\n start %= count;\n\n if (loop) {\n // loop will go past count, if start > 0\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n // end could be more than count, normalize\n end %= count;\n\n return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n // @ts-ignore\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n\n return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n\n if (!count) {\n return [];\n }\n\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n // Style can not start/end on a skipped point, adjust indices accordingly\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n","import type {Chart, ChartArea, ChartMeta, Scale, TRBL} from '../types/index.js';\n\nfunction getSizeForArea(scale: Scale, chartArea: ChartArea, field: keyof ChartArea) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta: ChartMeta, chartArea: ChartArea): TRBL {\n const {xScale, yScale} = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\n\nexport function getDatasetClipArea(chart: Chart, meta: ChartMeta): TRBL | false {\n const clip = meta._clip;\n if (clip.disabled) {\n return false;\n }\n const area = getDatasetArea(meta, chart.chartArea);\n\n return {\n left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n };\n}\n","import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n /**\n\t * @private\n\t */\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n\n /**\n\t * @private\n\t */\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n\n if (this._running) {\n this._refresh();\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _update(date = Date.now()) {\n let remaining = 0;\n\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n // if the animation has been updated and its duration prolonged,\n // update to total duration of current animations run (for progress event)\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n // Remove the item by replacing it with last item and removing the last\n // A lot faster than splice.\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n\n /**\n\t * @private\n\t */\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n\n /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n\n /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n\n /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n\n /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n\n /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n","import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n /**\n * @param {string} from\n * @param {string} to\n * @param {number} factor\n */\n color(from, to, factor) {\n const c0 = helpersColor(from || transparent);\n const c1 = c0.valid && helpersColor(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nexport default class Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n active() {\n return this._active;\n }\n\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n\n cancel() {\n if (this._active) {\n // update current evaluated value, for smoother animations\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n\n this._active = from !== to && (loop || (elapsed < duration));\n\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n this._target[prop] = this._fn(from, to, factor);\n }\n\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n","import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n\n /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n // Going to shared options:\n // After all animations are done, assign the shared options object to the element\n // So any new updates to the shared options are observed\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n // rejected, noop\n });\n }\n\n return animations;\n }\n\n /**\n\t * @private\n\t */\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n // There is an existing active animation, let's update that\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n // not animated, set directly to new value\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n\n\n /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n update(target, values) {\n if (this._properties.size === 0) {\n // Nothing is animated, just apply the new values.\n Object.assign(target, values);\n return;\n }\n\n const animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\n\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n // @ts-ignore\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n // Going from shared options to distinct one:\n // Create new options object containing the old shared values and start updating that.\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n","import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n let t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n let found = false;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n\n if (!found && !options.all) {\n return 0;\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data, meta) {\n const {iScale, vScale} = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n // Not using meta.index here, because it might be already updated if the dataset changed location\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n /**\n * @type {any}\n */\n static defaults = {};\n\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n */\n static datasetElementType = null;\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n */\n static dataElementType = null;\n\n /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n /** @type {boolean | object} */\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n\n this.initialize();\n }\n\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n\n /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n\n /**\n\t * @private\n\t */\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n\n reset() {\n this._update('reset');\n }\n\n /**\n\t * @private\n\t */\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n\n /**\n\t * @private\n\t */\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n\n // In order to correctly handle data addition/deletion animation (and thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal metadata accordingly.\n\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(_data, this);\n // Discard old parsed data and stacks\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n\n addElements() {\n const meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n\n this._dataCheck();\n\n // make sure cached _stacked status is current\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n // detect change in stack option\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n // remove values from old stack\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n this._resyncElements(resetNewElements);\n\n // if stack changed, update stack values for the whole dataset\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n\n /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n\n /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n\n /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n\n /**\n\t * @protected\n\t */\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n\n /**\n\t * @protected\n\t */\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n\n /**\n\t * @protected\n\t */\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n // if the data is sorted, we don't need to check further from this end of array\n break;\n }\n }\n if (sorted) {\n // in the sorted case, find first non-skipped value from other end of array\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return false;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n\n /**\n\t * @private\n\t */\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {} // eslint-disable-line no-unused-vars\n\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n\n /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n\n /**\n\t * @protected\n\t */\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n\n /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n\n /**\n\t * @private\n\t */\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n // context is provided as a function, and is called only if needed,\n // so we don't create a context for each element if not needed.\n const context = () => this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n // `$shared` indicates this set of options can be shared between multiple elements.\n // Sharing is used to reduce number of properties to change during animation.\n values.$shared = sharing;\n\n // We cache options by `mode`, which can be 'active' for example. This enables us\n // to have the 'active' element options and 'default' options to switch between\n // when interacting.\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n\n\n /**\n\t * @private\n\t */\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n\n /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n\n /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n\n /**\n * @todo v4, rename to getSharedOptions and remove excess functions\n */\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n\n /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n\n /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n\n /**\n\t * @private\n\t */\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n // When going from active to inactive, we need to update to the shared options.\n // This way the once hovered element will end up with the same original shared options instance, after animation.\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n\n /**\n\t * @private\n\t */\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n\n /**\n\t * @private\n\t */\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n\n /**\n\t * @private\n\t */\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n\n // Apply changes detected through array listeners\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n\n if (count) {\n // TODO: It is not optimal to always parse the old data\n // This is done because we are not detecting direct assignments:\n // chart.data.datasets[0].data[5] = 10;\n // chart.data.datasets[0].data[5].y = 10;\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n\n /**\n\t * @private\n\t */\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n\n updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @private\n\t */\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n\n /**\n\t * @private\n */\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {\n _arrayUnique, isArray, isNullOrUndef,\n valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n // Ignore truncated pixels\n return;\n }\n if (defined(prev)) {\n // curr - prev === 0 is ignored\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n // Store `barEnd` (furthest away from origin) as parsed value,\n // to make stacking straight forward\n item[vScale.axis] = barEnd;\n\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n\n const {start, end, reverse, top, bottom} = borderProps(properties);\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n };\n\n\n /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n\n /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n // float bar: only one end of the bar is considered by `super`\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n\n /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n getMaxOverflow() {\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n\n initialize() {\n this.enableOptionSharing = true;\n\n super.initialize();\n\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n\n /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n\n const skipNull = (meta) => {\n const parsed = meta._parsed.find(item => item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n // stacked | meta.stack\n // | found | not found | undefined\n // false | x | x | x\n // true | | x |\n // undefined | | x | x\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n\n // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n // stack where possible invisible bars will be located.\n // https://github.com/chartjs/Chart.js/issues/6368\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n\n /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n\n _getAxisCount() {\n return this._getAxis().length;\n }\n\n getFirstScaleIdForIndexAxis() {\n const scales = this.chart.scales;\n const indexScaleId = this.chart.options.indexAxis;\n return Object.keys(scales).filter(key => scales[key].axis === indexScaleId).shift();\n }\n\n _getAxis() {\n const axis = {};\n const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n for (const dataset of this.chart.data.datasets) {\n axis[valueOrDefault(\n this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId\n )] = true;\n }\n return Object.keys(axis);\n }\n\n /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1; // indexOf returns -1 if element is not present\n\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n\n /**\n\t * @private\n\t */\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n // bar thickness ratio used for non-grouped bars\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n\n /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n // bars crossing origin are not stacked\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n // When not visible, no height\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n\n if (_stacked && !floating) {\n // visual data coordinates after applying minBarLength\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n\n /**\n\t * @private\n\t */\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n const axisCount = this._getAxisCount();\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n // For non-grouped bar charts, exact pixel values are used\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n static id = 'bubble';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n\n /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * Parse array of objects\n\t * @protected\n\t */\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n\n update(mode) {\n const points = this._cachedMeta.data;\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n\n /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n\n // In case values were cached (and thus frozen), we need to clone the values\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n\n // Custom radius resolution\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n return values;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n static id = 'doughnut';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n // The percentage of the chart that we cut out of the middle.\n cutout: '50%',\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%',\n\n // Spacing between arcs\n spacing: 0,\n\n indexAxis: 'r',\n };\n\n static descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n // Need to override these to give a nice default\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n const {labels: {pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n if (data.labels.length && data.datasets.length) {\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !chart.getDataVisibility(i),\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: style.borderWidth,\n strokeStyle: style.borderColor,\n textAlign: textAlign,\n pointStyle: pointStyle,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n\n linkScales() {}\n\n /**\n\t * Override data parsing, since we are not using scales\n\t */\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n\n /**\n\t * @private\n\t */\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n\n /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n\n /**\n\t * @param {string} mode\n\t */\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n\n // Compute the maximal rotation & circumference limits.\n // If we only consider our dataset, this can cause problems when two datasets\n // are both less than a circle with different rotations (starting angles)\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n\n meta.total = this.calculateTotal();\n\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @private\n */\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n\n getMaxOffset(arcs) {\n let max = 0;\n\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n\n /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n\n /**\n\t * @private\n\t */\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n\n /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n\n showLine: true,\n spanGaps: false,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n };\n\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = 0; i < pointsCount; ++i) {\n const point = points[i];\n const properties = directUpdate ? point : {};\n\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n static id = 'polarArea';\n\n /**\n * @type {any}\n */\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle, color}} = chart.legend.options;\n\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n return [];\n }\n },\n\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n return {\n label: labels[index] || '',\n value,\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const arcs = this._cachedMeta.data;\n\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n\n /**\n * @protected\n */\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n\n return range;\n }\n\n /**\n\t * @private\n\t */\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n\n const defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n\n this.updateElement(arc, i, properties, mode);\n }\n }\n\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n\n return count;\n }\n\n /**\n\t * @private\n\t */\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\n","import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n static id = 'pie';\n\n /**\n * @type {any}\n */\n static defaults = {\n // The percentage of the chart that we cut out of the middle.\n cutout: 0,\n\n // The rotation of the chart, where the first data arc begins.\n rotation: 0,\n\n // The total circumference of the chart.\n circumference: 360,\n\n // The outer radius of the chart\n radius: '100%'\n };\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n static id = 'radar';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n aspectRatio: 1,\n\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n\n // Update Line\n line.points = points;\n // In resize mode only point locations change, so no need to set the points or options.\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n\n this.updateElement(line, undefined, properties, mode);\n }\n\n // Update Points\n this.updateElements(points, 0, points.length, mode);\n }\n\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n","import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n static id = 'scatter';\n\n /**\n * @type {any}\n */\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n\n /**\n * @type {any}\n */\n static overrides = {\n\n interaction: {\n mode: 'point'\n },\n\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n\n /**\n\t * @protected\n\t */\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n // @ts-ignore\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n\n // https://github.com/chartjs/Chart.js/issues/11333\n if (!this.datasetElementType) {\n this.addElements();\n }\n const {dataset: line, _dataset} = meta;\n\n // Update Line\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n // https://github.com/chartjs/Chart.js/issues/11333\n delete meta.dataset;\n this.datasetElementType = false;\n }\n\n // Update Points\n this.updateElements(points, start, count, mode);\n }\n\n addElements() {\n const {showLine} = this.options;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n\n super.addElements();\n }\n\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n\n /**\n\t * @protected\n\t */\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n","/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter {\n readonly options: T;\n /**\n * Will called with chart options after adapter creation.\n */\n init(this: DateAdapter, chartOptions: ChartOptions): void;\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n */\n formats(this: DateAdapter): Record;\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param value - the value to parse (usually comes from the data)\n * @param [format] - the expected data format\n */\n parse(this: DateAdapter, value: unknown, format?: string): number | null;\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param timestamp - the timestamp to format\n * @param format - the date/time token\n */\n format(this: DateAdapter, timestamp: number, format: string): string;\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param amount - the amount to add\n * @param unit - the unit as string\n */\n add(this: DateAdapter, timestamp: number, amount: number, unit: TimeUnit): number;\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param a - the input timestamp (reference)\n * @param b - the timestamp to subtract\n * @param unit - the unit as string\n */\n diff(this: DateAdapter, a: number, b: number, unit: TimeUnit): number;\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n * @param [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n */\n startOf(this: DateAdapter, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number | boolean): number;\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param timestamp - the input timestamp\n * @param unit - the unit as string\n */\n endOf(this: DateAdapter, timestamp: number, unit: TimeUnit): number;\n}\n\nfunction abstract(): T {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */\n static override(\n members: Partial, 'options'>>\n ) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n\n readonly options: AnyObject;\n\n constructor(options?: AnyObject) {\n this.options = options || {};\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n\n formats(): Record {\n return abstract();\n }\n\n parse(): number | null {\n return abstract();\n }\n\n format(): string {\n return abstract();\n }\n\n add(): number {\n return abstract();\n }\n\n diff(): number {\n return abstract();\n }\n\n startOf(): number {\n return abstract();\n }\n\n endOf(): number {\n return abstract();\n }\n}\n\nexport default {\n _date: DateAdapterBase as {\n new (options?: AnyObject): DateAdapter;\n override(\n members: Partial, 'options'>>\n ): void;\n }\n};\n","import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea, isNullOrUndef} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const {vScale} = controller._cachedMeta;\n const {_parsed} = metaset;\n\n const distanceToDefinedLo = (_parsed\n .slice(0, result.lo + 1)\n .reverse()\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.lo -= Math.max(0, distanceToDefinedLo);\n\n const distanceToDefinedHi = (_parsed\n .slice(result.hi)\n .findIndex(\n point => !isNullOrUndef(point[vScale.axis])));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n // _sharedOptions indicates that each element has equal options -> equal proportions\n // So we can do a ranged binary search based on the range of first element and\n // be confident to get the full range of indices that can intersect with the value.\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n // Default to all elements, when binary search can not be used.\n return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n items.push({element, datasetIndex, index});\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n // Part of the public API to facilitate developers creating their own modes\n evaluateInteractionItems,\n\n // Helper function for different modes\n modes: {\n /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n // Default axis for index mode is 'x' to match old behaviour\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n\n // don't count items that are skipped (null data)\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n\n return elements;\n },\n\n /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n\n return items;\n },\n\n /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n\n /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n\n /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n","import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n\n // dynamically placed boxes size is not considered\n if (!isObject(pos)) {\n if (layout.size) {\n // this layout was already counted for, lets first reduce old size\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n\n // return booleans on the changes per direction\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n // Dimensions changed and there were non full width boxes before this\n // -> we have to refit those\n refit |= same && refitBoxes.length;\n\n // Chart area changed in the opposite direction\n changed = changed || other;\n\n if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n // initialize item with default values\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n // @ts-ignore\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n\n /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n\n /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n\n // Before any changes are made, notify boxes that an update is about to being\n // This is used to clear any cached data (e.g. scale limits)\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n\n // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n // First fit the fullSize boxes, to reduce probability of re-fitting.\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n // Then fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n // Then fit horizontal boxes\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n // if the area changed, re-fit vertical boxes\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n\n // Finally place the boxes to correct coordinates\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n // Move to opposite side of chart\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n\n // Finally update boxes in chartArea (radial scale for example)\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n","\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n releaseContext(context) { // eslint-disable-line no-unused-vars\n return false;\n }\n\n /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n getDevicePixelRatio() {\n return 1;\n }\n\n /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n isAttached(canvas) { // eslint-disable-line no-unused-vars\n return true;\n }\n\n /**\n * Updates config with platform specific requirements\n * @param {import('../core/core.config.js').default} config\n */\n updateConfig(config) { // eslint-disable-line no-unused-vars\n // no-op\n }\n}\n","/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n acquireContext(item) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n","/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n\n // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n\n // Chart.js modifies some canvas values that we want to restore on destroy\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n\n // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n style.display = style.display || 'block';\n // Include possible borders in the size\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\n\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener();\n }\n }, window);\n\n // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n // When its container's display is set to 'none' the callback will be called with a\n // size of (0, 0), which will cause the chart to lose its original height, so skip\n // resizing in such case.\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n // This case can occur if the chart is destroyed while waiting\n // for the throttled function to occur. We prevent crashes by checking\n // for a destroyed chart\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n\n addListener(canvas, type, proxy);\n\n return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n acquireContext(canvas, aspectRatio) {\n // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n if (context && context.canvas === canvas) {\n // Load platform resources on first chart creation, to make it possible to\n // import the library before setting platform options.\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n\n /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n\n // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n canvas.width = canvas.width;\n\n delete canvas[EXPANDO_KEY];\n return true;\n }\n\n /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n addEventListener(chart, type, listener) {\n // Can have only one listener per type, so make sure previous is removed\n this.removeEventListener(chart, type);\n\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n\n\n /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n\n /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n","import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n","import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element {\n\n static defaults = {};\n static defaultRoutes = undefined;\n\n x: number;\n y: number;\n active = false;\n options: O;\n $animations: Record;\n\n tooltipPosition(useFinalPosition: boolean): Point {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y} as Point;\n }\n\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n\n /**\n * Gets the current or final value of each prop. Can return extra properties (whole object).\n * @param props - properties to get\n * @param [final] - get the final value (animation target)\n */\n getProps

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

(props: P[], final?: boolean): Partial>;\n getProps(props: string[], final?: boolean): Partial> {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this as Record;\n }\n const ret: Record = {};\n props.forEach((prop) => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n });\n return ret;\n }\n}\n","import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n\n // If there are too many major ticks to display them all\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n\n // If the major ticks are evenly spaced apart, place the minor ticks\n // so that they divide the major ticks into even chunks\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n","import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n\n // Return undefined if the pixel is out of the range\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n\n return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n /** @type {CanvasTextAlign} */\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n // eslint-disable-next-line max-statements\n constructor(cfg) {\n super();\n\n /** @type {string} */\n this.id = cfg.id;\n /** @type {string} */\n this.type = cfg.type;\n /** @type {any} */\n this.options = undefined;\n /** @type {CanvasRenderingContext2D} */\n this.ctx = cfg.ctx;\n /** @type {Chart} */\n this.chart = cfg.chart;\n\n // implements box\n /** @type {number} */\n this.top = undefined;\n /** @type {number} */\n this.bottom = undefined;\n /** @type {number} */\n this.left = undefined;\n /** @type {number} */\n this.right = undefined;\n /** @type {number} */\n this.width = undefined;\n /** @type {number} */\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n /** @type {number} */\n this.maxWidth = undefined;\n /** @type {number} */\n this.maxHeight = undefined;\n /** @type {number} */\n this.paddingTop = undefined;\n /** @type {number} */\n this.paddingBottom = undefined;\n /** @type {number} */\n this.paddingLeft = undefined;\n /** @type {number} */\n this.paddingRight = undefined;\n\n // scale-specific properties\n /** @type {string=} */\n this.axis = undefined;\n /** @type {number=} */\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n /** @type {Tick[]} */\n this.ticks = [];\n /** @type {object[]|null} */\n this._gridLineItems = null;\n /** @type {object[]|null} */\n this._labelItems = null;\n /** @type {object|null} */\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n /** @type {number} */\n this._startPixel = undefined;\n /** @type {number} */\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n\n /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n init(options) {\n this.options = options.setContext(this.getContext());\n\n this.axis = options.axis;\n\n // parse min/max value, so we can properly determine min/max for other scales\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n\n /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n return raw;\n }\n\n /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isFinite(_userMin),\n maxDefined: isFinite(_userMax)\n };\n }\n\n /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n\n if (minDefined && maxDefined) {\n return {min, max};\n }\n\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n // Make sure min <= max when only min or max is defined by user and the data is outside that range\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n\n /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n\n /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n getTicks() {\n return this.ticks;\n }\n\n /**\n\t * @return {string[]}\n\t */\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n\n /**\n * @return {import('../types.js').LabelItem[]}\n */\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n\n // When a new layout is created, reset the data limits cache\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n\n beforeUpdate() {\n call(this.options.beforeUpdate, [this]);\n }\n\n /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t * This space comes from two sources:\n\t * - padding - space that's required to show the labels at the edges of the scale\n\t * - thickness of scales or legends in another orientation\n\t */\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n\n // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n this.beforeUpdate();\n\n // Absorb the master measurements\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n\n // Dimensions\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n\n // Data min/max\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n\n this.ticks = this.buildTicks() || [];\n\n // Allow modification of ticks in callback.\n this.afterBuildTicks();\n\n // Compute tick rotation and fit using a sampled subset of labels\n // We generally don't need to compute the size of every single label for determining scale size\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n // configure is called twice, once here, once from core.controller.updateLayout.\n // Here we haven't been positioned yet, but dimensions are correct.\n // Variables set in configure are needed for calculateLabelRotation, and\n // it's ok that coordinates are not correct there, only dimensions matter.\n this.configure();\n\n // Tick Rotation\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n this.afterCalculateLabelRotation();\n\n // Auto-skip\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n // Generate labels using all non-skipped ticks\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n this.afterFit();\n\n // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n this.afterUpdate();\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n // by default vertical scales are from bottom to top, so pixels are reversed\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n\n afterUpdate() {\n call(this.options.afterUpdate, [this]);\n }\n\n //\n\n beforeSetDimensions() {\n call(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n if (this.isHorizontal()) {\n // Reset position before calculating rotation\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n\n // Reset position before calculating rotation\n this.top = 0;\n this.bottom = this.height;\n }\n\n // Reset padding\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n call(this.options.afterSetDimensions, [this]);\n }\n\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n call(this.options[name], [this]);\n }\n\n // Data limits\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n\n //\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n /**\n\t * @return {object[]} the ticks\n\t */\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n\n beforeTickToLabelConversion() {\n call(this.options.beforeTickToLabelConversion, [this]);\n }\n /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n call(this.options.afterTickToLabelConversion, [this]);\n }\n\n //\n\n beforeCalculateLabelRotation() {\n call(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n\n // Estimate the width of each grid based on the canvas width, the maximum\n // label width and the number of tick intervals\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n // Allow 3 pixels x2 padding either side for label readability\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n call(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n\n //\n\n beforeFit() {\n call(this.options.beforeFit, [this]);\n }\n fit() {\n // Reset\n const minSize = {\n width: 0,\n height: 0\n };\n\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight; // fill all the height\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n // Don't bother fitting the ticks if we are not showing the labels\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n // A horizontal axis is more constrained by the height.\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n\n // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n // Adjust padding taking into account changes in offsets\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n\n /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n\n afterFit() {\n call(this.options.afterFit, [this]);\n }\n\n // Shared Methods\n /**\n\t * @return {boolean}\n\t */\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n /**\n\t * @return {boolean}\n\t */\n isFullSize() {\n return this.options.fullSize;\n }\n\n /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n\n this.generateTickLabels(ticks);\n\n // Ticks should be skipped when callback returns null or undef, so lets remove those.\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n\n /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n\n return labelSizes;\n }\n\n /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; i += increment) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n // if it is an array let's measure each element\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = /** @type {string} */ (label[j]);\n // Undefined labels and arrays should not be measured\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n\n /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value;\n }\n\n /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n return NaN;\n }\n\n /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n\n /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n\n /**\n\t * @return {number}\n\t */\n getBaseValue() {\n const {min, max} = this;\n\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n\n /**\n\t * @protected\n\t */\n getContext(index) {\n const ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n\n /**\n\t * @return {number}\n\t * @private\n\t */\n _tickSize() {\n const optionTicks = this.options.ticks;\n\n // Calculate space needed by label in axis direction.\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n // Calculate space needed for 1 tick in axis direction.\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n\n /**\n\t * @return {boolean}\n\t * @private\n\t */\n _isVisible() {\n const display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n\n /**\n\t * @private\n\t */\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position, border} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n lineValue = getPixelForGridLine(this, i, offset);\n\n // Skip if the pixel is out of the range\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n\n return items;\n }\n\n /**\n\t * @private\n\t */\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += (lineHeight / 2) * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n let backdrop;\n\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n default:\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n default:\n break;\n }\n\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n\n color: optsAtIndex.backdropColor,\n };\n }\n\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n }\n });\n }\n\n return items;\n }\n\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n let align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n\n let textAlign;\n let x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {textAlign, x};\n }\n\n /**\n\t * @private\n\t */\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n const chart = this.chart;\n const position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n\n /**\n * @protected\n */\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n\n /**\n\t * @protected\n\t */\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {\n const {chart, ctx, options: {border, grid}} = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n const ctx = this.ctx;\n\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n\n const items = this.getLabelItems(chartArea);\n for (const item of items) {\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n\n if (!title.display) {\n return;\n }\n\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n\n /**\n\t * @return {object[]}\n\t * @private\n\t */\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n // backward compatibility: draw has been overridden by custom scale\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: bz,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n\n /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n\n /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n\n /**\n * @protected\n */\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n","import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n\n /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n\n if (isIChartComponent(proto)) {\n // Make sure the parent is registered and note the scope where its defaults are.\n parentScope = this.register(proto);\n }\n\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n // already registered\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n get(id) {\n return this.items[id];\n }\n\n /**\n\t * @param {IChartComponent} item\n\t */\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n // Inherit the parent's defaults and keep existing defaults\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n","import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n // Order is important, Scale has Element in prototype chain,\n // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n /**\n\t * @param {...any} args\n\t */\n add(...args) {\n this._each('register', args);\n }\n\n remove(...args) {\n this._each('unregister', args);\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n\n /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n\n /**\n\t * @param {...typeof DatasetController} args\n\t */\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n\n /**\n\t * @param {...typeof Element} args\n\t */\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n\n /**\n\t * @param {...any} args\n\t */\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n\n /**\n\t * @param {...typeof Scale} args\n\t */\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n\n /**\n\t * @private\n\t */\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n // Handle loopable args\n // Use case:\n // import * as plugins from './plugins.js';\n // Chart.register(plugins);\n each(arg, item => {\n // If there are mixed types in the loopable, make sure those are\n // registered in correct registry\n // Use case: (treemap exporting controller, elements etc)\n // import * as treemap from 'chartjs-chart-treemap.js';\n // Chart.register(treemap);\n\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n\n /**\n\t * @private\n\t */\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n registry[method](component);\n call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n }\n\n /**\n\t * @private\n\t */\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n // plugins is the fallback registry\n return this.plugins;\n }\n\n /**\n\t * @private\n\t */\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n","import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n constructor() {\n this._init = undefined;\n }\n\n /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n\n if (this._init === undefined) { // Do not trigger events before install\n return;\n }\n\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n this._init = undefined; // Do not trigger events after uninstall\n }\n return result;\n }\n\n /**\n\t * @private\n\t */\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callCallback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n\n return true;\n }\n\n invalidate() {\n // When plugins are registered, there is the possibility of a double\n // invalidate situation. In this case, we only want to invalidate once.\n // If we invalidate multiple times, the `_oldCache` is lost and all of the\n // plugins are restarted without being correctly stopped.\n // See https://github.com/chartjs/Chart.js/issues/8147\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n const descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n // options === false => all plugins are disabled\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n\n /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n // make sure plugin defaults are in scopes for local (not registered) plugins\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n // These are just defaults that plugins can override\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n","import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions) {\n const axis = opts.axis\n || axisFromPosition(opts.position)\n || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {axis};\n }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n\n // First figure out first scale id's per axis.\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n\n // Then merge dataset defaults to scale configs\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n\n // apply scale defaults, if not overridden by dataset defaults\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n\n return scales;\n}\n\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n\n initOptions(config);\n\n return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nexport default class Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n get platform() {\n return this._config.platform;\n }\n\n get type() {\n return this._config.type;\n }\n\n set type(type) {\n this._config.type = type;\n }\n\n get data() {\n return this._config.data;\n }\n\n set data(data) {\n this._config.data = initData(data);\n }\n\n get options() {\n return this._config.options;\n }\n\n set options(options) {\n this._config.options = options;\n }\n\n get plugins() {\n return this._config.plugins;\n }\n\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n\n /**\n * Returns the option scope keys for resolving dataset options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @return {string[][]}\n */\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the option scope keys for resolving dataset animation options.\n * These keys do not include the dataset itself, because it is not under options.\n * @param {string} datasetType\n * @param {string} transition\n * @return {string[][]}\n */\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n // The following are used for looking up the `animations` and `animation` keys\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n\n /**\n * Returns the options scope keys for resolving element options that belong\n * to an dataset. These keys do not include the dataset itself, because it\n * is not under options.\n * @param {string} datasetType\n * @param {string} elementType\n * @return {string[][]}\n */\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n\n /**\n * Returns the options scope keys for resolving plugin options.\n * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n * @return {string[][]}\n */\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n\n /**\n * @private\n */\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n\n /**\n * Resolves the objects from options and defaults for option value resolution.\n * @param {object} mainScope - The main scope object for options\n * @param {string[][]} keyLists - The arrays of keys in resolution order\n * @param {boolean} [resetCache] - reset the cache for this mainScope\n */\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n\n const scopes = new Set();\n\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n\n /**\n * Returns the option scopes for resolving chart options\n * @return {object[]}\n */\n chartOptionScopes() {\n const {options, type} = this;\n\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n {type},\n defaults,\n descriptors\n ];\n }\n\n /**\n * @param {object[]} scopes\n * @param {string[]} names\n * @param {function|object} context\n * @param {string[]} [prefixes]\n * @return {object}\n */\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n // subResolver is passed to scriptable options. It should not resolve to hover options.\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n\n /**\n * @param {object[]} scopes\n * @param {object} [context]\n * @param {string[]} [prefixes]\n * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n */\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\n\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).some((key) => isFunction(value[key]));\n\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n","import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea, _isDomSupported, retinaScale, getDatasetClipArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n\n chart.notifyPlugins('afterRender');\n callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\n\nclass Chart {\n\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n\n // eslint-disable-next-line max-statements\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n // Store the previously used aspect ratio to determine if a resize\n // is needed during updates. Do this after _options is set since\n // aspectRatio uses a getter\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n /** @type {?{attach?: function, detach?: function, resize?: function}} */\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n\n // Add the chart instance to the global namespace\n instances[this.id] = this;\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n // If aspectRatio is defined in options, use that.\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n return _aspectRatio;\n }\n\n // Calculate\n return height ? width / height : null;\n }\n\n get data() {\n return this.config.data;\n }\n\n set data(data) {\n this.config.data = data;\n }\n\n get options() {\n return this._options;\n }\n\n set options(options) {\n this.config.options = options;\n }\n\n get registry() {\n return registry;\n }\n\n /**\n\t * @private\n\t */\n _initialize() {\n // Before init plugin notification\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n\n // After init plugin notification\n this.notifyPlugins('afterInit');\n\n return this;\n }\n\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n\n stop() {\n animator.stop(this);\n return this;\n }\n\n /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {size: newSize});\n\n callCallback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n // The resize update is delayed, only draw without updating.\n this.render();\n }\n }\n }\n\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n\n /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n // clear up discarded scales\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n\n /**\n\t * @private\n\t */\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n\n /**\n\t * @private\n\t */\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n return newControllers;\n }\n\n /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n\n /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n\n update(mode) {\n const config = this.config;\n\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n\n // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n // Make sure dataset controllers are updated and new controllers are reset\n const newControllers = this.buildOrUpdateControllers();\n\n this.notifyPlugins('beforeElementsUpdate');\n\n // Make sure all dataset controllers have correct meta data counts\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n // New controllers will be reset after the layout pass, so we only want to modify\n // elements added to new datasets\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n\n // Only reset the controllers if we have animations\n if (!animsDisabled) {\n // Can only reset the new controllers after the scales have been updated\n // Reset is done to get the starting point for the initial animation\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n // Do this before render so that any plugins that need final scale updates can use it\n this.notifyPlugins('afterUpdate', {mode});\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n // Replay last event from before update, or set hover styles on active elements\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n\n /**\n * @private\n */\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n // The configured events have changed. Rebind.\n this.unbindEvents();\n this.bindEvents();\n }\n }\n\n /**\n * @private\n */\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n\n /**\n * @private\n */\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n\n /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n return;\n }\n\n // configure is called twice, once in core.scale.update and once here.\n // Here the boxes are fully updated and at their final positions.\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n\n /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n\n /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n // Unset pending resize request now to avoid possible recursion within _resize\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n\n // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n // currently be part of layers. Instead, we draw\n // layers <= 0 before(default, backward compat), and the rest after\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n // Rest of layers\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n\n /**\n\t * @private\n\t */\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n\n /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n\n /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n\n /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n _drawDataset(meta) {\n const ctx = this.ctx;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n // @ts-expect-error\n const clip = getDatasetClipArea(this, meta);\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (clip) {\n clipArea(ctx, clip);\n }\n\n meta.controller.draw();\n\n if (clip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n\n /**\n * Checks whether the given point is in the chart area.\n * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n * @returns {boolean}\n */\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\t\t\t// See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n\n const meta = this.getDatasetMeta(datasetIndex);\n\n // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n\n /**\n\t * @private\n\t */\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n\n /**\n\t * @private\n\t */\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n\n this._stop();\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n delete instances[this.id];\n\n this.notifyPlugins('afterDestroy');\n }\n\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n\n /**\n\t * @private\n\t */\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n\n /**\n * @private\n */\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n\n each(this.options.events, (type) => _add(type, listener));\n }\n\n /**\n * @private\n */\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n\n let detached; // eslint-disable-line prefer-const\n const attached = () => {\n _remove('attach', attached);\n\n this.attached = true;\n this.resize();\n\n _add('resize', listener);\n _add('detach', detached);\n };\n\n detached = () => {\n this.attached = false;\n\n _remove('resize', listener);\n\n // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n this._stop();\n this._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n\n /**\n\t * @private\n\t */\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n\n /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n // Make sure we don't use the previous mouse event to override the active elements in update.\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n\n /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n\n /**\n * Check if a plugin with the specific ID is registered and enabled\n * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n * @returns {boolean}\n */\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n }\n\n /**\n\t * @private\n\t */\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n\n /**\n\t * @private\n\t */\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n const changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n\n // If the event is replayed from `update`, we should evaluate with the final positions.\n //\n // The `replay`:\n // It's the last event (excluding click) that has occurred before `update`.\n // So mouse has not moved. It's also over the chart, because there is a `replay`.\n //\n // The why:\n // If animations are active, the elements haven't moved yet compared to state before update.\n // But if they will, we are activating the elements that would be active, if this check\n // was done after the animations have completed. => \"final positions\".\n // If there is no animations, the \"final\" and \"current\" positions are equal.\n // This is done so we do not have to evaluate the active elements each animation frame\n // - it would be expensive.\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n // Set _lastEvent to null while we are processing the event handlers.\n // This prevents recursion if the handler calls chart.update()\n this._lastEvent = null;\n\n // Invoke onHover hook\n callCallback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callCallback(options.onClick, [e, active, this], this);\n }\n }\n\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n\n return changed;\n }\n\n /**\n * @param {ChartEvent} e - The event\n * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n * @param {boolean} inChartArea - Is the event inside chartArea\n * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n * @pravate\n */\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n return lastActive;\n }\n\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n","import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _angleDiff, _normalizeAngle, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\nfunction clipSelf(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, x, y, outerRadius, innerRadius, options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.beginPath();\n ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n\n if (innerRadius > 0) {\n const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n } else {\n const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n\n if (borderJoinStyle === 'round') {\n ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n } else if (borderJoinStyle === 'bevel') {\n const r = 2 * clipWidth * clipWidth;\n const endX = -r * Math.cos(endAngle + PI / 2) + x;\n const endY = -r * Math.sin(endAngle + PI / 2) + y;\n const startX = r * Math.cos(startAngle + PI / 2) + x;\n const startY = r * Math.sin(startAngle + PI / 2) + y;\n ctx.lineTo(endX, endY);\n ctx.lineTo(startX, startY);\n }\n }\n ctx.closePath();\n\n ctx.moveTo(0, 0);\n ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n\n ctx.clip('evenodd');\n}\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */\nfunction pathArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n end: number,\n circular: boolean,\n) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n let spacingOffset = 0;\n const alpha = end - start;\n\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n ctx.beginPath();\n\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawBorder(\n ctx: CanvasRenderingContext2D,\n element: ArcElement,\n offset: number,\n spacing: number,\n circular: boolean,\n) {\n const {fullCircles, startAngle, circumference, options} = element;\n const {borderWidth, borderJoinStyle, borderDash, borderDashOffset, borderRadius} = options;\n const inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n clipSelf(ctx, element, endAngle);\n }\n\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\n\nexport interface ArcProps extends Point {\n startAngle: number;\n endAngle: number;\n innerRadius: number;\n outerRadius: number;\n circumference: number;\n}\n\nexport default class ArcElement extends Element {\n\n static id = 'arc';\n\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n selfJoin: false,\n };\n\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash'\n };\n\n circumference: number;\n endAngle: number;\n fullCircles: number;\n innerRadius: number;\n outerRadius: number;\n pixelMargin: number;\n startAngle: number;\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return (betweenAngles && withinRadius);\n }\n\n getCenterPoint(useFinalPosition: boolean) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n\n tooltipPosition(useFinalPosition: boolean) {\n return this.getCenterPoint(useFinalPosition);\n }\n\n draw(ctx: CanvasRenderingContext2D) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n ctx.restore();\n }\n}\n","import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n // eslint-disable-next-line prefer-const\n let {move = true, reverse} = params || {};\n let i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n // Draw line to maxY and minY, using the average x-coordinate\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n // Line to y-value of last point in group. So the line continues\n // from correct position. Not using move, to have solid path.\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n // If there is a skipped point inside a segment, spanGaps must be true\n continue;\n }\n\n const x = point.x;\n const y = point.y;\n const truncX = x | 0; // truncated x-coordinate\n\n if (truncX === prevX) {\n // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n // For first point in group, countX is `0`, so average will be `x` / 1.\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n // Draw line to next x-position, using the first (or only)\n // y-value in that group\n ctx.lineTo(x, y);\n\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n // Keep track of the last y-value in group\n lastY = y;\n }\n drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nexport default class LineElement extends Element {\n\n static id = 'line';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n\n static descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n };\n\n\n constructor(cfg) {\n super();\n\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n\n get points() {\n return this._points;\n }\n\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n\n /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n\n /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n\n /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n\n if (!segments.length) {\n return;\n }\n\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n\n /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n\n /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n\n start = start || 0;\n count = count || (this.points.length - start);\n\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n\n /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n // When line is animated, the control points and path are not cached.\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n","import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n CartesianParsedData,\n ChartArea,\n Point,\n PointHoverOptions,\n PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element {\n\n static id = 'point';\n\n parsed: CartesianParsedData;\n skip?: boolean;\n stop?: boolean;\n\n /**\n * @type {any}\n */\n static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n\n inXRange(mouseX: number, useFinalPosition?: boolean) {\n return inRange(this, mouseX, 'x', useFinalPosition);\n }\n\n inYRange(mouseY: number, useFinalPosition?: boolean) {\n return inRange(this, mouseY, 'y', useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition?: boolean) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n\n size(options?: Partial) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n\n draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n const options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n","import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n let left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n\n // If the value is an object, assume the user knows what they are doing\n // and apply as directed.\n const enableBorder = enableBorderRadius || isObject(value);\n\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nexport default class BarElement extends Element {\n\n static id = 'bar';\n\n /**\n * @type {any}\n */\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n\n /**\n * @type {any}\n */\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n","import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n // Special case for boundary not supporting `segments` (simpleArc)\n // Bounds are provided as `target` for partial circle, or undefined for full circle\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n // Get all segments from `target` that intersect the bounds of current segment of `line`\n const targetSegments = _boundSegments(target, bounds);\n\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n // @ts-ignore\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n","import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n /** @type {string | {value: number}} */\n const fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n let target = parseFloat(fill);\n\n if (isFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n // @ts-ignore\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n let value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n // @ts-ignore\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n","/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n // First point of a segment -> need to add another point before this,\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n // In the middle of a segment, no need to add more points.\n break;\n }\n }\n }\n points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n","import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n","import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n const {chart, fill, line} = source;\n\n if (isFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n const boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n\n if (isFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\n","import {clipArea, unclipArea, getDatasetClipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {chart, index, line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n const meta = chart.getDatasetMeta(index);\n const clip = getDatasetClipArea(chart, meta);\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis, clip});\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale, clip} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n\n ctx.save();\n\n let fillColor = below;\n if (below !== above) {\n if (property === 'x') {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n } else if (property === 'y') {\n clipHorizontal(ctx, target, area.left);\n fill(ctx, {line, target, color: below, scale, property, clip});\n ctx.restore();\n ctx.save();\n clipHorizontal(ctx, target, area.right);\n fillColor = above;\n }\n }\n fill(ctx, {line, target, color: fillColor, scale, property, clip});\n\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction clipHorizontal(ctx, target, clipX) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(clipX, firstPoint.y);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(clipX, lastPoint.y);\n }\n }\n\n ctx.lineTo(clipX, target.first().y);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale, clip} = cfg;\n const segments = _segments(line, target, property);\n\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n\n ctx.save();\n ctx.fillStyle = backgroundColor;\n\n clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n\n ctx.beginPath();\n\n const lineLoop = !!line.pathSegment(ctx, src);\n\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n ctx.restore();\n }\n}\n\nfunction clipBounds(ctx, scale, clip, bounds) {\n const chartArea = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n\n if (property === 'x' || property === 'y') {\n let left, top, right, bottom;\n\n if (property === 'x') {\n left = start;\n top = chartArea.top;\n right = end;\n bottom = chartArea.bottom;\n } else {\n left = chartArea.left;\n top = start;\n right = chartArea.right;\n bottom = end;\n }\n\n ctx.beginPath();\n\n if (clip) {\n left = Math.max(left, clip.left);\n right = Math.min(right, clip.right);\n top = Math.max(top, clip.top);\n bottom = Math.min(bottom, clip.bottom);\n }\n\n ctx.rect(left, top, right - left, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\n","/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n id: 'filler',\n\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n","import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n _isBetween,\n callback as call,\n clipArea,\n getRtlAdapter,\n overrideTextDirection,\n restoreTextDirection,\n toFont,\n toPadding,\n unclipArea,\n valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n constructor(config) {\n super();\n\n this._added = false;\n\n // Contains hit boxes for each dataset (in dataset order)\n this.legendHitBoxes = [];\n\n /**\n \t\t * @private\n \t\t */\n this._hoveredItem = null;\n\n // Are we in doughnut mode which has a different data type\n this.doughnutMode = false;\n\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n\n fit() {\n const {options, ctx} = this;\n\n // The legend may not be displayed for a variety of reasons including\n // the fact that the defaults got set to `false`.\n // When the legend is not displayed, there are no guarantees that the options\n // are correctly formatted so we need to bail out as early as possible.\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n let width, height;\n\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth; // fill all the width\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight; // fill all the height\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n\n /**\n\t * @private\n\t */\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n\n return totalHeight;\n }\n\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n\n let left = 0;\n let col = 0;\n\n this.legendItems.forEach((legendItem, i) => {\n const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n // If too tall, go to new column\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n // Store the hitbox width and height here. Final position will be updated in `draw`\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n // Get max width\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n return totalWidth;\n }\n\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n\n /**\n\t * @private\n\t */\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n\n this.drawTitle();\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n // current position\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n // Set the ctx for the box\n ctx.save();\n\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n\n // Draw pointStyle as legend symbol\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n // Draw box as legend symbol\n // Adjust position when boxHeight < fontSize (want it centered)\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n // Horizontal\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n\n rtlHelper.setWidth(this.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n\n const realX = rtlHelper.x(x);\n\n drawLegendBox(realX, y, legendItem);\n\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n // Fill the actual label\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n\n // These defaults are used when the legend is vertical.\n // When horizontal, they are computed below.\n let left = this.left;\n let maxWidth = this.width;\n\n if (this.isHorizontal()) {\n // Move left / right so that the title is above the legend lines\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n // Move down so that the title is above the legend stack in every alignment\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n // Now that we know the left edge of the inner legend box, compute the correct\n // X coordinate from the title alignment\n const x = _alignStartEnd(position, left, left + maxWidth);\n\n // Canvas setup\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n\n /**\n\t * @private\n\t */\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n\n /**\n\t * @private\n\t */\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n // See if we are touching one of the dataset boxes\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n // Touching an element\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n\n // Chart event already has relative position in it\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n call(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n call(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n call(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n }\n return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\n\nexport default {\n id: 'legend',\n\n /**\n\t * For tests\n\t * @private\n\t */\n _element: Legend,\n\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n\n // During the beforeUpdate step, the layout configuration needs to run\n // This ensures that if the legend position changes (via an option update)\n // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n\n // The labels need to be built after datasets are updated to ensure that colors\n // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n\n\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n\n // a callback that will handle\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n\n onHover: null,\n onLeave: null,\n\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n // Below is extra data used for toggling the datasets\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n","import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n id: 'subtitle',\n\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500 // by default greater than legend (1000) and smaller than title (2000)\n },\n\n defaultRoutes: {\n color: 'color'\n },\n\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n","import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n average(items) {\n if (!items.length) {\n return false;\n }\n\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n\n // No visible items where found, return false so we don't have to divide by 0 which reduces in NaN\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n\n const xAverage = [...xSet].reduce((a, b) => a + b) / xSet.size;\n\n return {\n x: xAverage,\n y: y / count\n };\n },\n\n /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x,\n y\n };\n }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n\n // Count of all lines in the body\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n // Body lines may include some extra height depending on boxHeight\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n\n // Title width\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n\n // Body width\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n // Body lines may include some extra width due to the color box\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n\n // Reset back to 0\n widthPadding = 0;\n\n // Footer width\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n\n ctx.restore();\n\n // Add padding\n width += padding.width;\n\n return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n // eslint-disable-next-line prefer-const\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n // Args are: (tooltipItems, data)\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n\n // Args are: (tooltipItems, data)\n beforeBody: noop,\n\n // Args are: (tooltipItem, data)\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n let label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n\n // Args are: (tooltipItems, data)\n afterBody: noop,\n\n // Args are: (tooltipItems, data)\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n\n return result;\n}\n\nexport class Tooltip extends Element {\n\n /**\n * @namespace Chart.Tooltip.positioners\n */\n static positioners = positioners;\n\n constructor(config) {\n super();\n\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n // and `labelTextColors` to create a single variable\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n\n /**\n\t * @private\n\t */\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n\n /**\n\t * @protected\n\t */\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n\n getTitle(context, options) {\n const {callbacks} = options;\n\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n return lines;\n }\n\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n );\n }\n\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n bodyItems.push(bodyItem);\n });\n\n return bodyItems;\n }\n\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(\n invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n );\n }\n\n // Get the footer and beforeFooter and afterFooter lines\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n return lines;\n }\n\n /**\n\t * @private\n\t */\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n // If the user provided a filter function, use it to modify the tooltip items\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n\n // If the user provided a sorting function, use it to modify the tooltip items\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n\n // Determine colors for boxes\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n\n // Left draws bottom -> top, this y1 is on the bottom\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n\n // Right draws top -> bottom, thus y1 is on the top\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n\n // Top draws left -> right, thus x1 is on the left\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n\n // Bottom draws right -> left, thus x1 is on the right\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.titleAlign, options);\n\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n }\n\n /**\n\t * @private\n\t */\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n\n // Fill the point with white so that colours merge nicely if the opacity is < 1\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n\n // Draw the point\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n // Border\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n // Normal rect\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n // Inner square\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n // restore fillStyle\n ctx.fillStyle = this.labelTextColors[i];\n }\n\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n // Before body lines\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n\n // Draw body lines now\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n\n lines = bodyItem.lines;\n // Draw Legend-like boxes if needed\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n // Reset for any lines that don't include colorbox\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n // Reset back to 0 for after body\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n\n // After body lines\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n }\n\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n\n footerFont = toFont(options.footerFont);\n\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n\n /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n\n /**\n * Determine if the tooltip will draw anything\n * @returns {boolean} True if the tooltip will render\n */\n _willRender() {\n return !!this.opacity;\n }\n\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n\n // IE11/Edge does not like very small opacities, so snap to 0\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n const padding = toPadding(options.padding);\n\n // Truthy/falsey value for empty tooltip\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n\n // Draw Background\n this.drawBackground(pt, ctx, tooltipSize, options);\n\n overrideTextDirection(ctx, options.textDirection);\n\n pt.y += padding.top;\n\n // Titles\n this.drawTitle(pt, ctx, options);\n\n // Body\n this.drawBody(pt, ctx, options);\n\n // Footer\n this.drawFooter(pt, ctx, options);\n\n restoreTextDirection(ctx, options.textDirection);\n\n ctx.restore();\n }\n }\n\n /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n getActiveElements() {\n return this._active || [];\n }\n\n /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n\n /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n // When there are multiple items shown, but the tooltip position is nearest mode\n // an update may need to be made because our position may have changed even though\n // the items are the same as before.\n const positionChanged = this._positionChanged(active, e);\n\n // Remember Last Actives\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n // Only handle target event on tooltip change\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n\n /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n // Let user control the active elements outside chartArea. Eg. using Legend.\n // But make sure that active elements are still valid.\n return lastActive.filter(i =>\n this.chart.data.datasets[i.datasetIndex] &&\n this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined\n );\n }\n\n // Find Active Elements for tooltips\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n\n /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\n\nexport default {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n\n afterEvent(chart, args) {\n if (chart.tooltip) {\n // If the event is replayed from `update`, we should evaluate with the final positions.\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n // notify chart about the change, so it will render\n args.changed = true;\n }\n }\n },\n\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n\n // Resolve additionally from `interaction` options and defaults.\n additionalOptionScopes: ['interaction']\n};\n","import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n static id = 'category';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n\n // If we are viewing some subset of labels, slice the original array\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n super.configure();\n\n if (!this.isHorizontal()) {\n // For backward compatibility, vertical category scale reverse is inverted.\n this._reversePixels = !this._reversePixels;\n }\n }\n\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n // Must override base implementation because it calls getPixelForValue\n // and category scale can have duplicate values\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n\n getBasePixel() {\n return this.bottom;\n }\n}\n","import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n * if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n * Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n * spacing = (max - min) / count\n * Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n * spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n const ticks = [];\n // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n\n // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n // spacing = step;\n // numSpaces = (max - min) / spacing;\n // Note that we round here to handle the case where almostWhole translated an FP error\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n // Sometimes these are no-ops, but it makes the code a lot clearer\n // and when a user defined range is specified, we want the correct ticks\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n // Case 4\n numSpaces = (niceMax - niceMin) / spacing;\n\n // If very close to our rounded value, use it.\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n // until this point\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n\n if (niceMin < min) {\n j++; // Skip niceMin\n }\n // If the next nice tick is close to min, skip it\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({value: tickValue});\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n // If the previous tick is too close to max, replace it with max, else add max\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n /** @type {number} */\n this._endValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n\n getTickLimit() {\n const tickOpts = this.options.ticks;\n // eslint-disable-next-line prefer-const\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n\n /**\n\t * @protected\n\t */\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n\n super.configure();\n\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n","import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n static id = 'linear';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? min : 0;\n this.max = isFinite(max) ? max : 1;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n\n // Utils\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n","import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\n\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while (steps(min, max, rangeExp) > 10) {\n rangeExp++;\n }\n while (steps(min, max, rangeExp) < 10) {\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while (value < max) {\n ticks.push({value, major: isMajor(value), significand});\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n static id = 'logarithmic';\n\n /**\n * @type {any}\n */\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.start = undefined;\n /** @type {number} */\n this.end = undefined;\n /** @type {number} */\n this._startValue = undefined;\n this._valueRange = 0;\n }\n\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isFinite(value) && value > 0 ? value : null;\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n\n this.min = isFinite(min) ? Math.max(0, min) : null;\n this.max = isFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n\n this.handleTickRangeOptions();\n }\n\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n\n if (min === max) {\n if (min <= 0) { // includes null\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n\n setMax(changeExponent(min, +1));\n }\n\n this.min = min;\n this.max = max;\n }\n\n buildTicks() {\n const opts = this.options;\n\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n\n // At this point, we need to update our max and min given the tick values,\n // since we probably have expanded the range of the scale\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n\n /**\n\t * @protected\n\t */\n configure() {\n const start = this.min;\n\n super.configure();\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n","import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n\n // Now that text size is determined, compute the full positions\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const {extra, additionalAngle, padding, size} = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n // if to draw or overlapped\n visible: true,\n\n // Text position\n x: pointLabelPosition.x,\n y,\n\n // Text rendering data\n textAlign,\n\n // Bounding box\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\n\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const {left, top, right, bottom} = item;\n const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const {centerPointLabels, display} = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n\n for (let i = 0; i < valueCount; i++) {\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n const {left, top, right, bottom} = item;\n const {backdropColor} = opts;\n\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n\n for (let i = labelCount - 1; i >= 0; i--) {\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n // overlapping\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign} = item;\n\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n // Draw straight lines connecting each index\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n\n const {color, lineWidth} = gridLineOpts;\n\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n static id = 'radialLinear';\n\n /**\n * @type {any}\n */\n static defaults = {\n display: true,\n\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n\n grid: {\n circular: false\n },\n\n startAngle: 0,\n\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n\n callback: Ticks.formatters.numeric\n },\n\n pointLabels: {\n backdropColor: undefined,\n\n // Number - The backdrop padding above & below the label in pixels\n backdropPadding: 2,\n\n // Boolean - if true, show point labels\n display: true,\n\n // Number - Point label font size in pixels\n font: {\n size: 10\n },\n\n // Function - Used to convert point labels\n callback(label) {\n return label;\n },\n\n // Number - Additionl padding between scale and pointLabel\n padding: 5,\n\n // Boolean - if true, center point labels to slices in polar chart\n centerPointLabels: false\n }\n };\n\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n\n constructor(cfg) {\n super(cfg);\n\n /** @type {number} */\n this.xCenter = undefined;\n /** @type {number} */\n this.yCenter = undefined;\n /** @type {number} */\n this.drawingArea = undefined;\n /** @type {string[]} */\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n\n setDimensions() {\n // Set the unconstrained dimension before label rotation\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n\n this.min = isFinite(min) && !isNaN(min) ? min : 0;\n this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n // Common base implementation to handle min, max, beginAtZero\n this.handleTickRangeOptions();\n }\n\n /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n // Point labels\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n\n fit() {\n const opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n // Take into account half font size + the yPadding of the top value\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n\n /**\n\t * @protected\n\t */\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid, border} = opts;\n const labelCount = this._pointLabels.length;\n\n let i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0 || (index === 0 && this.min < 0)) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n\n /**\n\t * @protected\n\t */\n drawBorder() {}\n\n /**\n\t * @protected\n\t */\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n this.ticks.forEach((tick, index) => {\n if ((index === 0 && this.min >= 0) && !opts.reverse) {\n return;\n }\n\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth,\n });\n });\n\n ctx.restore();\n }\n\n /**\n\t * @protected\n\t */\n drawTitle() {}\n}\n","import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object}\n */\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n // Only parse if it's not a timestamp already\n if (!isFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n /** @type {Object} */\n const map = {};\n const ilen = values.length;\n let i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n\n ticks.push({\n value,\n major: false\n });\n }\n\n // We set the major ticks separately from the above loop because calling startOf for every tick\n // is expensive when there is a large number of ticks\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n static id = 'time';\n\n /**\n * @type {any}\n */\n static defaults = {\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n\n adapters: {},\n time: {\n parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n unit: false, // false == automatic or override with week, month, year, etc.\n round: false, // none, or override with week, month, year, etc.\n isoWeekday: false, // override week start day\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n\n callback: false,\n\n major: {\n enabled: false\n }\n }\n };\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {{data: number[], labels: number[], all: number[]}} */\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n\n /** @type {Unit} */\n this._unit = 'day';\n /** @type {Unit=} */\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n /** @type {DateAdapter} */\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n adapter.init(opts);\n\n // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n mergeIf(time.displayFormats, adapter.formats());\n\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n super.init(scaleOpts);\n\n this._normalized = opts.normalized;\n }\n\n /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n parse(raw, index) { // eslint-disable-line no-unused-vars\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n // eslint-disable-next-line prefer-const\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n /**\n\t\t * @param {object} bounds\n\t\t */\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n // If we have user provided `min` and `max` labels / data bounds can be ignored\n if (!minDefined || !maxDefined) {\n // Labels are always considered, when user did not force bounds\n _applyBounds(this._getLabelBounds());\n\n // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n // data bounds are ignored (and don't need to be determined)\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n\n /**\n\t * @private\n\t */\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n\n /**\n\t * @return {object[]}\n\t */\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n const min = this.min;\n const max = this.max;\n\n const ticks = _filterBetween(timestamps, min, max);\n\n // PRIVATE\n // determineUnitForFormatting relies on the number of ticks so we don't use it when\n // autoSkip is enabled because we don't yet know what the final number of ticks will be\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n\n afterAutoSkip() {\n // Offsets for bar charts need to be handled with the auto skipped\n // ticks. Once ticks have been skipped, we re-compute the offsets.\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n\n /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n\n /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n // @ts-ignore\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n\n // For 'week' unit, handle the first day of week option\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n // Align first ticks on unit\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n // Prevent browser from freezing in case user options request millions of milliseconds\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n // @ts-ignore\n return Object.keys(ticks).sort(sorter).map(x => +x);\n }\n\n /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n\n /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n\n /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n\n if (formatter) {\n return call(formatter, [time, index, ticks], this);\n }\n\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n\n /**\n\t * @param {object[]} ticks\n\t */\n generateTickLabels(ticks) {\n let i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n\n /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n\n /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n\n // pick the longest format (milliseconds) for guesstimation\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n // subtract 1 - if offset then there's one less label than tick\n // if not offset then one half label padding is added to each end leaving room for one less label\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n\n /**\n\t * @protected\n\t */\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return (this._cache.data = this.normalize(timestamps));\n }\n\n /**\n\t * @protected\n\t */\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n\n /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n normalize(values) {\n // It seems to be somewhat faster to do sorting first\n return _arrayUnique(values.sort(sorter));\n }\n}\n","import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n static id = 'timeseries';\n\n /**\n * @type {any}\n */\n static defaults = TimeScale.defaults;\n\n /**\n\t * @param {object} props\n\t */\n constructor(props) {\n super(props);\n\n /** @type {object[]} */\n this._table = [];\n /** @type {number} */\n this._minPos = undefined;\n /** @type {number} */\n this._tableRange = undefined;\n }\n\n /**\n\t * @protected\n\t */\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n\n /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n // only add points that breaks the scale linearity\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n\n /**\n * Generates all timestamps defined in the data.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n * @protected\n */\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b) => a - b);\n }\n\n /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n // If combining labels and data (data might not contain all labels),\n // we need to recheck uniqueness and sort\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n\n return timestamps;\n }\n\n /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n\n /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nexport default TimeSeriesScale;\n","import type { PropType } from 'vue'\nimport type {\n ChartType,\n ChartData,\n ChartOptions,\n Plugin,\n UpdateMode\n} from 'chart.js'\n\nexport const CommonProps = {\n data: {\n type: Object as PropType,\n required: true\n },\n options: {\n type: Object as PropType,\n default: () => ({})\n },\n plugins: {\n type: Array as PropType,\n default: () => []\n },\n datasetIdKey: {\n type: String,\n default: 'label'\n },\n updateMode: {\n type: String as PropType,\n default: undefined\n }\n} as const\n\nexport const A11yProps = {\n ariaLabel: {\n type: String\n },\n ariaDescribedby: {\n type: String\n }\n} as const\n\nexport const Props = {\n type: {\n type: String as PropType,\n required: true\n },\n destroyDelay: {\n type: Number,\n default: 0 // No delay by default\n },\n ...CommonProps,\n ...A11yProps\n} as const\n","import { isProxy, toRaw, version } from 'vue'\nimport type {\n Chart,\n ChartType,\n ChartData,\n ChartDataset,\n ChartOptions,\n DefaultDataPoint\n} from 'chart.js'\n\nexport const compatProps =\n version[0] === '2'\n ? (internals: I, props: T) =>\n Object.assign(internals, { attrs: props }) as unknown as I & T\n : (internals: I, props: T) =>\n Object.assign(internals, props)\n\nexport function toRawIfProxy(obj: T) {\n return isProxy(obj) ? toRaw(obj) : obj\n}\n\nexport function cloneProxy(obj: T, src = obj) {\n return isProxy(src) ? new Proxy(obj, {}) : obj\n}\n\nexport function setOptions<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(chart: Chart, nextOptions: ChartOptions) {\n const options = chart.options\n\n if (options && nextOptions) {\n Object.assign(options, nextOptions)\n }\n}\n\nexport function setLabels<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextLabels: TLabel[] | undefined\n) {\n currentData.labels = nextLabels\n}\n\nexport function setDatasets<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n currentData: ChartData,\n nextDatasets: ChartDataset[],\n datasetIdKey: string\n) {\n const addedDatasets: ChartDataset[] = []\n\n currentData.datasets = nextDatasets.map(\n (nextDataset: Record) => {\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find(\n (dataset: Record) =>\n dataset[datasetIdKey] === nextDataset[datasetIdKey]\n )\n\n // There is no original to update, so simply add new one\n if (\n !currentDataset ||\n !nextDataset.data ||\n addedDatasets.includes(currentDataset)\n ) {\n return { ...nextDataset } as ChartDataset\n }\n\n addedDatasets.push(currentDataset)\n\n Object.assign(currentDataset, nextDataset)\n\n return currentDataset\n }\n )\n}\n\nexport function cloneData<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(data: ChartData, datasetIdKey: string) {\n const nextData: ChartData = {\n labels: [],\n datasets: []\n }\n\n setLabels(nextData, data.labels)\n setDatasets(nextData, data.datasets, datasetIdKey)\n\n return nextData\n}\n\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getDatasetAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'dataset',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'nearest',\n { intersect: true },\n false\n )\n}\n\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */\nexport function getElementsAtEvent(chart: Chart, event: MouseEvent) {\n return chart.getElementsAtEventForMode(\n event,\n 'index',\n { intersect: true },\n false\n )\n}\n","import { Chart as ChartJS } from 'chart.js'\nimport {\n defineComponent,\n h,\n nextTick,\n onUnmounted,\n onMounted,\n ref,\n shallowRef,\n toRaw,\n watch\n} from 'vue'\n\nimport type { ChartComponent } from './types.js'\nimport { Props } from './props.js'\nimport {\n cloneData,\n setLabels,\n setDatasets,\n setOptions,\n toRawIfProxy,\n cloneProxy\n} from './utils.js'\n\nexport const Chart = defineComponent({\n props: Props,\n setup(props, { expose, slots }) {\n const canvasRef = ref(null)\n const chartRef = shallowRef(null)\n\n expose({ chart: chartRef })\n\n const renderChart = () => {\n if (!canvasRef.value) return\n\n const { type, data, options, plugins, datasetIdKey } = props\n const clonedData = cloneData(data, datasetIdKey)\n const proxiedData = cloneProxy(clonedData, data)\n\n chartRef.value = new ChartJS(canvasRef.value, {\n type,\n data: proxiedData,\n options: { ...options },\n plugins\n })\n }\n\n const destroyChart = () => {\n const chart = toRaw(chartRef.value)\n\n if (chart) {\n if (props.destroyDelay > 0) {\n setTimeout(() => {\n chart.destroy()\n chartRef.value = null\n }, props.destroyDelay)\n } else {\n chart.destroy()\n chartRef.value = null\n }\n }\n }\n\n const update = (chart: ChartJS) => {\n chart.update(props.updateMode)\n }\n\n onMounted(renderChart)\n\n onUnmounted(destroyChart)\n\n watch(\n [() => props.options, () => props.data],\n (\n [nextOptionsProxy, nextDataProxy],\n [prevOptionsProxy, prevDataProxy]\n ) => {\n const chart = toRaw(chartRef.value)\n\n if (!chart) {\n return\n }\n\n let shouldUpdate = false\n\n if (nextOptionsProxy) {\n const nextOptions = toRawIfProxy(nextOptionsProxy)\n const prevOptions = toRawIfProxy(prevOptionsProxy)\n\n if (nextOptions && nextOptions !== prevOptions) {\n setOptions(chart, nextOptions)\n shouldUpdate = true\n }\n }\n\n if (nextDataProxy) {\n const nextLabels = toRawIfProxy(nextDataProxy.labels)\n const prevLabels = toRawIfProxy(prevDataProxy.labels)\n const nextDatasets = toRawIfProxy(nextDataProxy.datasets)\n const prevDatasets = toRawIfProxy(prevDataProxy.datasets)\n\n if (nextLabels !== prevLabels) {\n setLabels(chart.config.data, nextLabels)\n shouldUpdate = true\n }\n\n if (nextDatasets && nextDatasets !== prevDatasets) {\n setDatasets(chart.config.data, nextDatasets, props.datasetIdKey)\n shouldUpdate = true\n }\n }\n\n if (shouldUpdate) {\n nextTick(() => {\n update(chart)\n })\n }\n },\n { deep: true }\n )\n\n return () => {\n return h(\n 'canvas',\n {\n role: 'img',\n 'aria-label': props.ariaLabel,\n 'aria-describedby': props.ariaDescribedby,\n ref: canvasRef\n },\n [h('p', {}, [slots.default ? slots.default() : ''])]\n )\n }\n }\n}) as ChartComponent\n","import { defineComponent, shallowRef, h } from 'vue'\nimport type { ChartType, ChartComponentLike, DefaultDataPoint } from 'chart.js'\nimport {\n Chart as ChartJS,\n BarController,\n BubbleController,\n DoughnutController,\n LineController,\n PieController,\n PolarAreaController,\n RadarController,\n ScatterController\n} from 'chart.js'\nimport type { DistributiveArray } from 'chart.js/dist/types/utils'\nimport type { TypedChartComponent, ChartComponentRef } from './types.js'\nimport { CommonProps } from './props.js'\nimport { Chart } from './chart.js'\nimport { compatProps } from './utils.js'\n\nexport function createTypedChart<\n TType extends ChartType = ChartType,\n TData = DefaultDataPoint,\n TLabel = unknown\n>(\n type: TType,\n registerables: ChartComponentLike\n): TypedChartComponent {\n ChartJS.register(registerables)\n\n return defineComponent({\n props: CommonProps,\n setup(props, { expose }) {\n const ref = shallowRef(null)\n const reforwardRef = (chartRef: ChartComponentRef) => {\n ref.value = chartRef?.chart\n }\n\n expose({ chart: ref })\n\n return () => {\n return h(\n Chart,\n compatProps(\n {\n ref: reforwardRef as any\n },\n {\n type,\n ...props\n }\n )\n )\n }\n }\n }) as any\n}\n\nexport interface ExtendedDataPoint {\n [key: string]: string | number | null | ExtendedDataPoint\n}\n\nexport const Bar = /* #__PURE__ */ createTypedChart<\n 'bar',\n DefaultDataPoint<'bar'> | DistributiveArray\n>('bar', BarController)\n\nexport const Doughnut = /* #__PURE__ */ createTypedChart(\n 'doughnut',\n DoughnutController\n)\n\nexport const Line = /* #__PURE__ */ createTypedChart('line', LineController)\n\nexport const Pie = /* #__PURE__ */ createTypedChart('pie', PieController)\n\nexport const PolarArea = /* #__PURE__ */ createTypedChart(\n 'polarArea',\n PolarAreaController\n)\n\nexport const Radar = /* #__PURE__ */ createTypedChart('radar', RadarController)\n\nexport const Bubble = /* #__PURE__ */ createTypedChart(\n 'bubble',\n BubbleController\n)\n\nexport const Scatter = /* #__PURE__ */ createTypedChart(\n 'scatter',\n ScatterController\n)\n","/**\r\n * BatchProcessor - 批量数据处理类\r\n * \r\n * 处理批量数据获取和处理的核心类,使用 cursor 分页机制获取所有数据。\r\n * 支持进度回调和取消功能。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\n\r\n/**\r\n * 批量操作错误类\r\n * 提供错误代码、是否可恢复、建议操作等信息\r\n */\r\nexport class BatchOperationError extends Error {\r\n constructor(message, code, recoverable = false, suggestion = '') {\r\n super(message);\r\n this.name = 'BatchOperationError';\r\n this.code = code;\r\n this.recoverable = recoverable;\r\n this.suggestion = suggestion;\r\n }\r\n}\r\n\r\n/**\r\n * 错误处理器映射\r\n * 根据 HTTP 状态码返回对应的错误对象\r\n */\r\nconst ERROR_HANDLERS = {\r\n 401: () => new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n ),\r\n 403: () => new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n ),\r\n 400: (details) => new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n ),\r\n 500: () => new BatchOperationError(\r\n '服务器内部错误',\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试,如果问题持续请联系管理员'\r\n ),\r\n NETWORK: () => new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n ),\r\n ABORT: () => new BatchOperationError(\r\n '操作已取消',\r\n 'ABORTED',\r\n false,\r\n ''\r\n )\r\n};\r\n\r\n/**\r\n * 根据错误创建 BatchOperationError\r\n * @param {Error|Response} error - 原始错误或响应对象\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\nfunction createError(error, details = '') {\r\n // 处理取消操作\r\n if (error.name === 'AbortError') {\r\n return ERROR_HANDLERS.ABORT();\r\n }\r\n \r\n // 处理 HTTP 响应错误\r\n if (error instanceof Response || (error && typeof error.status === 'number')) {\r\n const handler = ERROR_HANDLERS[error.status];\r\n if (handler) {\r\n return handler(details);\r\n }\r\n return new BatchOperationError(\r\n `请求失败: ${error.status}`,\r\n 'HTTP_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n \r\n // 处理网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n return ERROR_HANDLERS.NETWORK();\r\n }\r\n \r\n // 其他错误\r\n return new BatchOperationError(\r\n error.message || '未知错误',\r\n 'UNKNOWN_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n}\r\n\r\n/**\r\n * BatchProcessor 类\r\n * \r\n * 用于批量获取和处理数据的核心类\r\n */\r\nclass BatchProcessor {\r\n /**\r\n * 创建 BatchProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.batchSize - 每批数据量,默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.batchSize = options.batchSize || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.abortController = null;\r\n }\r\n\r\n /**\r\n * 获取所有数据记录\r\n * 使用 cursor 分页机制循环获取所有数据,直到没有更多数据或操作被取消\r\n * \r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 所有记录的数组\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async fetchAllRecords(includeValue = false) {\r\n // 创建新的 AbortController 用于取消操作\r\n this.abortController = new AbortController();\r\n const allRecords = [];\r\n let cursor = null;\r\n let totalFetched = 0;\r\n let batchCount = 0;\r\n\r\n try {\r\n do {\r\n // 检查是否已取消\r\n if (this.abortController.signal.aborted) {\r\n break;\r\n }\r\n\r\n // 获取一批数据\r\n const response = await this.fetchBatch(cursor, includeValue);\r\n \r\n // 合并数据到总数组\r\n allRecords.push(...response.records);\r\n cursor = response.nextCursor;\r\n totalFetched += response.records.length;\r\n batchCount++;\r\n\r\n // 调用进度回调\r\n this.onProgress({\r\n phase: 'fetching',\r\n current: totalFetched,\r\n batchCount: batchCount,\r\n message: `已获取 ${totalFetched} 条记录...`\r\n });\r\n\r\n } while (cursor && !this.abortController.signal.aborted);\r\n\r\n // 如果是因为取消而退出循环,抛出取消错误\r\n if (this.abortController.signal.aborted) {\r\n throw ERROR_HANDLERS.ABORT();\r\n }\r\n\r\n return allRecords;\r\n } catch (error) {\r\n // 调用错误回调\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : createError(error);\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 获取单批数据\r\n * \r\n * @param {string|null} cursor - 分页游标,首次请求为 null\r\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\r\n * @returns {Promise} 包含 records 和 nextCursor 的响应对象\r\n * @throws {BatchOperationError} 当请求失败时抛出\r\n */\r\n async fetchBatch(cursor, includeValue) {\r\n // 构建查询参数\r\n const params = new URLSearchParams();\r\n if (cursor) {\r\n params.set('cursor', cursor);\r\n }\r\n if (includeValue) {\r\n params.set('includeValue', 'true');\r\n }\r\n params.set('limit', String(this.batchSize));\r\n\r\n try {\r\n // 发送请求,传入 abort signal 支持取消\r\n const response = await fetchWithAuth(\r\n `/api/manage/batch/list?${params}`,\r\n { signal: this.abortController.signal }\r\n );\r\n\r\n // 检查响应状态\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw createError(response, errorDetails);\r\n }\r\n\r\n // 解析响应数据\r\n const data = await response.json();\r\n \r\n // 验证响应格式\r\n if (!data.success) {\r\n throw new BatchOperationError(\r\n data.error || '请求失败',\r\n 'API_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return {\r\n records: data.records || [],\r\n nextCursor: data.nextCursor || null,\r\n totalProcessed: data.totalProcessed || 0\r\n };\r\n } catch (error) {\r\n // 如果已经是 BatchOperationError,直接抛出\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 否则转换为 BatchOperationError\r\n throw createError(error);\r\n }\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n * 调用此方法将中止正在进行的 fetch 请求\r\n */\r\n abort() {\r\n if (this.abortController) {\r\n this.abortController.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.abortController ? this.abortController.signal.aborted : false;\r\n }\r\n\r\n /**\r\n * 重置处理器状态\r\n * 在开始新的批量操作前调用\r\n */\r\n reset() {\r\n this.abortController = null;\r\n }\r\n}\r\n\r\nexport default BatchProcessor;\r\n","/**\r\n * IndexRebuilder - 索引重建类\r\n * \r\n * 处理索引重建的完整流程,包括数据获取、排序、分块上传和完成。\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport BatchProcessor, { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * IndexRebuilder 类\r\n * \r\n * 用于重建索引的核心类,协调数据获取、排序和分块上传\r\n */\r\nclass IndexRebuilder {\r\n /**\r\n * 创建 IndexRebuilder 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每个分块的记录数,默认从后端获取\r\n * @param {number} options.maxRetries - 分块上传最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || null; // 从后端获取\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.sessionId = this.generateSessionId();\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 从后端获取索引配置(分块大小等)\r\n * @returns {Promise} 配置对象 { chunkSize, databaseType }\r\n */\r\n async fetchConfig() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/config');\r\n if (!response.ok) {\r\n throw new Error('获取配置失败');\r\n }\r\n const result = await response.json();\r\n if (result.success) {\r\n return {\r\n chunkSize: result.chunkSize || 500,\r\n databaseType: result.databaseType || 'unknown'\r\n };\r\n }\r\n throw new Error(result.error || '获取配置失败');\r\n } catch (error) {\r\n // 获取失败时使用保守的默认值(兼容 D1)\r\n console.warn('Failed to fetch index config, using default:', error);\r\n return { chunkSize: 500, databaseType: 'unknown' };\r\n }\r\n }\r\n\r\n /**\r\n * 执行索引重建\r\n * \r\n * 完整流程:\r\n * 1. 获取配置(分块大小)\r\n * 2. 获取所有记录\r\n * 3. 按时间戳降序排序\r\n * 4. 分块上传\r\n * 5. 完成重建\r\n * \r\n * @returns {Promise} 重建结果 { success: boolean, totalFiles: number }\r\n * @throws {BatchOperationError} 当发生错误时抛出\r\n */\r\n async rebuild() {\r\n this.aborted = false;\r\n \r\n try {\r\n // 获取配置(分块大小)\r\n if (!this.chunkSize) {\r\n const config = await this.fetchConfig();\r\n this.chunkSize = config.chunkSize;\r\n }\r\n\r\n // 获取所有记录\r\n this.onProgress({ \r\n phase: 'fetching', \r\n message: '正在获取数据...',\r\n current: 0\r\n });\r\n \r\n const processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' }),\r\n onError: (e) => this.onError(e)\r\n });\r\n \r\n const records = await processor.fetchAllRecords(false);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 排序(按时间戳降序)\r\n this.onProgress({ \r\n phase: 'sorting', \r\n message: '正在排序...',\r\n current: 0,\r\n total: records.length\r\n });\r\n \r\n this.sortByTimestampDescending(records);\r\n \r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n // 分块上传\r\n const chunks = this.splitIntoChunks(records);\r\n \r\n for (let i = 0; i < chunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n \r\n // 使用重试机制上传分块\r\n await this.uploadChunkWithRetry(chunks[i], i);\r\n \r\n this.onProgress({\r\n phase: 'uploading',\r\n current: i + 1,\r\n total: chunks.length,\r\n message: `正在上传分块 ${i + 1}/${chunks.length}...`\r\n });\r\n }\r\n\r\n // 完成重建\r\n this.onProgress({ \r\n phase: 'finalizing', \r\n message: '正在完成重建...',\r\n current: chunks.length,\r\n total: chunks.length\r\n });\r\n \r\n await this.finalize(chunks.length, records.length);\r\n\r\n this.onProgress({\r\n phase: 'completed',\r\n message: `索引重建完成,共 ${records.length} 个文件`,\r\n current: records.length,\r\n total: records.length\r\n });\r\n\r\n return { success: true, totalFiles: records.length };\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError \r\n ? error \r\n : new BatchOperationError(\r\n error.message || '索引重建失败',\r\n 'REBUILD_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 按时间戳降序排序记录\r\n * \r\n * @param {Array} records - 要排序的记录数组(原地排序)\r\n */\r\n sortByTimestampDescending(records) {\r\n records.sort((a, b) => {\r\n const timestampA = (a.metadata && a.metadata.TimeStamp) || 0;\r\n const timestampB = (b.metadata && b.metadata.TimeStamp) || 0;\r\n return timestampB - timestampA;\r\n });\r\n }\r\n\r\n /**\r\n * 将记录分割为多个块\r\n * \r\n * @param {Array} records - 要分割的记录数组\r\n * @returns {Array} 分块后的二维数组\r\n */\r\n splitIntoChunks(records) {\r\n const chunks = [];\r\n for (let i = 0; i < records.length; i += this.chunkSize) {\r\n chunks.push(records.slice(i, i + this.chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当所有重试都失败时抛出\r\n */\r\n async uploadChunkWithRetry(chunk, chunkId) {\r\n let lastError;\r\n \r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(chunk, chunkId);\r\n } catch (error) {\r\n lastError = error;\r\n \r\n // 不重试的错误类型\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' || \r\n error.code === 'FORBIDDEN' || \r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n \r\n // 如果还有重试机会,等待后重试\r\n if (attempt < this.maxRetries) {\r\n // 指数退避\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n \r\n this.onProgress({\r\n phase: 'retrying',\r\n message: `分块 ${chunkId + 1} 上传失败,正在重试 (${attempt}/${this.maxRetries})...`,\r\n current: chunkId,\r\n attempt: attempt\r\n });\r\n }\r\n }\r\n }\r\n \r\n // 所有重试都失败\r\n throw lastError instanceof BatchOperationError \r\n ? lastError \r\n : new BatchOperationError(\r\n `分块 ${chunkId + 1} 上传失败,已重试 ${this.maxRetries} 次`,\r\n 'CHUNK_UPLOAD_FAILED',\r\n false,\r\n '请检查网络连接后重新开始重建'\r\n );\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n * \r\n * @param {Array} chunk - 要上传的分块数据\r\n * @param {number} chunkId - 分块 ID\r\n * @returns {Promise} 上传响应\r\n * @throws {BatchOperationError} 当上传失败时抛出\r\n */\r\n async uploadChunk(chunk, chunkId) {\r\n const checksum = await this.calculateChecksum(chunk);\r\n \r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n chunkId: String(chunkId),\r\n sessionId: this.sessionId,\r\n data: chunk,\r\n checksum\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n // 网络错误\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '分块上传失败',\r\n 'CHUNK_UPLOAD_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 完成索引重建\r\n * \r\n * @param {number} totalChunks - 总分块数\r\n * @param {number} totalFiles - 总文件数\r\n * @returns {Promise} 完成响应\r\n * @throws {BatchOperationError} 当完成请求失败时抛出\r\n */\r\n async finalize(totalChunks, totalFiles) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/index/finalize', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n sessionId: this.sessionId,\r\n totalChunks,\r\n totalFiles\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n \r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n throw new BatchOperationError(\r\n error.message || '索引完成失败',\r\n 'FINALIZE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 生成唯一的会话 ID\r\n * \r\n * @returns {string} 会话 ID\r\n */\r\n generateSessionId() {\r\n return `rebuild_${Date.now()}_${Math.random().toString(36).slice(2)}`;\r\n }\r\n\r\n /**\r\n * 计算数据的 SHA-256 校验和\r\n * \r\n * @param {Array} data - 要计算校验和的数据\r\n * @returns {Promise} 十六进制格式的校验和\r\n */\r\n async calculateChecksum(data) {\r\n const text = JSON.stringify(data);\r\n const encoder = new TextEncoder();\r\n const dataBuffer = encoder.encode(text);\r\n\r\n // crypto.subtle 仅在安全上下文(HTTPS / localhost)下可用\r\n // 通过 0.0.0.0 等非安全上下文访问时需要 fallback\r\n if (typeof crypto !== 'undefined' && crypto.subtle) {\r\n const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\r\n }\r\n\r\n // Fallback: 简单但足够用于校验的哈希实现 (FNV-1a 变体, 产生 64 位十六进制)\r\n let h1 = 0x811c9dc5 >>> 0;\r\n let h2 = 0x811c9dc5 >>> 0;\r\n for (let i = 0; i < dataBuffer.length; i++) {\r\n h1 = Math.imul(h1 ^ dataBuffer[i], 0x01000193) >>> 0;\r\n h2 = Math.imul(h2 ^ dataBuffer[i], 0x01000193 + 0x10) >>> 0;\r\n }\r\n return h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0');\r\n }\r\n\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n * \r\n * @param {number} status - HTTP 状态码\r\n * @param {string} details - 错误详情\r\n * @returns {BatchOperationError}\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查数据格式后重试'\r\n );\r\n case 404:\r\n return new BatchOperationError(\r\n '会话不存在',\r\n 'SESSION_NOT_FOUND',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 410:\r\n return new BatchOperationError(\r\n '会话已过期',\r\n 'SESSION_EXPIRED',\r\n false,\r\n '请重新开始索引重建'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n * \r\n * @param {number} ms - 延迟毫秒数\r\n * @returns {Promise}\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n\r\n /**\r\n * 重置重建器状态\r\n * 在开始新的重建操作前调用\r\n */\r\n reset() {\r\n this.aborted = false;\r\n this.sessionId = this.generateSessionId();\r\n }\r\n}\r\n\r\nexport default IndexRebuilder;\r\n","/**\r\n * BackupGenerator - 备份数据生成类\r\n * \r\n * 处理前端辅助备份功能,获取所有文件记录(包含分块文件的 value),\r\n * 构建完整的备份 JSON 文件,并触发浏览器下载。\r\n */\r\n\r\nimport BatchProcessor from '@/utils/batchProcessor';\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport packageInfo from '../../package.json'\r\n\r\n/**\r\n * BackupGenerator 类\r\n * \r\n * 用于生成和下载备份数据的类\r\n */\r\nclass BackupGenerator {\r\n /**\r\n * 创建 BackupGenerator 实例\r\n * @param {Object} options - 配置选项\r\n * @param {Function} options.onProgress - 进度回调函数\r\n */\r\n constructor(options = {}) {\r\n this.onProgress = options.onProgress || (() => {});\r\n this.processor = null;\r\n }\r\n\r\n /**\r\n * 生成并下载备份\r\n * \r\n * 完整流程:\r\n * 1. 获取所有文件记录(包含分块文件的 value)\r\n * 2. 构建备份数据结构\r\n * 3. 获取系统设置\r\n * 4. 生成并触发下载\r\n * \r\n * @returns {Promise} 包含 success 和 fileCount 的结果对象\r\n * @throws {Error} 当备份过程中发生错误时抛出\r\n */\r\n async generateBackup() {\r\n // 获取所有文件记录(包含分块文件的 value)\r\n this.processor = new BatchProcessor({\r\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' })\r\n });\r\n\r\n const records = await this.processor.fetchAllRecords(true);\r\n\r\n // 构建备份数据\r\n this.onProgress({ phase: 'building', message: '正在构建备份数据...' });\r\n\r\n const backupData = {\r\n timestamp: Date.now(),\r\n version: packageInfo.version,\r\n data: {\r\n fileCount: records.length,\r\n files: {},\r\n settings: {}\r\n }\r\n };\r\n\r\n // 将记录转换为以 id 为键的对象格式\r\n for (const record of records) {\r\n backupData.data.files[record.id] = {\r\n metadata: record.metadata,\r\n value: record.value || null\r\n };\r\n }\r\n\r\n // 3. 获取系统设置\r\n const settings = await this.fetchSettings();\r\n backupData.data.settings = settings;\r\n\r\n // 生成下载\r\n this.onProgress({ phase: 'downloading', message: '正在生成下载...' });\r\n this.downloadBackup(backupData);\r\n\r\n const settingsCount = Object.keys(settings).length;\r\n return { success: true, fileCount: records.length, settingsCount };\r\n }\r\n\r\n /**\r\n * 获取系统设置\r\n * \r\n * @returns {Promise} 系统设置对象,失败时返回空对象\r\n */\r\n async fetchSettings() {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/settings');\r\n if (!response.ok) {\r\n console.warn('Failed to fetch settings:', response.status);\r\n return {};\r\n }\r\n const data = await response.json();\r\n // 返回 settings 字段,而不是整个响应\r\n return data.settings || {};\r\n } catch (error) {\r\n console.warn('Failed to fetch settings:', error);\r\n return {};\r\n }\r\n }\r\n\r\n /**\r\n * 触发浏览器下载备份文件\r\n * \r\n * @param {Object} data - 备份数据对象\r\n */\r\n downloadBackup(data) {\r\n // 将数据转换为格式化的 JSON 字符串\r\n const json = JSON.stringify(data, null, 2);\r\n \r\n // 创建 Blob 对象\r\n const blob = new Blob([json], { type: 'application/json' });\r\n \r\n // 创建下载 URL\r\n const url = URL.createObjectURL(blob);\r\n\r\n // 创建临时下载链接\r\n const a = document.createElement('a');\r\n a.href = url;\r\n // 使用日期作为文件名的一部分\r\n a.download = `imgbed_backup_${new Date().toISOString().split('T')[0]}.json`;\r\n \r\n // 触发下载\r\n document.body.appendChild(a);\r\n a.click();\r\n \r\n // 清理\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n /**\r\n * 取消当前备份操作\r\n */\r\n abort() {\r\n if (this.processor) {\r\n this.processor.abort();\r\n }\r\n }\r\n\r\n /**\r\n * 检查操作是否已被取消\r\n * @returns {boolean}\r\n */\r\n isAborted() {\r\n return this.processor ? this.processor.isAborted() : false;\r\n }\r\n}\r\n\r\nexport default BackupGenerator;\r\n","/**\r\n * RestoreProcessor - 分批恢复数据类\r\n * \r\n * 将备份数据分批上传到后端进行恢复,避免 CPU 超时\r\n */\r\n\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { BatchOperationError } from '@/utils/batchProcessor';\r\n\r\n/**\r\n * RestoreProcessor 类\r\n */\r\nclass RestoreProcessor {\r\n /**\r\n * 创建 RestoreProcessor 实例\r\n * @param {Object} options - 配置选项\r\n * @param {number} options.chunkSize - 每批数据量,默认 50\r\n * @param {number} options.maxRetries - 最大重试次数,默认 3\r\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\r\n * @param {Function} options.onProgress - 进度回调函数\r\n * @param {Function} options.onError - 错误回调函数\r\n */\r\n constructor(options = {}) {\r\n this.chunkSize = options.chunkSize || 50;\r\n this.maxRetries = options.maxRetries || 3;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.onProgress = options.onProgress || (() => {});\r\n this.onError = options.onError || (() => {});\r\n this.aborted = false;\r\n }\r\n\r\n /**\r\n * 执行恢复操作\r\n * \r\n * @param {Object} backupData - 备份数据对象\r\n * @returns {Promise} 恢复结果\r\n */\r\n async restore(backupData) {\r\n this.aborted = false;\r\n\r\n // 验证备份数据格式\r\n if (!backupData || !backupData.data) {\r\n throw new BatchOperationError(\r\n '备份文件格式无效',\r\n 'INVALID_BACKUP',\r\n false,\r\n '请选择有效的备份文件'\r\n );\r\n }\r\n\r\n const { files = {}, settings = {} } = backupData.data;\r\n const fileEntries = Object.entries(files);\r\n const settingEntries = Object.entries(settings);\r\n \r\n const totalFiles = fileEntries.length;\r\n const totalSettings = settingEntries.length;\r\n const totalItems = totalFiles + totalSettings;\r\n\r\n let restoredFiles = 0;\r\n let restoredSettings = 0;\r\n let failedFiles = 0;\r\n let failedSettings = 0;\r\n\r\n try {\r\n // 1. 分批恢复文件数据\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: '正在恢复文件数据...',\r\n current: 0,\r\n total: totalItems\r\n });\r\n\r\n const fileChunks = this.splitIntoChunks(fileEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < fileChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = fileChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('files', chunkData);\r\n restoredFiles += result.restoredCount;\r\n failedFiles += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_files',\r\n message: `正在恢复文件数据 ${restoredFiles}/${totalFiles}...`,\r\n current: restoredFiles,\r\n total: totalItems,\r\n percentage: (restoredFiles / totalItems) * 80\r\n });\r\n }\r\n\r\n // 2. 分批恢复系统设置\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: '正在恢复系统设置...',\r\n current: restoredFiles,\r\n total: totalItems\r\n });\r\n\r\n const settingChunks = this.splitIntoChunks(settingEntries, this.chunkSize);\r\n \r\n for (let i = 0; i < settingChunks.length; i++) {\r\n if (this.aborted) {\r\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\r\n }\r\n\r\n const chunk = settingChunks[i];\r\n const chunkData = Object.fromEntries(chunk);\r\n \r\n const result = await this.uploadChunkWithRetry('settings', chunkData);\r\n restoredSettings += result.restoredCount;\r\n failedSettings += result.failedCount;\r\n\r\n this.onProgress({\r\n phase: 'restoring_settings',\r\n message: `正在恢复系统设置 ${restoredSettings}/${totalSettings}...`,\r\n current: restoredFiles + restoredSettings,\r\n total: totalItems,\r\n percentage: 80 + (restoredSettings / totalSettings) * 20\r\n });\r\n }\r\n\r\n // 3. 完成\r\n this.onProgress({\r\n phase: 'completed',\r\n message: '恢复完成',\r\n current: totalItems,\r\n total: totalItems,\r\n percentage: 100\r\n });\r\n\r\n return {\r\n success: true,\r\n restoredFiles,\r\n restoredSettings,\r\n failedFiles,\r\n failedSettings,\r\n backupTimestamp: backupData.timestamp\r\n };\r\n\r\n } catch (error) {\r\n const batchError = error instanceof BatchOperationError\r\n ? error\r\n : new BatchOperationError(\r\n error.message || '恢复失败',\r\n 'RESTORE_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n this.onError(batchError);\r\n throw batchError;\r\n }\r\n }\r\n\r\n /**\r\n * 将数组分割为多个块\r\n */\r\n splitIntoChunks(entries, chunkSize) {\r\n const chunks = [];\r\n for (let i = 0; i < entries.length; i += chunkSize) {\r\n chunks.push(entries.slice(i, i + chunkSize));\r\n }\r\n return chunks;\r\n }\r\n\r\n /**\r\n * 带重试机制的分块上传\r\n */\r\n async uploadChunkWithRetry(type, data) {\r\n let lastError;\r\n\r\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await this.uploadChunk(type, data);\r\n } catch (error) {\r\n lastError = error;\r\n\r\n if (error instanceof BatchOperationError) {\r\n if (error.code === 'AUTH_FAILED' ||\r\n error.code === 'FORBIDDEN' ||\r\n error.code === 'ABORTED') {\r\n throw error;\r\n }\r\n }\r\n\r\n if (attempt < this.maxRetries) {\r\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\r\n await this.sleep(delay);\r\n }\r\n }\r\n }\r\n\r\n throw lastError;\r\n }\r\n\r\n /**\r\n * 上传单个分块\r\n */\r\n async uploadChunk(type, data) {\r\n try {\r\n const response = await fetchWithAuth('/api/manage/batch/restore/chunk', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ type, data })\r\n });\r\n\r\n if (!response.ok) {\r\n let errorDetails = '';\r\n try {\r\n const errorData = await response.json();\r\n errorDetails = errorData.error || '';\r\n } catch {\r\n // 忽略 JSON 解析错误\r\n }\r\n throw this.createHttpError(response.status, errorDetails);\r\n }\r\n\r\n const result = await response.json();\r\n\r\n if (!result.success) {\r\n throw new BatchOperationError(\r\n result.error || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n if (error instanceof BatchOperationError) {\r\n throw error;\r\n }\r\n if (error instanceof TypeError && error.message.includes('fetch')) {\r\n throw new BatchOperationError(\r\n '网络连接失败',\r\n 'NETWORK_ERROR',\r\n true,\r\n '请检查网络连接后重试'\r\n );\r\n }\r\n throw new BatchOperationError(\r\n error.message || '恢复分块失败',\r\n 'CHUNK_RESTORE_FAILED',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 根据 HTTP 状态码创建错误对象\r\n */\r\n createHttpError(status, details = '') {\r\n switch (status) {\r\n case 401:\r\n return new BatchOperationError(\r\n '认证失败,请重新登录',\r\n 'AUTH_FAILED',\r\n false,\r\n '请刷新页面并重新登录'\r\n );\r\n case 403:\r\n return new BatchOperationError(\r\n '权限不足或请求被拒绝',\r\n 'FORBIDDEN',\r\n false,\r\n '请确认您有管理员权限'\r\n );\r\n case 400:\r\n return new BatchOperationError(\r\n `请求数据无效: ${details}`,\r\n 'INVALID_DATA',\r\n true,\r\n '请检查备份文件格式'\r\n );\r\n case 500:\r\n default:\r\n return new BatchOperationError(\r\n `服务器错误: ${details || status}`,\r\n 'SERVER_ERROR',\r\n true,\r\n '请稍后重试'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 延迟执行\r\n */\r\n sleep(ms) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * 取消当前操作\r\n */\r\n abort() {\r\n this.aborted = true;\r\n }\r\n}\r\n\r\nexport default RestoreProcessor;\r\n","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nimport \"core-js/modules/web.url-search-params.delete.js\";\nimport \"core-js/modules/web.url-search-params.has.js\";\nimport \"core-js/modules/web.url-search-params.size.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport packageInfo from '../../../package.json';\nimport { Doughnut, Line } from 'vue-chartjs';\nimport { Chart as ChartJS, ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler } from 'chart.js';\nimport IndexRebuilder from '@/utils/indexRebuilder';\nimport BackupGenerator from '@/utils/backupGenerator';\nimport RestoreProcessor from '@/utils/restoreProcessor';\nimport DateRangeCalendar from '@/components/DateRangeCalendar.vue';\nChartJS.register(ArcElement, Tooltip, Legend, CategoryScale, LinearScale, PointElement, LineElement, Filler);\nconst DAY_MS = 24 * 60 * 60 * 1000;\nfunction padDatePart(value) {\n return String(value).padStart(2, '0');\n}\nfunction formatDateInput(date) {\n return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;\n}\nfunction getDefaultTrendDateRange() {\n const endDate = new Date();\n endDate.setHours(0, 0, 0, 0);\n const startDate = new Date(endDate.getTime() - 6 * DAY_MS);\n return [formatDateInput(startDate), formatDateInput(endDate)];\n}\nexport default {\n name: 'SysCogStatus',\n components: {\n Doughnut,\n Line,\n DateRangeCalendar\n },\n data() {\n return {\n loading: false,\n rebuilding: false,\n backing: false,\n restoring: false,\n indexInfo: {},\n version: packageInfo.version,\n // 从package.json获取版本号\n loadErrors: {\n newest: false,\n oldest: false\n },\n trendGroupBy: 'channel',\n trendDatePickerVisible: false,\n trendDateRange: getDefaultTrendDateRange(),\n // 渠道图表颜色\n channelColors: ['#8B5CF6', '#EC4899', '#06B6D4', '#10B981', '#F59E0B', '#EF4444', '#6366F1', '#84CC16'],\n // 状态图表颜色\n typeColors: ['#10B981', '#3B82F6', '#F59E0B', '#EF4444', '#8B5CF6', '#EC4899', '#06B6D4', '#84CC16'],\n // 上传趋势折线图颜色\n trendColors: ['#2563EB', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6', '#06B6D4', '#EC4899', '#84CC16', '#64748B'],\n // 批量操作进度状态\n isProcessing: false,\n processingPhase: '',\n // fetching, sorting, uploading, finalizing, building, downloading, completed\n processingProgress: {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n },\n processingError: null,\n processingStartTime: null,\n // 当前处理器实例(用于取消操作)\n currentRebuilder: null,\n currentBackupGenerator: null,\n currentRestoreProcessor: null\n };\n },\n computed: {\n // 渠道分布图表数据\n channelChartData() {\n const stats = this.indexInfo.channelStats || {};\n return {\n labels: Object.keys(stats),\n datasets: [{\n data: Object.values(stats),\n backgroundColor: this.channelColors.slice(0, Object.keys(stats).length),\n borderWidth: 0\n }]\n };\n },\n // 文件状态图表数据 - 将Block映射为\"已屏蔽\",其余为\"正常\"\n typeChartData() {\n const aggregatedStats = this.aggregatedTypeStats;\n return {\n labels: Object.keys(aggregatedStats),\n datasets: [{\n data: Object.values(aggregatedStats),\n backgroundColor: this.typeColors.slice(0, Object.keys(aggregatedStats).length),\n borderWidth: 0\n }]\n };\n },\n // 聚合后的状态统计:Block -> 已屏蔽,其余 -> 正常\n aggregatedTypeStats() {\n const stats = this.indexInfo.typeStats || {};\n const aggregatedStats = {};\n for (const [status, count] of Object.entries(stats)) {\n const mappedStatus = status === 'Block' ? this.$t('sysStatus.blocked') : this.$t('sysStatus.normalStatus');\n aggregatedStats[mappedStatus] = (aggregatedStats[mappedStatus] || 0) + count;\n }\n return aggregatedStats;\n },\n // 当前趋势维度数据\n currentTrendGroup() {\n const trend = this.indexInfo.uploadTrend || {};\n const groupBy = trend.groupBy || {};\n return groupBy[this.trendGroupBy] || {\n series: []\n };\n },\n // 趋势图原始日期标签\n trendRawLabels() {\n const trend = this.indexInfo.uploadTrend || {};\n return trend.labels || [];\n },\n // 当前范围是否跨年\n trendRangeCrossesYear() {\n const years = new Set();\n this.trendRawLabels.forEach(label => {\n this.extractTrendLabelDates(label).forEach(date => years.add(date.year));\n });\n return years.size > 1;\n },\n // 用于横轴展示的短日期标签\n trendDisplayLabels() {\n return this.trendRawLabels.map(label => this.formatTrendAxisLabel(label));\n },\n // 是否存在趋势图数据\n hasTrendData() {\n const trend = this.indexInfo.uploadTrend || {};\n return (trend.labels || []).length > 0;\n },\n // 日期选择弹窗宽度保持与项目内其他弹窗一致\n trendDateDialogWidth() {\n return window.innerWidth > 768 ? '420px' : '90%';\n },\n // 上传趋势折线图数据\n uploadTrendChartData() {\n const trend = this.indexInfo.uploadTrend || {};\n const series = this.currentTrendGroup.series || [];\n const totalColor = '#F97316';\n return {\n labels: this.trendDisplayLabels,\n datasets: [{\n label: this.$t('sysStatus.totalUploads'),\n data: trend.total || [],\n borderColor: totalColor,\n backgroundColor: this.hexToRgba(totalColor, 0.1),\n pointBackgroundColor: totalColor,\n pointBorderColor: totalColor,\n borderWidth: 3,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.28,\n fill: false\n }, ...series.map((item, index) => {\n const color = this.getTrendColor(index);\n return {\n label: this.formatTrendSeriesName(item),\n data: item.data || [],\n borderColor: color,\n backgroundColor: this.hexToRgba(color, 0.12),\n pointBackgroundColor: color,\n pointBorderColor: color,\n borderWidth: 2,\n pointRadius: 2,\n pointHoverRadius: 5,\n tension: 0.32,\n fill: false\n };\n })]\n };\n },\n // 折线图配置\n lineChartOptions() {\n const textColor = '#64748B';\n return {\n responsive: true,\n maintainAspectRatio: false,\n interaction: {\n mode: 'index',\n intersect: false\n },\n plugins: {\n legend: {\n display: true,\n position: 'bottom',\n labels: {\n usePointStyle: true,\n boxWidth: 8,\n boxHeight: 8,\n padding: 16,\n color: textColor\n }\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n callbacks: {\n title: items => {\n const index = items?.[0]?.dataIndex;\n return this.trendRawLabels[index] || '';\n },\n label: context => {\n const parsed = context.parsed || {};\n const value = parsed.y !== undefined ? parsed.y : context.raw;\n return ` ${context.dataset.label}: ${Number(value || 0).toLocaleString()} ${this.$t('sysStatus.uploadsUnit')}`;\n }\n }\n }\n },\n scales: {\n x: {\n grid: {\n display: false\n },\n ticks: {\n color: textColor,\n maxTicksLimit: 8,\n autoSkip: true\n }\n },\n y: {\n beginAtZero: true,\n grid: {\n color: 'rgba(148, 163, 184, 0.18)'\n },\n ticks: {\n color: textColor,\n precision: 0,\n callback: value => Number(value).toLocaleString()\n }\n }\n }\n };\n },\n // 图表配置\n chartOptions() {\n return {\n responsive: true,\n maintainAspectRatio: true,\n cutout: '65%',\n hoverOffset: 8,\n layout: {\n padding: 10\n },\n plugins: {\n legend: {\n display: false\n },\n tooltip: {\n backgroundColor: 'rgba(0, 0, 0, 0.8)',\n titleColor: '#fff',\n bodyColor: '#fff',\n padding: 12,\n cornerRadius: 8,\n displayColors: true,\n z: 100,\n callbacks: {\n label: context => {\n const value = context.raw;\n const total = context.dataset.data.reduce((a, b) => a + b, 0);\n const percentage = (value / total * 100).toFixed(1);\n return ` ${value.toLocaleString()} (${percentage}%)`;\n }\n }\n }\n },\n animation: {\n animateRotate: true,\n animateScale: true\n }\n };\n },\n // 预计剩余时间\n estimatedTimeRemaining() {\n if (!this.isProcessing || !this.processingStartTime) return '';\n if (this.processingProgress.current === 0 || this.processingProgress.percentage === 0) return '';\n const elapsed = Date.now() - this.processingStartTime;\n const progress = this.processingProgress.percentage / 100;\n if (progress <= 0) return '';\n const totalEstimated = elapsed / progress;\n const remaining = totalEstimated - elapsed;\n if (remaining <= 0) return this.$t('sysStatus.aboutToComplete');\n const seconds = Math.ceil(remaining / 1000);\n if (seconds < 60) return this.$t('sysStatus.seconds', {\n count: seconds\n });\n const minutes = Math.ceil(seconds / 60);\n if (minutes < 60) return this.$t('sysStatus.minutes', {\n count: minutes\n });\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return this.$t('sysStatus.hoursMinutes', {\n hours,\n minutes: remainingMinutes\n });\n },\n // 处理阶段描述\n phaseDescription() {\n const phaseMap = {\n 'fetching': this.$t('sysStatus.phaseFetching'),\n 'sorting': this.$t('sysStatus.phaseSorting'),\n 'uploading': this.$t('sysStatus.phaseUploading'),\n 'finalizing': this.$t('sysStatus.phaseFinalizing'),\n 'building': this.$t('sysStatus.phaseBuilding'),\n 'downloading': this.$t('sysStatus.phaseDownloading'),\n 'restoring_files': this.$t('sysStatus.phaseRestoringFiles'),\n 'restoring_settings': this.$t('sysStatus.phaseRestoringSettings'),\n 'completed': this.$t('sysStatus.phaseCompleted'),\n 'retrying': this.$t('sysStatus.phaseRetrying')\n };\n return phaseMap[this.processingPhase] || this.processingPhase;\n }\n },\n mounted() {\n this.fetchIndexInfo();\n },\n methods: {\n // 获取渠道图表颜色\n getChartColor(index) {\n return this.channelColors[index % this.channelColors.length];\n },\n // 获取状态图表颜色\n getTypeChartColor(index) {\n return this.typeColors[index % this.typeColors.length];\n },\n // 获取趋势图表颜色\n getTrendColor(index) {\n return this.trendColors[index % this.trendColors.length];\n },\n // 格式化趋势序列名称\n formatTrendSeriesName(series) {\n if (series?.isOther || series?.name === '__other__') {\n return this.$t('sysStatus.otherChannels');\n }\n return series?.name || this.$t('sysStatus.unknown');\n },\n // 十六进制颜色转换为 rgba\n hexToRgba(hex, alpha) {\n const normalized = (hex || '').replace('#', '');\n if (normalized.length !== 6) {\n return `rgba(37, 99, 235, ${alpha})`;\n }\n const r = parseInt(normalized.slice(0, 2), 16);\n const g = parseInt(normalized.slice(2, 4), 16);\n const b = parseInt(normalized.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n },\n // 提取趋势标签中的日期\n extractTrendLabelDates(label) {\n const matches = String(label || '').match(/\\d{4}-\\d{2}-\\d{2}/g) || [];\n return matches.map(item => {\n const [year, month, day] = item.split('-').map(Number);\n return {\n year,\n month,\n day\n };\n });\n },\n // 横轴日期标签按范围简化,仅跨年时显示年份\n formatTrendAxisLabel(label) {\n const dates = this.extractTrendLabelDates(label);\n if (dates.length === 0) return label;\n const formatSingleDate = (date, includeYear) => {\n const monthDay = `${date.month}/${date.day}`;\n return includeYear ? `${date.year}/${monthDay}` : monthDay;\n };\n if (dates.length === 1) {\n return formatSingleDate(dates[0], this.trendRangeCrossesYear);\n }\n const [startDate, endDate] = dates;\n if (!this.trendRangeCrossesYear) {\n return `${formatSingleDate(startDate, false)}-${formatSingleDate(endDate, false)}`;\n }\n const endLabel = startDate.year === endDate.year ? formatSingleDate(endDate, false) : formatSingleDate(endDate, true);\n return `${formatSingleDate(startDate, true)}-${endLabel}`;\n },\n // 打开居中的日期范围选择弹窗\n openTrendDateDialog() {\n this.trendDatePickerVisible = true;\n },\n // 日期范围变更后重新拉取趋势数据\n handleTrendDateRangeChange(value) {\n if (!Array.isArray(value) || value.length !== 2 || !value[0] || !value[1]) {\n return;\n }\n this.trendDatePickerVisible = false;\n this.fetchIndexInfo();\n },\n // 获取趋势查询参数\n getTrendDateRangeParams() {\n if (!Array.isArray(this.trendDateRange) || this.trendDateRange.length !== 2) {\n this.trendDateRange = getDefaultTrendDateRange();\n }\n return {\n startDate: this.trendDateRange[0],\n endDate: this.trendDateRange[1]\n };\n },\n // 获取索引信息\n async fetchIndexInfo() {\n this.loading = true;\n try {\n const {\n startDate,\n endDate\n } = this.getTrendDateRangeParams();\n const params = new URLSearchParams({\n action: 'info',\n timezoneOffset: String(new Date().getTimezoneOffset()),\n trendMaxPoints: '90',\n trendSeriesLimit: '8',\n trendStartDate: startDate,\n trendEndDate: endDate\n });\n const response = await fetchWithAuth(`/api/manage/list?${params.toString()}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.indexInfo = data;\n } else {\n throw new Error('API请求失败');\n }\n } catch (error) {\n console.error('获取索引信息失败:', error);\n this.$message.error(this.$t('sysStatus.fetchIndexFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 重建索引 - 使用前端辅助重建流程\n async rebuildIndex() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.rebuilding = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 IndexRebuilder 实例\n this.currentRebuilder = new IndexRebuilder({\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n try {\n const result = await this.currentRebuilder.rebuild();\n\n // 成功完成\n this.$message.success(this.$t('sysStatus.rebuildSuccess', {\n count: result.totalFiles.toLocaleString()\n }));\n\n // 刷新索引信息\n setTimeout(() => {\n this.fetchIndexInfo();\n }, 1000);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.rebuilding = false;\n this.isProcessing = false;\n this.currentRebuilder = null;\n this.processingStartTime = null;\n }\n },\n // 备份数据 - 使用前端辅助备份流程\n async backupData() {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.backing = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n\n // 创建 BackupGenerator 实例\n this.currentBackupGenerator = new BackupGenerator({\n onProgress: progress => this.handleProgress(progress)\n });\n try {\n const result = await this.currentBackupGenerator.generateBackup();\n\n // 成功完成\n const settingsMsg = result.settingsCount > 0 ? this.$t('sysStatus.backupSuccessWithSettings', {\n fileCount: result.fileCount.toLocaleString(),\n settingsCount: result.settingsCount\n }) : this.$t('sysStatus.backupSuccess', {\n count: result.fileCount.toLocaleString()\n });\n this.$message.success(settingsMsg);\n } catch (error) {\n // 错误处理\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n } finally {\n this.backing = false;\n this.isProcessing = false;\n this.currentBackupGenerator = null;\n this.processingStartTime = null;\n }\n },\n // 选择恢复文件\n selectRestoreFile() {\n if (this.restoring) return;\n this.$refs.fileInput.click();\n },\n // 处理文件选择\n async handleFileSelect(event) {\n const file = event.target.files[0];\n if (!file) return;\n if (!file.name.endsWith('.json')) {\n this.$message.error(this.$t('sysStatus.selectJsonFile'));\n return;\n }\n\n // 确认恢复操作\n try {\n await this.$confirm(this.$t('sysStatus.restoreConfirmMessage'), this.$t('sysStatus.restoreConfirmTitle'), {\n confirmButtonText: this.$t('sysStatus.restoreConfirmOk'),\n cancelButtonText: this.$t('sysStatus.restoreConfirmCancel'),\n type: 'warning'\n });\n await this.restoreData(file);\n } catch (error) {\n if (error !== 'cancel') {\n console.error('确认恢复失败:', error);\n }\n }\n\n // 清除文件选择\n event.target.value = '';\n },\n // 恢复数据 - 使用前端辅助分批恢复流程\n async restoreData(file) {\n if (this.isProcessing) {\n this.$message.warning(this.$t('sysStatus.operationInProgress'));\n return;\n }\n this.restoring = true;\n this.isProcessing = true;\n this.processingError = null;\n this.processingStartTime = Date.now();\n this.processingProgress = {\n current: 0,\n total: 0,\n message: '',\n percentage: 0\n };\n try {\n // 解析备份文件\n const fileContent = await file.text();\n let backupData;\n try {\n backupData = JSON.parse(fileContent);\n } catch (parseError) {\n throw new Error(this.$t('sysStatus.invalidBackupFile'));\n }\n\n // 创建 RestoreProcessor 实例\n this.currentRestoreProcessor = new RestoreProcessor({\n chunkSize: 100,\n // 每批恢复 100 条\n onProgress: progress => this.handleProgress(progress),\n onError: error => this.handleError(error)\n });\n const result = await this.currentRestoreProcessor.restore(backupData);\n\n // 恢复完成,重置恢复状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n\n // 显示恢复成功消息\n this.$message.success(this.$t('sysStatus.restoreSuccess', {\n files: result.restoredFiles,\n settings: result.restoredSettings\n }));\n\n // 短暂延迟后自动开始重建索引\n await new Promise(resolve => setTimeout(resolve, 500));\n await this.rebuildIndex();\n } catch (error) {\n console.error('恢复数据失败:', error);\n\n // 出错时重置状态\n this.restoring = false;\n this.isProcessing = false;\n this.currentRestoreProcessor = null;\n this.processingStartTime = null;\n if (error.code !== 'ABORTED') {\n const errorMessage = error.suggestion ? `${error.message}。${error.suggestion}` : error.message;\n this.$message.error(this.$t('sysStatus.restoreFailed') + ': ' + errorMessage);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n }\n }\n },\n // 格式化时间\n formatTime(timestamp) {\n if (!timestamp) return this.$t('sysStatus.unknown');\n const date = new Date(timestamp);\n return date.toLocaleString('zh-CN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n });\n },\n // 计算百分比\n getPercentage(value, total) {\n if (!total || total === 0) return 0;\n return Math.round(value / total * 100);\n },\n // 计算时间差\n getTimeAgo(timestamp) {\n if (!timestamp) return '';\n const now = Date.now();\n const diff = now - timestamp;\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n if (days > 0) return this.$t('sysStatus.daysAgo', {\n count: days\n });\n if (hours > 0) return this.$t('sysStatus.hoursAgo', {\n count: hours\n });\n if (minutes > 0) return this.$t('sysStatus.minutesAgo', {\n count: minutes\n });\n return this.$t('sysStatus.justNow');\n },\n // 图片加载失败处理\n handleImageError(type) {\n this.loadErrors[type] = true;\n },\n // 检查是否应该显示预览图\n isValidPreview(type, file) {\n if (this.loadErrors[type]) return false;\n if (!file?.metadata?.FileType) return false;\n return file.metadata.FileType.includes('image') || file.metadata.FileType.includes('video');\n },\n // 打开发布页面\n openReleases() {\n window.open('https://github.com/MarSeventh/CloudFlare-ImgBed/releases', '_blank');\n },\n // 判断是否为图片文件\n isImageFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('image')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'avif', 'heic', 'heif'];\n return imageExtensions.includes(extension);\n },\n // 判断是否为视频文件\n isVideoFile(file) {\n if (!file) return false;\n // 优先通过 FileType 判断\n if (file.metadata?.FileType?.includes('video')) return true;\n // 通过文件名后缀判断\n const fileName = file.metadata?.FileName || file.id || '';\n const extension = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'm4v', '3gp', 'mpeg', 'mpg'];\n return videoExtensions.includes(extension);\n },\n // 在新窗口打开文件\n openFileInNewTab(file) {\n if (!file?.id) return;\n window.open('/file/' + file.id + '?from=admin', '_blank');\n },\n // 处理进度更新\n handleProgress(progress) {\n this.processingPhase = progress.phase;\n this.processingProgress.message = progress.message || '';\n this.processingProgress.current = progress.current || 0;\n\n // 根据不同阶段计算进度百分比\n if (progress.phase === 'fetching') {\n // 获取阶段:基于已获取的记录数估算(假设总数未知时显示已获取数量)\n this.processingProgress.total = progress.total || 0;\n // 获取阶段占总进度的 60%\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = Math.min(60, progress.current / progress.total * 60);\n } else {\n // 未知总数时,使用对数增长模拟进度\n this.processingProgress.percentage = Math.min(50, Math.log10(progress.current + 1) * 15);\n }\n } else if (progress.phase === 'sorting') {\n // 排序阶段:占 60-70%\n this.processingProgress.percentage = 65;\n this.processingProgress.total = progress.total || this.processingProgress.total;\n } else if (progress.phase === 'uploading') {\n // 上传阶段:占 70-95%\n this.processingProgress.total = progress.total || 0;\n if (progress.total && progress.total > 0) {\n this.processingProgress.percentage = 70 + progress.current / progress.total * 25;\n }\n } else if (progress.phase === 'finalizing') {\n // 完成阶段:95-100%\n this.processingProgress.percentage = 97;\n } else if (progress.phase === 'building') {\n // 构建备份阶段:70-90%\n this.processingProgress.percentage = 80;\n } else if (progress.phase === 'downloading') {\n // 下载阶段:90-100%\n this.processingProgress.percentage = 95;\n } else if (progress.phase === 'restoring_files') {\n // 恢复文件阶段:0-80%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 0;\n } else if (progress.phase === 'restoring_settings') {\n // 恢复设置阶段:80-100%\n this.processingProgress.total = progress.total || 0;\n this.processingProgress.percentage = progress.percentage || 80;\n } else if (progress.phase === 'completed') {\n // 完成\n this.processingProgress.percentage = 100;\n } else if (progress.phase === 'retrying') {\n // 重试阶段:保持当前进度\n this.processingProgress.message = progress.message;\n }\n },\n // 处理错误\n handleError(error) {\n console.error('批量操作错误:', error);\n this.processingError = {\n message: error.message,\n suggestion: error.suggestion,\n recoverable: error.recoverable\n };\n },\n // 取消当前操作\n cancelOperation() {\n if (this.currentRebuilder) {\n this.currentRebuilder.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentBackupGenerator) {\n this.currentBackupGenerator.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n if (this.currentRestoreProcessor) {\n this.currentRestoreProcessor.abort();\n this.$message.info(this.$t('sysStatus.cancellingRebuild'));\n }\n },\n // 重试操作\n retryOperation() {\n this.processingError = null;\n if (this.rebuilding) {\n this.rebuilding = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.rebuildIndex();\n });\n } else if (this.backing) {\n this.backing = false;\n this.isProcessing = false;\n this.$nextTick(() => {\n this.backupData();\n });\n }\n },\n // 关闭错误提示\n dismissError() {\n this.processingError = null;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogStatus.vue?vue&type=template&id=90d03e30&scoped=true\"\nimport script from \"./SysCogStatus.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogStatus.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogStatus.vue?vue&type=style&index=0&id=90d03e30&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-90d03e30\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, createBlock as _createBlock, createCommentVNode as _createCommentVNode, vShow as _vShow, withModifiers as _withModifiers, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"custom-select\", {\n 'is-open': $data.isOpen\n }]),\n style: _normalizeStyle({\n width: $props.width\n })\n }, [_createElementVNode(\"div\", {\n class: \"custom-select-trigger\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleDropdown && $options.toggleDropdown(...args))\n }, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-select-value\", {\n 'is-placeholder': !$props.modelValue\n }])\n }, _toDisplayString($options.displayLabel), 3), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"custom-select-arrow\"\n })]), _createVNode(_Transition, {\n name: \"dropdown-fade\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: \"custom-select-dropdown\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.options, option => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: option.value,\n class: _normalizeClass([\"custom-select-option\", {\n 'is-selected': $props.modelValue === option.value\n }]),\n onClick: $event => $options.selectOption(option.value)\n }, [_renderSlot(_ctx.$slots, \"option\", {\n option: option\n }, () => [option.channelType ? (_openBlock(), _createBlock(_component_ChannelIcon, {\n key: 0,\n type: option.channelType,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"type\", \"class\"])) : option.icon ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: option.icon,\n class: _normalizeClass(['option-icon', option.iconClass])\n }, null, 8, [\"icon\", \"class\"])) : _createCommentVNode(\"\", true), _createElementVNode(\"span\", null, _toDisplayString(option.label), 1)], true)], 10, _hoisted_1);\n }), 128))], 512), [[_vShow, $data.isOpen]])]),\n _: 3\n })], 6);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'CustomSelect',\n components: {\n ChannelIcon\n },\n props: {\n modelValue: {\n type: [String, Number],\n default: ''\n },\n options: {\n type: Array,\n required: true\n // 格式: [{ value: '', label: '', icon?: '', iconClass?: '', channelType?: '' }]\n },\n placeholder: {\n type: String,\n default: ''\n },\n width: {\n type: String,\n default: '160px'\n }\n },\n emits: ['update:modelValue', 'change'],\n data() {\n return {\n isOpen: false\n };\n },\n computed: {\n resolvedPlaceholder() {\n return this.placeholder || this.$t('common.select');\n },\n displayLabel() {\n const selected = this.options.find(opt => opt.value === this.modelValue);\n return selected ? selected.label : this.resolvedPlaceholder;\n }\n },\n mounted() {\n document.addEventListener('click', this.handleClickOutside);\n },\n beforeUnmount() {\n document.removeEventListener('click', this.handleClickOutside);\n },\n methods: {\n toggleDropdown() {\n this.isOpen = !this.isOpen;\n },\n selectOption(value) {\n this.$emit('update:modelValue', value);\n this.$emit('change', value);\n this.isOpen = false;\n },\n handleClickOutside(e) {\n if (!this.$el.contains(e.target)) {\n this.isOpen = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./CustomSelect.vue?vue&type=template&id=3c680cc7&scoped=true\"\nimport script from \"./CustomSelect.vue?vue&type=script&lang=js\"\nexport * from \"./CustomSelect.vue?vue&type=script&lang=js\"\n\nimport \"./CustomSelect.vue?vue&type=style&index=0&id=3c680cc7&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-3c680cc7\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withModifiers as _withModifiers, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-settings\"\n};\nconst _hoisted_2 = {\n class: \"page-header\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"header-actions\"\n};\nconst _hoisted_5 = {\n class: \"group-header\"\n};\nconst _hoisted_6 = {\n class: \"group-title\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"load-balance-switch\"\n};\nconst _hoisted_8 = {\n class: \"switch-label\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"channel-cards\"\n};\nconst _hoisted_10 = [\"onMousemove\", \"onMouseleave\"];\nconst _hoisted_11 = {\n class: \"card-header\"\n};\nconst _hoisted_12 = {\n class: \"card-title\"\n};\nconst _hoisted_13 = {\n class: \"channel-name\"\n};\nconst _hoisted_14 = {\n class: \"card-body\"\n};\nconst _hoisted_15 = {\n class: \"card-info\"\n};\nconst _hoisted_16 = {\n class: \"info-item\"\n};\nconst _hoisted_17 = {\n class: \"info-text\"\n};\nconst _hoisted_18 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_19 = {\n class: \"info-text\"\n};\nconst _hoisted_20 = {\n key: 1,\n class: \"info-item\"\n};\nconst _hoisted_21 = [\"title\"];\nconst _hoisted_22 = {\n class: \"info-item\"\n};\nconst _hoisted_23 = {\n class: \"info-text\"\n};\nconst _hoisted_24 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_25 = [\"title\"];\nconst _hoisted_26 = {\n class: \"info-item\"\n};\nconst _hoisted_27 = {\n class: \"info-text\"\n};\nconst _hoisted_28 = {\n class: \"info-item\"\n};\nconst _hoisted_29 = {\n class: \"info-text\"\n};\nconst _hoisted_30 = {\n class: \"info-item\"\n};\nconst _hoisted_31 = {\n class: \"info-text\"\n};\nconst _hoisted_32 = {\n class: \"info-item\"\n};\nconst _hoisted_33 = [\"title\"];\nconst _hoisted_34 = {\n key: 0,\n class: \"info-item\"\n};\nconst _hoisted_35 = [\"title\"];\nconst _hoisted_36 = {\n key: 0,\n class: \"quota-mini\"\n};\nconst _hoisted_37 = {\n class: \"quota-text\"\n};\nconst _hoisted_38 = {\n class: \"card-actions\"\n};\nconst _hoisted_39 = {\n key: 1,\n class: \"empty-tip\"\n};\nconst _hoisted_40 = {\n class: \"channel-type-option\"\n};\nconst _hoisted_41 = {\n key: 0,\n class: \"form-warning\",\n style: {\n \"margin-top\": \"0\"\n }\n};\nconst _hoisted_42 = [\"innerHTML\"];\nconst _hoisted_43 = {\n class: \"form-warning\"\n};\nconst _hoisted_44 = {\n class: \"quota-label\"\n};\nconst _hoisted_45 = {\n class: \"quota-status\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_CustomSelect = _resolveComponent(\"CustomSelect\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.title')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.titleTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_CustomSelect, {\n modelValue: $data.channelFilter,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.channelFilter = $event),\n options: $options.filterOptions,\n placeholder: _ctx.$t('sysUpload.filterPlaceholder'),\n width: \"160px\"\n }, null, 8, [\"modelValue\", \"options\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => $data.showAddDialog = true),\n class: \"add-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.addChannel')), 1)]),\n _: 1\n })])]), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.filteredChannels, channelType => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channelType.value,\n class: \"channel-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_ChannelIcon, {\n type: channelType.value,\n class: _normalizeClass(['group-icon', $options.getChannelIconClass(channelType.value)])\n }, null, 8, [\"type\", \"class\"]), _createElementVNode(\"span\", null, _toDisplayString(channelType.label), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n class: \"channel-count\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelList(channelType.value).length), 1)]),\n _: 2\n }, 1024)]), $options.hasLoadBalance(channelType.value) ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('sysUpload.loadBalance')), 1), _createVNode(_component_el_switch, {\n modelValue: $options.getSettings(channelType.value).loadBalance.enabled,\n \"onUpdate:modelValue\": $event => $options.getSettings(channelType.value).loadBalance.enabled = $event,\n size: \"small\",\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])])) : _createCommentVNode(\"\", true)]), $options.getChannelList(channelType.value).length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.getChannelList(channelType.value), (channel, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: channel.name || index,\n class: _normalizeClass([\"channel-card\", [channelType.value, {\n 'disabled': !channel.enabled,\n 'fixed': channel.fixed\n }]]),\n onMousemove: $event => $options.handleCardMouseMove($event, channelType.value, index),\n onMouseleave: $event => $options.handleCardMouseLeave(channelType.value, index)\n }, [_createElementVNode(\"div\", {\n class: \"card-glow\",\n ref_for: true,\n ref: `glow-${channelType.value}-${index}`\n }, null, 512), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(channel.name || _ctx.$t('sysUpload.unnamedChannel')), 1), channel.fixed ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_switch, {\n modelValue: channel.enabled,\n \"onUpdate:modelValue\": $event => channel.enabled = $event,\n size: \"small\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"])),\n onChange: $options.saveSettings\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, [channelType.value === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_17, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), channel.chatId ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [_createVNode(_component_font_awesome_icon, {\n icon: \"comments\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_19, \"Channel: \" + _toDisplayString($options.maskText(channel.chatId)), 1)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_21)])) : channelType.value === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_font_awesome_icon, {\n icon: \"server\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_23, _toDisplayString(channel.bucketName || _ctx.$t('sysUpload.notSet')), 1)]), channel.endpoint ? (_openBlock(), _createElementBlock(\"div\", _hoisted_24, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.endpoint\n }, _toDisplayString(channel.endpoint), 9, _hoisted_25)])) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"robot\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_27, \"Bot: \" + _toDisplayString($options.maskText(channel.botToken)), 1)]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_29, \"Channel: \" + _toDisplayString($options.maskText(channel.channelId)), 1)]), channel.isNitro ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"success\"\n }, {\n default: _withCtx(() => [...(_cache[78] || (_cache[78] = [_createTextVNode(\"Nitro\", -1)]))]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(channel.repo || _ctx.$t('sysUpload.notSet')), 1)]), channel.isPrivate ? (_openBlock(), _createBlock(_component_el_tag, {\n key: 0,\n size: \"small\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)], 64)) : channelType.value === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.baseUrl\n }, _toDisplayString(channel.baseUrl || _ctx.$t('sysUpload.notSet')), 9, _hoisted_33)]), channel.publicUrl ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"info-icon\"\n }), _createElementVNode(\"span\", {\n class: \"info-text\",\n title: channel.publicUrl\n }, _toDisplayString(channel.publicUrl), 9, _hoisted_35)])) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]), channel.quota?.enabled ? (_openBlock(), _createElementBlock(\"div\", _hoisted_36, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage(channel),\n status: $options.getQuotaStatus(channel),\n \"stroke-width\": 6\n }, null, 8, [\"percentage\", \"status\"]), _createElementVNode(\"span\", _hoisted_37, _toDisplayString($options.getQuotaText(channel)), 1)])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_38, [_createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openDetailDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"eye\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.detail')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"primary\",\n size: \"small\",\n onClick: $event => $options.openEditDialog(channelType.value, index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n text: \"\",\n type: \"danger\",\n size: \"small\",\n onClick: $event => $options.deleteChannel(channelType.value, index),\n disabled: channel.fixed\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"4px\"\n }\n }), _createTextVNode(_toDisplayString(_ctx.$t('sysUpload.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])], 42, _hoisted_10);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [_createVNode(_component_font_awesome_icon, {\n icon: \"inbox\",\n class: \"empty-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysUpload.noChannels', {\n type: channelType.label\n })), 1)]))]);\n }), 128)), _createVNode(_component_el_dialog, {\n modelValue: $data.showAddDialog,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.showAddDialog = $event),\n title: _ctx.$t('sysUpload.addDialogTitle'),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetAddForm\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[34] || (_cache[34] = $event => $data.showAddDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), $data.newChannel.type !== 'cfr2' ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.confirmAddChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.confirmAdd')), 1)]),\n _: 1\n }, 8, [\"onClick\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newChannel,\n \"label-position\": \"top\",\n ref: \"addForm\",\n rules: $options.addRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelTypeLabel'),\n prop: \"type\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.newChannel.type,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.newChannel.type = $event),\n placeholder: _ctx.$t('sysUpload.channelTypePlaceholder'),\n style: {\n \"width\": \"100%\"\n },\n onChange: $options.onChannelTypeChange\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.addableChannels, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.value,\n label: ch.label,\n value: ch.value\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_40, [_createVNode(_component_ChannelIcon, {\n type: ch.value,\n class: _normalizeClass(['select-option-icon', $options.getChannelIconClass(ch.value)])\n }, null, 8, [\"type\", \"class\"]), _createElementVNode(\"span\", null, _toDisplayString(ch.label), 1)])]),\n _: 2\n }, 1032, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.type === 'cfr2' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_41, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createElementVNode(\"span\", {\n innerHTML: _ctx.$t('sysUpload.r2ConfigNote')\n }, null, 8, _hoisted_42)])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameImmutableTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.name,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.newChannel.name = $event),\n placeholder: _ctx.$t('sysUpload.channelNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), $data.newChannel.type === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.chatId,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.newChannel.chatId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.chatIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.newChannel.type === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.endpoint,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.newChannel.endpoint = $event),\n placeholder: _ctx.$t('sysUpload.endpointPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.newChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.bucketName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.newChannel.bucketName = $event),\n placeholder: _ctx.$t('sysUpload.bucketNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.region,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.newChannel.region = $event),\n placeholder: _ctx.$t('sysUpload.bucketRegionPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.newChannel.accessKeyId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessKeyIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.newChannel.secretAccessKey = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.secretAccessKeyPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.newChannel.pathStyle = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.newChannel.type === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.botToken,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.newChannel.botToken = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.botTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.channelId,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.newChannel.channelId = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.channelIdPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.newChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isNitro,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.newChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_43, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"6px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysUpload.discordWarning')), 1)])], 64)) : $data.newChannel.type === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.repo,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newChannel.repo = $event),\n placeholder: _ctx.$t('sysUpload.repoNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.token,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newChannel.token = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.accessTokenPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.newChannel.type === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newChannel.baseUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavBaseUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.username,\n \"onUpdate:modelValue\": _cache[26] || (_cache[26] = $event => $data.newChannel.username = $event),\n placeholder: _ctx.$t('sysUpload.webdavUsernamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.password,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.newChannel.password = $event),\n type: \"password\",\n \"show-password\": \"\",\n placeholder: _ctx.$t('sysUpload.webdavPasswordPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.newChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newChannel.headersText,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.newChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.newChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.newChannel.quota.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.newChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.newChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.newChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.newChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)], 64))]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showDetailDialog,\n \"onUpdate:modelValue\": _cache[37] || (_cache[37] = $event => $data.showDetailDialog = $event),\n title: _ctx.$t('sysUpload.detailDialogTitle', {\n name: $data.currentChannel?.name || ''\n }),\n class: \"channel-dialog\",\n onClosed: $options.resetDetailData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[36] || (_cache[36] = $event => $data.showDetailDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.closeBtn')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.openEditFromDetail\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_descriptions, {\n column: 1,\n border: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelNameDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelTypeDetail')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getChannelTypeLabel($data.currentChannelType)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.statusLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: $data.currentChannel?.enabled ? 'success' : 'info'\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.enabled ? _ctx.$t('sysUpload.enabled') : _ctx.$t('sysUpload.disabled')), 1)]),\n _: 1\n }, 8, [\"type\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannel?.fixed ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 0,\n label: _ctx.$t('sysUpload.configSource')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.envVariable')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.chatIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.chatId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createBlock(_component_el_descriptions_item, {\n key: 2,\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"])) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.endpointLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.endpoint,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.cdnDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.cdnDomain || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.bucketName), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.bucketRegion')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.region), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.pathStyle')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.pathStyle ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.botTokenLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.botToken, 10)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.channelIdLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.maskText($data.currentChannel?.channelId, 6)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.proxyUrl || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.nitroMember')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isNitro ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.repoName')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.repo), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.privateRepo')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.isPrivate ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 6\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.baseUrl,\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $data.currentChannel?.publicUrl || _ctx.$t('sysUpload.notSet'),\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.username || _ctx.$t('sysUpload.notSet')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n \"model-value\": $options.formatHeaders($data.currentChannel?.headers),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n readonly: \"\"\n }, null, 8, [\"model-value\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.webdavCreateDirectory')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.createDirectory !== false ? _ctx.$t('sysUpload.isPathStyle') : _ctx.$t('sysUpload.isNotPathStyle')), 1)]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true), $data.currentChannel?.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 7\n }, [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.limitGB) + \" GB\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($data.currentChannel?.quota?.threshold) + \"%\", 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, null, {\n label: _withCtx(() => [_createElementVNode(\"span\", _hoisted_44, [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.currentUsage')) + \" \", 1), _createVNode(_component_el_button, {\n link: \"\",\n type: \"primary\",\n onClick: $options.refreshQuota,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync-alt\",\n class: _normalizeClass({\n 'fa-spin': $data.quotaLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_45, [_createVNode(_component_el_progress, {\n percentage: $options.getQuotaPercentage($data.currentChannel),\n status: $options.getQuotaStatus($data.currentChannel),\n \"stroke-width\": 16,\n \"text-inside\": true,\n format: () => $options.getQuotaText($data.currentChannel)\n }, null, 8, [\"percentage\", \"status\", \"format\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quota-info\", {\n 'quota-warning': $options.isQuotaExceeded($data.currentChannel)\n }])\n }, _toDisplayString($options.getQuotaStatusText($data.currentChannel)), 3)])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditDialog,\n \"onUpdate:modelValue\": _cache[77] || (_cache[77] = $event => $data.showEditDialog = $event),\n title: _ctx.$t('sysUpload.editDialogTitle', {\n name: $data.editChannel?.name || ''\n }),\n class: \"channel-dialog\",\n \"destroy-on-close\": \"\",\n onClosed: $options.resetEditData\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[76] || (_cache[76] = $event => $data.showEditDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.confirmEditChannel\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.saveChanges')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editChannel,\n \"label-position\": \"top\",\n ref: \"editForm\",\n rules: $options.editRules\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n prop: \"name\"\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.channelNameLabel')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.channelNameEditDisabledTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"inline-warning-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.name,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.editChannel.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.enableChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.enabled,\n \"onUpdate:modelValue\": _cache[39] || (_cache[39] = $event => $data.editChannel.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.currentChannelType === 'telegram' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[40] || (_cache[40] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.chatIdLabel'),\n prop: \"chatId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.chatId,\n \"onUpdate:modelValue\": _cache[41] || (_cache[41] = $event => $data.editChannel.chatId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[42] || (_cache[42] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : $data.currentChannelType === 'cfr2' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.publicUrl')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[43] || (_cache[43] = $event => $data.editChannel.publicUrl = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[44] || (_cache[44] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[45] || (_cache[45] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[46] || (_cache[46] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[47] || (_cache[47] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 's3' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 2\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.endpointLabel'),\n prop: \"endpoint\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.endpoint,\n \"onUpdate:modelValue\": _cache[48] || (_cache[48] = $event => $data.editChannel.endpoint = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.cdnDomain')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.cdnDomainTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.cdnDomain,\n \"onUpdate:modelValue\": _cache[49] || (_cache[49] = $event => $data.editChannel.cdnDomain = $event),\n placeholder: _ctx.$t('sysUpload.cdnDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketName'),\n prop: \"bucketName\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.bucketName,\n \"onUpdate:modelValue\": _cache[50] || (_cache[50] = $event => $data.editChannel.bucketName = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.bucketRegion'),\n prop: \"region\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.region,\n \"onUpdate:modelValue\": _cache[51] || (_cache[51] = $event => $data.editChannel.region = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessKeyId'),\n prop: \"accessKeyId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.accessKeyId,\n \"onUpdate:modelValue\": _cache[52] || (_cache[52] = $event => $data.editChannel.accessKeyId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.secretAccessKey'),\n prop: \"secretAccessKey\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.secretAccessKey,\n \"onUpdate:modelValue\": _cache[53] || (_cache[53] = $event => $data.editChannel.secretAccessKey = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.pathStyle')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.pathStyleTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.pathStyle,\n \"onUpdate:modelValue\": _cache[54] || (_cache[54] = $event => $data.editChannel.pathStyle = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[55] || (_cache[55] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[56] || (_cache[56] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[57] || (_cache[57] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[58] || (_cache[58] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : $data.currentChannelType === 'discord' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 3\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.botTokenLabel'),\n prop: \"botToken\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.botToken,\n \"onUpdate:modelValue\": _cache[59] || (_cache[59] = $event => $data.editChannel.botToken = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.channelIdLabel'),\n prop: \"channelId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.channelId,\n \"onUpdate:modelValue\": _cache[60] || (_cache[60] = $event => $data.editChannel.channelId = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.proxyDomain')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.proxyUrl,\n \"onUpdate:modelValue\": _cache[61] || (_cache[61] = $event => $data.editChannel.proxyUrl = $event),\n placeholder: _ctx.$t('sysUpload.proxyDomainPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.nitroMember')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.nitroTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isNitro,\n \"onUpdate:modelValue\": _cache[62] || (_cache[62] = $event => $data.editChannel.isNitro = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'huggingface' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 4\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.repoName'),\n prop: \"repo\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.repo,\n \"onUpdate:modelValue\": _cache[63] || (_cache[63] = $event => $data.editChannel.repo = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.accessToken'),\n prop: \"token\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.token,\n \"onUpdate:modelValue\": _cache[64] || (_cache[64] = $event => $data.editChannel.token = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.privateRepo')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.privateRepoTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.isPrivate,\n \"onUpdate:modelValue\": _cache[65] || (_cache[65] = $event => $data.editChannel.isPrivate = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })], 64)) : $data.currentChannelType === 'webdav' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 5\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavBaseUrl'),\n prop: \"baseUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.baseUrl,\n \"onUpdate:modelValue\": _cache[66] || (_cache[66] = $event => $data.editChannel.baseUrl = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.username,\n \"onUpdate:modelValue\": _cache[67] || (_cache[67] = $event => $data.editChannel.username = $event),\n disabled: $data.editChannel.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.password,\n \"onUpdate:modelValue\": _cache[68] || (_cache[68] = $event => $data.editChannel.password = $event),\n disabled: $data.editChannel.fixed,\n type: \"password\",\n \"show-password\": \"\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.publicUrl')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavPublicUrlTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.publicUrl,\n \"onUpdate:modelValue\": _cache[69] || (_cache[69] = $event => $data.editChannel.publicUrl = $event),\n placeholder: _ctx.$t('sysUpload.webdavPublicUrlPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.webdavHeaders')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editChannel.headersText,\n \"onUpdate:modelValue\": _cache[70] || (_cache[70] = $event => $data.editChannel.headersText = $event),\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n placeholder: _ctx.$t('sysUpload.webdavHeadersPlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysUpload.webdavCreateDirectory')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysUpload.webdavCreateDirectoryTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.createDirectory,\n \"onUpdate:modelValue\": _cache[71] || (_cache[71] = $event => $data.editChannel.createDirectory = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimit')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editChannel.quota.enabled,\n \"onUpdate:modelValue\": _cache[72] || (_cache[72] = $event => $data.editChannel.quota.enabled = $event),\n onChange: _cache[73] || (_cache[73] = val => $options.onQuotaEnabledChange(val, $data.editChannel))\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), $data.editChannel.quota?.enabled ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaLimitGB')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.limitGB,\n \"onUpdate:modelValue\": _cache[74] || (_cache[74] = $event => $data.editChannel.quota.limitGB = $event),\n min: 0.1,\n step: 1,\n precision: 1\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysUpload.quotaThreshold')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.editChannel.quota.threshold,\n \"onUpdate:modelValue\": _cache[75] || (_cache[75] = $event => $data.editChannel.quota.threshold = $event),\n min: 50,\n max: 100,\n step: 5\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])], 64)) : _createCommentVNode(\"\", true)], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClosed\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport ChannelIcon from '@/components/icons/ChannelIcon.vue';\nimport CustomSelect from './CustomSelect.vue';\nexport default {\n components: {\n ChannelIcon,\n CustomSelect\n },\n data() {\n return {\n // 渠道类型筛选\n channelFilter: '',\n // 渠道类型列表\n channels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 可添加的渠道类型\n addableChannels: [{\n value: 'telegram',\n label: 'Telegram'\n }, {\n value: 'cfr2',\n label: 'CloudFlare R2'\n }, {\n value: 's3',\n label: 'S3'\n }, {\n value: 'discord',\n label: 'Discord'\n }, {\n value: 'huggingface',\n label: 'HuggingFace'\n }, {\n value: 'webdav',\n label: 'WebDAV'\n }],\n // 各渠道配置\n telegramSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n cfr2Settings: {\n channels: []\n },\n s3Settings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n discordSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n huggingfaceSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n webdavSettings: {\n loadBalance: {\n enabled: false\n },\n channels: []\n },\n // 弹窗控制\n showAddDialog: false,\n showDetailDialog: false,\n showEditDialog: false,\n // 当前操作的渠道\n currentChannelType: '',\n currentChannelIndex: -1,\n currentChannel: null,\n editChannel: {},\n // 新增渠道表单\n newChannel: {\n type: '',\n name: '',\n enabled: true,\n // Telegram\n botToken: '',\n chatId: '',\n proxyUrl: '',\n // S3\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n // Discord\n channelId: '',\n isNitro: false,\n // HuggingFace\n repo: '',\n token: '',\n isPrivate: false,\n // WebDAV\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n },\n // 容量统计数据\n quotaStats: {},\n quotaLoading: false,\n // 加载状态\n loading: false\n };\n },\n computed: {\n // 筛选下拉框选项\n filterOptions() {\n return [{\n value: '',\n label: this.$t('common.all')\n }, ...this.channels.map(ch => ({\n value: ch.value,\n label: ch.label,\n channelType: ch.value,\n iconClass: this.getChannelIconClass(ch.value)\n }))];\n },\n // 根据筛选条件过滤渠道类型\n filteredChannels() {\n if (!this.channelFilter) {\n return this.channels;\n }\n return this.channels.filter(ch => ch.value === this.channelFilter);\n },\n addRules() {\n return {\n type: [{\n required: true,\n message: this.$t('sysUpload.channelTypePlaceholder'),\n trigger: 'change'\n }],\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n },\n editRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }, {\n pattern: /^[\\u4e00-\\u9fa5a-zA-Z0-9_-]+$/,\n message: this.$t('sysUpload.channelNamePlaceholder'),\n trigger: 'blur'\n }],\n botToken: [{\n required: true,\n message: this.$t('sysUpload.botTokenPlaceholder'),\n trigger: 'blur'\n }],\n chatId: [{\n required: true,\n message: this.$t('sysUpload.chatIdPlaceholder'),\n trigger: 'blur'\n }],\n channelId: [{\n required: true,\n message: this.$t('sysUpload.channelIdPlaceholder'),\n trigger: 'blur'\n }],\n endpoint: [{\n required: true,\n message: this.$t('sysUpload.endpointPlaceholder'),\n trigger: 'blur'\n }],\n bucketName: [{\n required: true,\n message: this.$t('sysUpload.bucketNamePlaceholder'),\n trigger: 'blur'\n }],\n region: [{\n required: true,\n message: this.$t('sysUpload.bucketRegionPlaceholder'),\n trigger: 'blur'\n }],\n accessKeyId: [{\n required: true,\n message: this.$t('sysUpload.accessKeyIdPlaceholder'),\n trigger: 'blur'\n }],\n secretAccessKey: [{\n required: true,\n message: this.$t('sysUpload.secretAccessKeyPlaceholder'),\n trigger: 'blur'\n }],\n repo: [{\n required: true,\n message: this.$t('sysUpload.repoNamePlaceholder'),\n trigger: 'blur'\n }],\n token: [{\n required: true,\n message: this.$t('sysUpload.accessTokenPlaceholder'),\n trigger: 'blur'\n }],\n baseUrl: [{\n required: true,\n message: this.$t('sysUpload.webdavBaseUrlPlaceholder'),\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n // 卡片光斑跟随鼠标\n handleCardMouseMove(event, channelType, index) {\n const card = event.currentTarget;\n const rect = card.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '1';\n glowEl[0].style.left = `${x}px`;\n glowEl[0].style.top = `${y}px`;\n }\n },\n handleCardMouseLeave(channelType, index) {\n const refKey = `glow-${channelType}-${index}`;\n const glowEl = this.$refs[refKey];\n if (glowEl && glowEl[0]) {\n glowEl[0].style.opacity = '0';\n }\n },\n getChannelIconClass(type) {\n return `channel-brand-${type}`;\n },\n // 获取渠道类型标签\n getChannelTypeLabel(type) {\n const channel = this.channels.find(c => c.value === type);\n return channel ? channel.label : type;\n },\n // 获取渠道列表\n getChannelList(type) {\n return this.getSettings(type)?.channels || [];\n },\n // 获取渠道设置对象\n getSettings(type) {\n const map = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n return map[type];\n },\n // 是否有负载均衡选项\n hasLoadBalance(type) {\n return ['telegram', 's3', 'discord', 'huggingface', 'webdav'].includes(type);\n },\n // 文本脱敏\n maskText(text, showLength = 4) {\n if (!text) return this.$t('sysUpload.notSet');\n if (text.length <= showLength * 2) return '****';\n return text.slice(0, showLength) + '****' + text.slice(-showLength);\n },\n formatHeaders(headers) {\n if (!headers || typeof headers === 'object' && Object.keys(headers).length === 0) {\n return this.$t('sysUpload.notSet');\n }\n if (typeof headers === 'string') {\n return headers;\n }\n return JSON.stringify(headers, null, 2);\n },\n headersToText(headers) {\n if (!headers) return '';\n if (typeof headers === 'string') return headers;\n return JSON.stringify(headers, null, 2);\n },\n parseHeadersText(text) {\n if (!text || !text.trim()) return {};\n try {\n const parsed = JSON.parse(text);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return null;\n }\n return parsed;\n } catch (error) {\n return null;\n }\n },\n // 打开详情弹窗\n openDetailDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n this.currentChannel = this.getChannelList(type)[index];\n this.showDetailDialog = true;\n },\n // 打开编辑弹窗\n openEditDialog(type, index) {\n this.currentChannelType = type;\n this.currentChannelIndex = index;\n const channel = this.getChannelList(type)[index];\n this.editChannel = JSON.parse(JSON.stringify(channel));\n if (type === 'webdav') {\n this.editChannel.headersText = this.headersToText(this.editChannel.headers);\n this.editChannel.createDirectory = this.editChannel.createDirectory !== false;\n }\n // 确保 quota 对象存在\n if (!this.editChannel.quota) {\n this.editChannel.quota = {\n enabled: false,\n limitGB: 10,\n threshold: 95\n };\n }\n this.showEditDialog = true;\n },\n // 从详情页打开编辑\n openEditFromDetail() {\n this.showDetailDialog = false;\n this.openEditDialog(this.currentChannelType, this.currentChannelIndex);\n },\n // 重置添加表单\n resetAddForm() {\n this.newChannel = {\n type: '',\n name: '',\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 重置详情弹窗数据\n resetDetailData() {\n this.currentChannel = null;\n },\n // 重置编辑弹窗数据\n resetEditData() {\n this.editChannel = {};\n },\n // 渠道类型变更时重置表单\n onChannelTypeChange() {\n // 保留 type 和 name,重置其他字段\n const {\n type,\n name\n } = this.newChannel;\n this.newChannel = {\n type,\n name,\n enabled: true,\n botToken: '',\n chatId: '',\n proxyUrl: '',\n endpoint: '',\n cdnDomain: '',\n bucketName: '',\n region: 'auto',\n accessKeyId: '',\n secretAccessKey: '',\n pathStyle: false,\n quota: {\n enabled: false,\n limitGB: 10,\n threshold: 95\n },\n channelId: '',\n isNitro: false,\n repo: '',\n token: '',\n isPrivate: false,\n baseUrl: '',\n username: '',\n password: '',\n publicUrl: '',\n headersText: '',\n createDirectory: true\n };\n },\n // 确认添加渠道\n confirmAddChannel() {\n this.$refs.addForm.validate(valid => {\n if (!valid) return;\n const {\n type,\n name\n } = this.newChannel;\n const settings = this.getSettings(type);\n\n // 检查是否为保留名称({type}_env)\n const reservedNames = ['Telegram_env', 'R2_env', 'S3_env', 'Discord_env', 'HuggingFace_env', 'WebDAV_env'];\n if (reservedNames.includes(name)) {\n this.$message.warning(this.$t('sysUpload.reservedName'));\n return;\n }\n\n // 检查名称是否重复\n const isDuplicate = settings.channels.some(ch => ch.name === name);\n if (isDuplicate) {\n this.$message.warning(this.$t('sysUpload.duplicateName'));\n return;\n }\n let newChannelData = {\n id: settings.channels.length + 1,\n name: this.newChannel.name,\n type: type,\n savePath: 'database',\n enabled: true,\n fixed: false\n };\n\n // 根据类型添加特定字段\n if (type === 'telegram') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n chatId: this.newChannel.chatId,\n proxyUrl: this.newChannel.proxyUrl\n });\n } else if (type === 's3') {\n Object.assign(newChannelData, {\n endpoint: this.newChannel.endpoint,\n cdnDomain: this.newChannel.cdnDomain,\n bucketName: this.newChannel.bucketName,\n region: this.newChannel.region,\n accessKeyId: this.newChannel.accessKeyId,\n secretAccessKey: this.newChannel.secretAccessKey,\n pathStyle: this.newChannel.pathStyle,\n quota: {\n ...this.newChannel.quota\n }\n });\n } else if (type === 'discord') {\n Object.assign(newChannelData, {\n botToken: this.newChannel.botToken,\n channelId: this.newChannel.channelId,\n proxyUrl: this.newChannel.proxyUrl,\n isNitro: this.newChannel.isNitro\n });\n } else if (type === 'huggingface') {\n Object.assign(newChannelData, {\n repo: this.newChannel.repo,\n token: this.newChannel.token,\n isPrivate: this.newChannel.isPrivate\n });\n } else if (type === 'webdav') {\n const headers = this.parseHeadersText(this.newChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n Object.assign(newChannelData, {\n baseUrl: this.newChannel.baseUrl,\n username: this.newChannel.username,\n password: this.newChannel.password,\n publicUrl: this.newChannel.publicUrl,\n headers,\n createDirectory: this.newChannel.createDirectory !== false,\n quota: {\n ...this.newChannel.quota\n }\n });\n }\n settings.channels.push(newChannelData);\n this.showAddDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 确认编辑渠道\n confirmEditChannel() {\n this.$refs.editForm.validate(valid => {\n if (!valid) return;\n const settings = this.getSettings(this.currentChannelType);\n const currentIndex = this.currentChannelIndex;\n const originalName = settings.channels[currentIndex]?.name || this.editChannel.name;\n const editedChannel = {\n ...this.editChannel,\n name: originalName\n };\n if (this.currentChannelType === 'webdav') {\n const headers = this.parseHeadersText(editedChannel.headersText);\n if (headers === null) {\n this.$message.warning(this.$t('sysUpload.webdavHeadersInvalid'));\n return;\n }\n editedChannel.headers = headers;\n editedChannel.createDirectory = editedChannel.createDirectory !== false;\n delete editedChannel.headersText;\n }\n settings.channels[this.currentChannelIndex] = editedChannel;\n this.showEditDialog = false;\n // 自动保存全部设置\n this.saveSettings();\n });\n },\n // 删除渠道\n deleteChannel(type, index) {\n const channel = this.getChannelList(type)[index];\n if (channel.fixed) {\n this.$message.warning(this.$t('sysUpload.fixedChannelCannotDelete'));\n return;\n }\n this.$confirm(this.$t('sysUpload.deleteChannelConfirm'), this.$t('common.warning'), {\n confirmButtonText: this.$t('common.confirm'),\n cancelButtonText: this.$t('common.cancel'),\n type: 'warning'\n }).then(() => {\n const settings = this.getSettings(type);\n settings.channels.splice(index, 1);\n // 重新调整 id\n settings.channels.forEach((item, i) => {\n item.id = i + 1;\n });\n // 自动保存\n this.saveSettings();\n }).catch(() => {});\n },\n saveSettings() {\n // 保存设置\n const settings = {\n telegram: this.telegramSettings,\n cfr2: this.cfr2Settings,\n s3: this.s3Settings,\n discord: this.discordSettings,\n huggingface: this.huggingfaceSettings,\n webdav: this.webdavSettings\n };\n fetchWithAuth('/api/manage/sysConfig/upload', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(() => {\n this.$message.success(this.$t('sysOthers.settingsSaved'));\n });\n },\n // 获取容量统计(重新计算)\n async refreshQuota() {\n this.quotaLoading = true;\n try {\n // 使用 POST 请求重新统计容量(会触发索引重建)\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n } else {\n // 如果重新统计失败,尝试获取已有数据\n const getResponse = await fetchWithAuth('/api/manage/quota');\n const getData = await getResponse.json();\n if (getData.success) {\n this.quotaStats = getData.quotaStats || {};\n }\n }\n } catch (error) {\n console.error('Failed to refresh quota stats:', error);\n } finally {\n this.quotaLoading = false;\n }\n },\n // 获取容量统计(仅读取,不重建索引)\n async loadQuotaStats() {\n try {\n const response = await fetchWithAuth('/api/manage/quota');\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.quotaStats || {};\n }\n } catch (error) {\n console.error('Failed to load quota stats:', error);\n }\n },\n // 获取渠道已用容量 (GB)\n getChannelUsedGB(channel) {\n const stats = this.quotaStats[channel.name];\n if (!stats) return 0;\n return (stats.usedMB || 0) / 1024;\n },\n // 获取容量百分比\n getQuotaPercentage(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n const percentage = usedGB / limitGB * 100;\n return Math.min(100, Math.round(percentage * 10) / 10);\n },\n // 获取进度条状态\n getQuotaStatus(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) return 'exception';\n if (percentage >= 80) return 'warning';\n return 'success';\n },\n // 获取容量文本\n getQuotaText(channel) {\n const usedGB = this.getChannelUsedGB(channel);\n const limitGB = channel.quota?.limitGB || 10;\n return `${usedGB.toFixed(2)} / ${limitGB} GB`;\n },\n // 判断是否超过阈值\n isQuotaExceeded(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n return percentage >= threshold;\n },\n // 获取状态文本\n getQuotaStatusText(channel) {\n const percentage = this.getQuotaPercentage(channel);\n const threshold = channel.quota?.threshold || 95;\n if (percentage >= threshold) {\n return `⚠️ 已达到容量阈值 (${threshold}%),渠道写入已暂停`;\n }\n if (percentage >= 80) {\n return `⚡ 容量使用较高,接近阈值`;\n }\n return `✓ 容量正常`;\n },\n // 容量限制开关变化时\n async onQuotaEnabledChange(enabled, channel) {\n if (enabled && channel.name) {\n // 首次启用时,检查是否有该渠道的统计数据\n const stats = this.quotaStats[channel.name];\n if (!stats) {\n // 没有统计数据,提示用户需要重新统计\n this.$confirm(this.$t('sysUpload.quotaInitConfirm'), this.$t('sysUpload.quotaInitTitle'), {\n confirmButtonText: this.$t('sysUpload.quotaInitConfirmBtn'),\n cancelButtonText: this.$t('sysUpload.quotaInitCancelBtn'),\n type: 'info'\n }).then(async () => {\n await this.recalculateQuota();\n }).catch(() => {\n this.$message.info(this.$t('sysUpload.quotaInitLater'));\n });\n }\n }\n },\n // 重新统计容量\n async recalculateQuota() {\n this.quotaLoading = true;\n try {\n this.$message.info(this.$t('sysUpload.quotaCalculating'));\n const response = await fetchWithAuth('/api/manage/quota', {\n method: 'POST'\n });\n const data = await response.json();\n if (data.success) {\n this.quotaStats = data.channelStats || {};\n this.$message.success(this.$t('sysUpload.quotaCalculateSuccess'));\n } else {\n this.$message.error(this.$t('sysUpload.quotaCalculateError') + (data.error || ''));\n }\n } catch (error) {\n console.error('Failed to recalculate quota:', error);\n this.$message.error(this.$t('sysUpload.quotaCalculateFailed'));\n } finally {\n this.quotaLoading = false;\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/upload').then(response => response.json()).then(data => {\n this.telegramSettings = data.telegram;\n // 确保 R2 渠道有 quota 默认值\n if (data.cfr2 && data.cfr2.channels) {\n data.cfr2.channels = data.cfr2.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.cfr2Settings = data.cfr2;\n // 确保 S3 渠道有 quota 默认值\n if (data.s3 && data.s3.channels) {\n data.s3.channels = data.s3.channels.map(channel => ({\n ...channel,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.s3Settings = data.s3;\n // 确保 Discord 渠道有默认值\n if (data.discord && data.discord.channels) {\n data.discord.channels = data.discord.channels.map(channel => ({\n ...channel,\n proxyUrl: channel.proxyUrl || ''\n }));\n }\n this.discordSettings = data.discord || {\n loadBalance: {},\n channels: []\n };\n // 确保 HuggingFace 渠道有默认值\n if (data.huggingface && data.huggingface.channels) {\n data.huggingface.channels = data.huggingface.channels.map(channel => ({\n ...channel,\n isPrivate: channel.isPrivate || false\n }));\n }\n this.huggingfaceSettings = data.huggingface || {\n loadBalance: {},\n channels: []\n };\n // 确保 WebDAV 渠道有默认值\n if (data.webdav && data.webdav.channels) {\n data.webdav.channels = data.webdav.channels.map(channel => ({\n ...channel,\n username: channel.username || '',\n password: channel.password || '',\n publicUrl: channel.publicUrl || '',\n headers: channel.headers || {},\n createDirectory: channel.createDirectory !== false,\n quota: channel.quota || {\n enabled: false,\n limitGB: 10,\n threshold: 95\n }\n }));\n }\n this.webdavSettings = data.webdav || {\n loadBalance: {},\n channels: []\n };\n // 加载容量统计(仅读取,不重建索引)\n this.loadQuotaStats();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogUpload.vue?vue&type=template&id=9a9d7c2a&scoped=true\"\nimport script from \"./SysCogUpload.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogUpload.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogUpload.vue?vue&type=style&index=0&id=9a9d7c2a&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-9a9d7c2a\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, Transition as _Transition, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"save-text\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"fade-up\"\n }, {\n default: _withCtx(() => [_withDirectives(_createElementVNode(\"div\", {\n class: _normalizeClass([\"floating-save-btn\", {\n 'is-loading': $props.loading\n }]),\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleClick && $options.handleClick(...args))\n }, [$props.loading ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"spinner\",\n spin: \"\"\n })) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"save\"\n })), _createElementVNode(\"span\", _hoisted_1, _toDisplayString($props.loading ? _ctx.$t('floatingSave.saving') : _ctx.$t('floatingSave.save')), 1)], 2), [[_vShow, $data.visible]])]),\n _: 1\n });\n}","export default {\n name: 'FloatingSaveButton',\n emits: ['click'],\n props: {\n loading: {\n type: Boolean,\n default: false\n },\n show: {\n type: Boolean,\n default: true\n }\n },\n data() {\n return {\n visible: false\n };\n },\n watch: {\n show: {\n immediate: true,\n handler(val) {\n if (val) {\n // 延迟显示,等待 Element Plus 加载遮罩淡出动画完成\n setTimeout(() => {\n this.visible = true;\n }, 600);\n } else {\n this.visible = false;\n }\n }\n }\n },\n methods: {\n handleClick() {\n if (!this.loading) {\n this.$emit('click');\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FloatingSaveButton.vue?vue&type=template&id=53091626&scoped=true\"\nimport script from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\nexport * from \"./FloatingSaveButton.vue?vue&type=script&lang=js\"\n\nimport \"./FloatingSaveButton.vue?vue&type=style&index=0&id=53091626&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-53091626\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"security-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"second-title\"\n};\nconst _hoisted_5 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_6 = {\n class: \"second-title\"\n};\nconst _hoisted_7 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"8px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_8 = {\n class: \"second-title token-title\"\n};\nconst _hoisted_9 = {\n class: \"token-actions\"\n};\nconst _hoisted_10 = {\n class: \"token-table-container\"\n};\nconst _hoisted_11 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_12 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_13 = {\n class: \"token-display\"\n};\nconst _hoisted_14 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_15 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_16 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_17 = {\n class: \"table-cell-content\"\n};\nconst _hoisted_18 = {\n class: \"table-cell-content action-buttons\"\n};\nconst _hoisted_19 = {\n class: \"first-settings\"\n};\nconst _hoisted_20 = {\n class: \"first-title\"\n};\nconst _hoisted_21 = {\n class: \"second-title\"\n};\nconst _hoisted_22 = {\n class: \"second-title\"\n};\nconst _hoisted_23 = {\n class: \"query-param-list\"\n};\nconst _hoisted_24 = {\n class: \"query-param-list\"\n};\nconst _hoisted_25 = {\n class: \"first-settings\"\n};\nconst _hoisted_26 = {\n class: \"first-title\"\n};\nconst _hoisted_27 = {\n class: \"second-title\"\n};\nconst _hoisted_28 = {\n class: \"second-title\"\n};\nconst _hoisted_29 = {\n class: \"second-title\"\n};\nconst _hoisted_30 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_31 = {\n class: \"form-item-hint\"\n};\nconst _hoisted_32 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_33 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_34 = {\n style: {\n \"display\": \"flex\",\n \"gap\": \"10px\",\n \"width\": \"100%\"\n }\n};\nconst _hoisted_35 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_36 = {\n class: \"token-result\"\n};\nconst _hoisted_37 = {\n style: {\n \"margin-bottom\": \"15px\",\n \"color\": \"#e6a23c\"\n }\n};\nconst _hoisted_38 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_table_column = _resolveComponent(\"el-table-column\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_table = _resolveComponent(\"el-table\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, _toDisplayString(_ctx.$t('sysSecurity.authManagement')), 1), _createElementVNode(\"h4\", _hoisted_4, _toDisplayString(_ctx.$t('sysSecurity.userAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.user,\n rules: $options.userPassRules,\n ref: \"userPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.uploadPassword'),\n prop: \"authCode\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.authCode,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.authSettings.user.authCode = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleUserPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.user._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearUserPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.user._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearUserPassword,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.clearUserPassword = $event),\n onChange: $options.handleClearUserPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showUserPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewUserPassword\",\n key: \"user-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.user.confirmNewUserPassword,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.authSettings.user.confirmNewUserPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_6, _toDisplayString(_ctx.$t('sysSecurity.adminAuth')), 1), _createVNode(_component_el_form, {\n model: $data.authSettings.admin,\n rules: $options.adminPassRules,\n ref: \"adminPassForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminUsername'),\n prop: \"adminUsername\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminUsername,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.authSettings.admin.adminUsername = $event),\n autocomplete: \"new-password\",\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminPassword'),\n prop: \"adminPassword\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.adminPassword,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.authSettings.admin.adminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n onInput: $options.handleAdminPassInput,\n autocomplete: \"new-password\",\n placeholder: $data.authSettings.admin._hasPassword ? _ctx.$t('sysSecurity.passwordUnchanged') : '',\n disabled: $data.clearAdminPassword\n }, null, 8, [\"modelValue\", \"onInput\", \"placeholder\", \"disabled\"]), $data.authSettings.admin._hasPassword ? (_openBlock(), _createBlock(_component_el_checkbox, {\n key: 0,\n modelValue: $data.clearAdminPassword,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.clearAdminPassword = $event),\n onChange: $options.handleClearAdminPassword\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.clearPassword')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_Transition, {\n name: \"fade-slide\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [$data.showAdminPassConfirm ? (_openBlock(), _createBlock(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.confirmPassword'),\n prop: \"confirmNewAdminPassword\",\n key: \"admin-confirm\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.authSettings.admin.confirmNewAdminPassword,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.authSettings.admin.confirmNewAdminPassword = $event),\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.apiTokenManagement')) + \" \", 1), _createElementVNode(\"a\", _hoisted_9, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: _cache[7] || (_cache[7] = $event => $data.showCreateTokenDialog = true),\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n })])]), _createElementVNode(\"div\", _hoisted_10, [_withDirectives((_openBlock(), _createBlock(_component_el_table, {\n data: $data.apiTokens,\n class: \"token-table\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_table_column, {\n prop: \"name\",\n label: _ctx.$t('sysSecurity.tokenName'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_11, _toDisplayString(scope.row.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"token\",\n label: _ctx.$t('sysSecurity.tokenValue'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(scope.row.token), 1)])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"permissions\",\n label: _ctx.$t('sysSecurity.permissions'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(scope.row.permissions, perm => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: perm,\n size: \"small\",\n class: \"permission-tag\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getPermissionText(perm)), 1)]),\n _: 2\n }, 1024);\n }), 128))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n prop: \"createdAt\",\n label: _ctx.$t('sysSecurity.createdAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_15, _toDisplayString($options.formatDate(scope.row.createdAt)), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.status'),\n \"header-align\": \"center\",\n width: \"90\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tag, {\n type: $options.getTokenStatus(scope.row.expiresAt).status === 'active' ? 'success' : 'danger',\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.getTokenStatus(scope.row.expiresAt).label), 1)]),\n _: 2\n }, 1032, [\"type\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.expiresAt'),\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.getTokenStatus(scope.row.expiresAt).expiresText), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_table_column, {\n label: _ctx.$t('sysSecurity.operation'),\n fixed: \"right\",\n \"header-align\": \"center\"\n }, {\n default: _withCtx(scope => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n onClick: $event => $options.editToken(scope.row)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.editBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n class: \"action-button\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteToken(scope.row.id)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.deleteBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"data\"])), [[_directive_loading, $data.tokenLoading]])])]), _createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"h3\", _hoisted_20, _toDisplayString(_ctx.$t('sysSecurity.uploadManagement')), 1), _createElementVNode(\"h4\", _hoisted_21, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.imageReview')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.imageReviewTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.moderate,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.moderate.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.uploadSettings.moderate.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.reviewChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.moderate.channel,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.uploadSettings.moderate.channel = $event),\n placeholder: _ctx.$t('sysSecurity.reviewChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"moderatecontent.com\",\n value: \"moderatecontent.com\"\n }), _createVNode(_component_el_option, {\n label: \"nsfwjs\",\n value: \"nsfwjs\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.moderate.channel === 'moderatecontent.com' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.apiKey')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.moderateContentApiKey,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.uploadSettings.moderate.moderateContentApiKey = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), $data.uploadSettings.moderate.channel === 'nsfwjs' ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.moderate.nsfwApiPath,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.uploadSettings.moderate.nsfwApiPath = $event),\n placeholder: \"https://nsfwjs.your.domain\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.ipQuery')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.ipQueryTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.uploadSettings.ipQuery,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.enableIpQuery')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.uploadSettings.ipQuery.enabled,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.uploadSettings.ipQuery.enabled = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.ipQueryChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.uploadSettings.ipQuery.channel,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.uploadSettings.ipQuery.channel = $event),\n placeholder: _ctx.$t('sysSecurity.ipQueryChannelPlaceholder')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: _ctx.$t('sysSecurity.customApi'),\n value: \"customApi\"\n }, null, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.uploadSettings.ipQuery.channel === 'customApi' ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.apiPath')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.url,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.uploadSettings.ipQuery.customApi.url = $event),\n placeholder: \"https://api.example.com/ip\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.queryParams')\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_23, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.params, (param, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"query-param-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: param.key,\n \"onUpdate:modelValue\": $event => param.key = $event,\n placeholder: _ctx.$t('sysSecurity.paramNamePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_input, {\n modelValue: param.value,\n \"onUpdate:modelValue\": $event => param.value = $event,\n placeholder: _ctx.$t('sysSecurity.paramValuePlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryParam(index),\n disabled: $data.uploadSettings.ipQuery.customApi.params.length <= 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryParam\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addQueryParam')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.responseFields')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.responseFieldsTip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_24, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.uploadSettings.ipQuery.customApi.responseFields, (field, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: \"response-field-row\"\n }, [_createVNode(_component_el_input, {\n modelValue: $data.uploadSettings.ipQuery.customApi.responseFields[index],\n \"onUpdate:modelValue\": $event => $data.uploadSettings.ipQuery.customApi.responseFields[index] = $event,\n placeholder: _ctx.$t('sysSecurity.responseFieldPathPlaceholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, -1),\n disabled: index === 0\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-up\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.moveIpQueryResponseField(index, 1),\n disabled: index === $data.uploadSettings.ipQuery.customApi.responseFields.length - 1\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-down\"\n })]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"]), _createVNode(_component_el_button, {\n type: \"danger\",\n plain: \"\",\n circle: \"\",\n onClick: $event => $options.removeIpQueryResponseField(index)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]);\n }), 128)), _createVNode(_component_el_button, {\n type: \"primary\",\n plain: \"\",\n onClick: $options.addIpQueryResponseField\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysSecurity.addResponseField')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n _: 1\n })], 64)) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"h3\", _hoisted_26, _toDisplayString(_ctx.$t('sysSecurity.accessManagement')), 1), _createElementVNode(\"h4\", _hoisted_27, _toDisplayString(_ctx.$t('sysSecurity.domainFilter')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.allowedDomains')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.allowedDomainsTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.accessSettings.allowedDomains,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.accessSettings.allowedDomains = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h4\", _hoisted_28, _toDisplayString(_ctx.$t('sysSecurity.whiteListMode')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n rules: $options.accessRules,\n ref: \"accessForm\",\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.enableWhiteList')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.enableWhiteListTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.whiteListMode,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.accessSettings.whiteListMode = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\", \"rules\"]), _createElementVNode(\"h4\", _hoisted_29, _toDisplayString(_ctx.$t('sysSecurity.sessionSecurityPolicy')), 1), _createVNode(_component_el_form, {\n model: $data.accessSettings,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, null, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.secureMode')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysSecurity.secureModeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.accessSettings.sessionSecure,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.accessSettings.sessionSecure = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.userSessionMaxAge'),\n prop: \"userSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.userSessionMaxAge,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.accessSettings.userSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_30, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.adminSessionMaxAge'),\n prop: \"adminSessionMaxAge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input_number, {\n modelValue: $data.accessSettings.adminSessionMaxAge,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.accessSettings.adminSessionMaxAge = $event),\n min: 1,\n max: 3650,\n step: 1,\n precision: 0,\n \"controls-position\": \"right\"\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"span\", _hoisted_31, _toDisplayString(_ctx.$t('sysSecurity.sessionMaxAgeUnit')), 1)]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showCreateTokenDialog,\n \"onUpdate:modelValue\": _cache[27] || (_cache[27] = $event => $data.showCreateTokenDialog = $event),\n title: _ctx.$t('sysSecurity.createTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_33, [_createVNode(_component_el_button, {\n onClick: _cache[26] || (_cache[26] = $event => $data.showCreateTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.createToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.createBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.newToken,\n rules: $options.tokenRules,\n ref: \"tokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel'),\n prop: \"name\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.newToken.name,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.newToken.name = $event),\n placeholder: _ctx.$t('sysSecurity.tokenNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.newToken.permissions,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.newToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.neverExpire,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.newToken.neverExpire = $event),\n onChange: $options.onCreateNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_el_input_number, {\n modelValue: $data.newToken.expirationValue,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.newToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.newToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $data.newToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.newToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.newToken.autoDelete,\n \"onUpdate:modelValue\": _cache[25] || (_cache[25] = $event => $data.newToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showEditTokenDialog,\n \"onUpdate:modelValue\": _cache[35] || (_cache[35] = $event => $data.showEditTokenDialog = $event),\n title: _ctx.$t('sysSecurity.editTokenTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_35, [_createVNode(_component_el_button, {\n onClick: _cache[34] || (_cache[34] = $event => $data.showEditTokenDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('common.cancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.updateToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.updateBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n model: $data.editingToken,\n rules: $options.editTokenRules,\n ref: \"editTokenForm\",\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.editingToken.name,\n \"onUpdate:modelValue\": _cache[28] || (_cache[28] = $event => $data.editingToken.name = $event),\n disabled: \"\"\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.permissionsLabel'),\n prop: \"permissions\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.editingToken.permissions,\n \"onUpdate:modelValue\": _cache[29] || (_cache[29] = $event => $data.editingToken.permissions = $event)\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n label: \"upload\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"delete\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permDelete')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"list\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permList')), 1)]),\n _: 1\n }), _createVNode(_component_el_checkbox, {\n label: \"manage\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.permManage')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.neverExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.neverExpire,\n \"onUpdate:modelValue\": _cache[30] || (_cache[30] = $event => $data.editingToken.neverExpire = $event),\n onChange: $options.onEditNeverExpireChange\n }, null, 8, [\"modelValue\", \"onChange\"])]),\n _: 1\n }, 8, [\"label\"]), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysSecurity.validPeriod'),\n prop: \"expirationValue\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_34, [_createVNode(_component_el_input_number, {\n modelValue: $data.editingToken.expirationValue,\n \"onUpdate:modelValue\": _cache[31] || (_cache[31] = $event => $data.editingToken.expirationValue = $event),\n min: 1,\n step: 1,\n \"controls-position\": \"right\",\n style: {\n \"flex\": \"1\"\n }\n }, null, 8, [\"modelValue\"]), _createVNode(_component_el_select, {\n modelValue: $data.editingToken.expirationUnit,\n \"onUpdate:modelValue\": _cache[32] || (_cache[32] = $event => $data.editingToken.expirationUnit = $event),\n style: {\n \"width\": \"100px\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.timeUnitOptions, opt => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: opt.value,\n label: _ctx.$t(opt.labelKey),\n value: opt.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true), !$data.editingToken.neverExpire ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 1,\n label: _ctx.$t('sysSecurity.autoDeleteOnExpire')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.editingToken.autoDelete,\n \"onUpdate:modelValue\": _cache[33] || (_cache[33] = $event => $data.editingToken.autoDelete = $event)\n }, null, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\", \"rules\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showTokenResultDialog,\n \"onUpdate:modelValue\": _cache[38] || (_cache[38] = $event => $data.showTokenResultDialog = $event),\n title: _ctx.$t('sysSecurity.tokenCreatedTitle'),\n width: $options.dialogWidth\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_38, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[37] || (_cache[37] = $event => $data.showTokenResultDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.savedBtn')), 1)]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"p\", _hoisted_37, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n style: {\n \"margin-right\": \"5px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('sysSecurity.tokenCreatedWarning')), 1)]), _createVNode(_component_el_form, {\n \"label-width\": \"100px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.tokenNameLabel')\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString($data.createdToken.name), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysSecurity.fullToken')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.createdToken.token,\n \"onUpdate:modelValue\": _cache[36] || (_cache[36] = $event => $data.createdToken.token = $event),\n readonly: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.copyToken\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('sysSecurity.copyBtn')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])])), [[_directive_loading, $data.loading]]);\n}","/**\r\n * Token 过期时间工具模块\r\n * 提供 Token 有效期计算、状态判定和向后兼容默认值填充功能\r\n */\r\n\r\n/**\r\n * 时间单位到毫秒的映射(月和年需要特殊处理)\r\n */\r\nconst SIMPLE_UNIT_MS = {\r\n s: 1000,\r\n m: 60 * 1000,\r\n h: 60 * 60 * 1000,\r\n d: 24 * 60 * 60 * 1000,\r\n};\r\n\r\n/**\r\n * 根据基准时间、数值和时间单位计算过期时间\r\n * @param {Date|string} baseTime - 基准时间(Date 对象或 ISO 8601 字符串)\r\n * @param {number} value - 正整数有效期数值\r\n * @param {string} unit - 时间单位:'s','m','h','d','M','Y'\r\n * @returns {string} 过期时间 ISO 8601 字符串\r\n * @throws {Error} 当 value <= 0 或 unit 无效时抛出错误\r\n */\r\nexport function computeExpiresAt(baseTime, value, unit) {\r\n if (!Number.isFinite(value) || value <= 0) {\r\n throw new Error('有效期数值必须大于 0');\r\n }\r\n\r\n const base = typeof baseTime === 'string' ? new Date(baseTime) : new Date(baseTime.getTime());\r\n\r\n if (SIMPLE_UNIT_MS[unit]) {\r\n return new Date(base.getTime() + value * SIMPLE_UNIT_MS[unit]).toISOString();\r\n }\r\n\r\n if (unit === 'M') {\r\n base.setUTCMonth(base.getUTCMonth() + value);\r\n return base.toISOString();\r\n }\r\n\r\n if (unit === 'Y') {\r\n base.setUTCFullYear(base.getUTCFullYear() + value);\r\n return base.toISOString();\r\n }\r\n\r\n throw new Error(`无效的时间单位: ${unit}`);\r\n}\r\n\r\n\r\n/**\r\n * 格式化过期时间为可读字符串\r\n * @param {string} isoString - ISO 8601 时间字符串\r\n * @returns {string} 格式化后的时间字符串\r\n */\r\nfunction formatExpiresTime(isoString) {\r\n const date = new Date(isoString);\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const hours = String(date.getHours()).padStart(2, '0');\r\n const minutes = String(date.getMinutes()).padStart(2, '0');\r\n const seconds = String(date.getSeconds()).padStart(2, '0');\r\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\r\n}\r\n\r\n/**\r\n * 获取 Token 的状态信息\r\n * @param {string|null} expiresAt - 过期时间 ISO 8601 字符串,null 表示永不过期\r\n * @param {Date} [now=new Date()] - 当前时间\r\n * @returns {{ status: 'active'|'expired', label: '有效'|'已过期', expiresText: string }}\r\n */\r\nexport function getTokenStatus(expiresAt, now = new Date()) {\r\n if (expiresAt === null || expiresAt === undefined) {\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: '永不过期',\r\n };\r\n }\r\n\r\n const expiresDate = new Date(expiresAt);\r\n const currentTime = now instanceof Date ? now : new Date(now);\r\n const formattedTime = formatExpiresTime(expiresAt);\r\n\r\n if (currentTime.getTime() > expiresDate.getTime()) {\r\n return {\r\n status: 'expired',\r\n label: '已过期',\r\n expiresText: formattedTime,\r\n };\r\n }\r\n\r\n return {\r\n status: 'active',\r\n label: '有效',\r\n expiresText: formattedTime,\r\n };\r\n}\r\n\r\n\r\n/**\r\n * 为缺少过期相关字段的旧 Token 数据填充默认值\r\n * @param {Object} tokenData - Token 数据对象\r\n * @returns {Object} 填充默认值后的新 Token 数据对象\r\n */\r\nexport function applyTokenDefaults(tokenData) {\r\n return {\r\n ...tokenData,\r\n expiresAt: tokenData.expiresAt ?? null,\r\n autoDelete: tokenData.autoDelete ?? false,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nimport { computeExpiresAt, getTokenStatus } from '@/utils/tokenExpiration';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n authSettings: {\n user: {},\n admin: {}\n },\n uploadSettings: {\n moderate: {},\n ipQuery: {\n enabled: false,\n channel: 'customApi',\n customApi: {\n url: '',\n params: [{\n key: 'ip',\n value: '{ip}'\n }],\n responseFields: []\n }\n }\n },\n accessSettings: {},\n apiTokens: [],\n // API Token列表\n // 加载状态\n loading: true,\n tokenLoading: false,\n // 修改密码相关\n oriUserPassword: '',\n // 原上传密码\n oriAdminPassword: '',\n // 原管理端密码\n\n showUserPassConfirm: false,\n // 显示用户密码确认框\n showAdminPassConfirm: false,\n // 显示管理密码确认框\n clearUserPassword: false,\n // 清除用户密码开关\n clearAdminPassword: false,\n // 清除管理密码开关\n\n // Token对话框相关\n showCreateTokenDialog: false,\n showEditTokenDialog: false,\n showTokenResultDialog: false,\n timeUnitOptions: [{\n labelKey: 'sysSecurity.timeUnitSeconds',\n value: 's'\n }, {\n labelKey: 'sysSecurity.timeUnitMinutes',\n value: 'm'\n }, {\n labelKey: 'sysSecurity.timeUnitHours',\n value: 'h'\n }, {\n labelKey: 'sysSecurity.timeUnitDays',\n value: 'd'\n }, {\n labelKey: 'sysSecurity.timeUnitMonths',\n value: 'M'\n }, {\n labelKey: 'sysSecurity.timeUnitYears',\n value: 'Y'\n }],\n newToken: {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n editingToken: {\n id: '',\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n },\n createdToken: {\n name: '',\n token: ''\n }\n };\n },\n computed: {\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n userPassRules() {\n return {\n authCode: [{\n validator: (rule, value, callback) => {\n const urlReservedChars = ['%', '&', '?', '#', '/'];\n const hasReservedChar = urlReservedChars.some(char => value && value.includes(char));\n if (hasReservedChar) {\n callback(new Error(this.$t('sysSecurity.passwordUrlReserved')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }],\n confirmNewUserPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmUploadPassword')));\n } else if (value !== this.authSettings.user.authCode) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n adminPassRules() {\n return {\n confirmNewAdminPassword: [{\n validator: (rule, value, callback) => {\n if (!value) {\n callback(new Error(this.$t('sysSecurity.confirmAdminPassword')));\n } else if (value !== this.authSettings.admin.adminPassword) {\n callback(new Error(this.$t('sysSecurity.passwordMismatch')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n accessRules() {\n const validateSessionMaxAge = (rule, value, callback) => {\n if (!Number.isInteger(value) || value < 1 || value > 3650) {\n callback(new Error(this.$t('sysSecurity.sessionMaxAgeInvalid')));\n } else {\n callback();\n }\n };\n return {\n userSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }],\n adminSessionMaxAge: [{\n validator: validateSessionMaxAge,\n trigger: 'change'\n }]\n };\n },\n tokenRules() {\n return {\n name: [{\n required: true,\n message: this.$t('sysSecurity.tokenNameRequired'),\n trigger: 'blur'\n }],\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.newToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n },\n editTokenRules() {\n return {\n permissions: [{\n required: true,\n message: this.$t('sysSecurity.permissionsRequired'),\n trigger: 'change'\n }],\n expirationValue: [{\n validator: (rule, value, callback) => {\n if (!this.editingToken.neverExpire && (!value || value <= 0)) {\n callback(new Error(this.$t('sysSecurity.validPeriodRequired')));\n } else {\n callback();\n }\n },\n trigger: 'blur'\n }]\n };\n }\n },\n methods: {\n normalizeIpQuerySettings(settings = {}) {\n const ipQuery = settings.ipQuery || {};\n const customApi = ipQuery.customApi || {};\n const params = Array.isArray(customApi.params) && customApi.params.length > 0 ? customApi.params.map(param => ({\n key: param?.key || '',\n value: param?.value || ''\n })) : [{\n key: 'ip',\n value: '{ip}'\n }];\n const responseFields = Array.isArray(customApi.responseFields) ? customApi.responseFields.map(field => {\n if (typeof field === 'string') return field;\n return field?.path || '';\n }) : [];\n return {\n ...settings,\n moderate: settings.moderate || {},\n ipQuery: {\n enabled: ipQuery.enabled ?? false,\n channel: ipQuery.channel || 'customApi',\n customApi: {\n url: customApi.url || '',\n params,\n responseFields\n }\n }\n };\n },\n addIpQueryParam() {\n this.uploadSettings.ipQuery.customApi.params.push({\n key: '',\n value: ''\n });\n },\n removeIpQueryParam(index) {\n if (this.uploadSettings.ipQuery.customApi.params.length <= 1) return;\n this.uploadSettings.ipQuery.customApi.params.splice(index, 1);\n },\n addIpQueryResponseField() {\n this.uploadSettings.ipQuery.customApi.responseFields.push('');\n },\n removeIpQueryResponseField(index) {\n this.uploadSettings.ipQuery.customApi.responseFields.splice(index, 1);\n },\n moveIpQueryResponseField(index, direction) {\n const fields = this.uploadSettings.ipQuery.customApi.responseFields;\n const targetIndex = index + direction;\n if (targetIndex < 0 || targetIndex >= fields.length) return;\n const [field] = fields.splice(index, 1);\n fields.splice(targetIndex, 0, field);\n },\n handleUserPassInput() {\n if (this.authSettings.user.authCode !== this.oriUserPassword) {\n this.showUserPassConfirm = true;\n } else {\n this.showUserPassConfirm = false;\n }\n },\n handleAdminPassInput() {\n if (this.authSettings.admin.adminPassword !== this.oriAdminPassword) {\n this.showAdminPassConfirm = true;\n } else {\n this.showAdminPassConfirm = false;\n }\n },\n handleClearUserPassword(checked) {\n if (checked) {\n this.authSettings.user.authCode = '';\n this.showUserPassConfirm = false;\n }\n },\n handleClearAdminPassword(checked) {\n if (checked) {\n this.authSettings.admin.adminPassword = '';\n this.authSettings.admin.adminUsername = '';\n this.showAdminPassConfirm = false;\n }\n },\n // Token相关方法\n getPermissionText(permission) {\n const permissionMap = {\n 'upload': this.$t('sysSecurity.permUpload'),\n 'delete': this.$t('sysSecurity.permDelete'),\n 'list': this.$t('sysSecurity.permList'),\n 'manage': this.$t('sysSecurity.permManage')\n };\n return permissionMap[permission] || permission;\n },\n formatDate(dateString) {\n return new Date(dateString).toLocaleString('zh-CN');\n },\n async loadApiTokens() {\n this.tokenLoading = true;\n try {\n const response = await fetchWithAuth('/api/manage/apiTokens');\n const data = await response.json();\n this.apiTokens = data.tokens || [];\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenListFailed'));\n } finally {\n this.tokenLoading = false;\n }\n },\n createToken() {\n this.$refs.tokenForm.validate(async valid => {\n if (!valid) return;\n try {\n this.newToken.owner = 'admin'; // 默认所有Token归属管理员\n\n let expiresAt = null;\n let autoDelete = false;\n if (!this.newToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.newToken.expirationValue, this.newToken.expirationUnit);\n autoDelete = this.newToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n name: this.newToken.name,\n owner: this.newToken.owner,\n permissions: this.newToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.createdToken = {\n name: data.name,\n token: data.token\n };\n this.showCreateTokenDialog = false;\n this.showTokenResultDialog = true;\n this.newToken = {\n name: '',\n owner: '',\n permissions: [],\n neverExpire: true,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: false\n };\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenCreateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenCreateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenCreateFailed'));\n }\n });\n },\n editToken(token) {\n const hasExpiration = token.expiresAt !== null && token.expiresAt !== undefined;\n this.editingToken = {\n id: token.id,\n name: token.name,\n owner: token.owner,\n permissions: [...token.permissions],\n neverExpire: !hasExpiration,\n expirationValue: 1,\n expirationUnit: 'd',\n autoDelete: token.autoDelete || false\n };\n this.showEditTokenDialog = true;\n },\n updateToken() {\n this.$refs.editTokenForm.validate(async valid => {\n if (!valid) return;\n try {\n let expiresAt = null;\n let autoDelete = false;\n if (!this.editingToken.neverExpire) {\n expiresAt = computeExpiresAt(new Date(), this.editingToken.expirationValue, this.editingToken.expirationUnit);\n autoDelete = this.editingToken.autoDelete;\n }\n const response = await fetchWithAuth('/api/manage/apiTokens', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n tokenId: this.editingToken.id,\n permissions: this.editingToken.permissions,\n expiresAt,\n autoDelete\n })\n });\n const data = await response.json();\n if (response.ok) {\n this.showEditTokenDialog = false;\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenUpdateSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenUpdateFailed'));\n }\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.tokenUpdateFailed'));\n }\n });\n },\n async deleteToken(tokenId) {\n try {\n await this.$confirm(this.$t('sysSecurity.tokenDeleteConfirm'), this.$t('sysSecurity.tokenDeleteConfirmTitle'), {\n confirmButtonText: this.$t('sysSecurity.tokenDeleteConfirmOk'),\n cancelButtonText: this.$t('sysSecurity.tokenDeleteConfirmCancel'),\n type: 'warning'\n });\n const response = await fetchWithAuth(`/api/manage/apiTokens?id=${tokenId}`, {\n method: 'DELETE'\n });\n const data = await response.json();\n if (response.ok) {\n await this.loadApiTokens();\n this.$message.success(this.$t('sysSecurity.tokenDeleteSuccess'));\n } else {\n this.$message.error(data.error || this.$t('sysSecurity.tokenDeleteFailed'));\n }\n } catch (error) {\n if (error !== 'cancel') {\n this.$message.error(this.$t('sysSecurity.tokenDeleteFailed'));\n }\n }\n },\n async copyToken() {\n try {\n await navigator.clipboard.writeText(this.createdToken.token);\n this.$message.success(this.$t('sysSecurity.tokenCopied'));\n } catch (error) {\n this.$message.error(this.$t('sysSecurity.copyFailed'));\n }\n },\n onCreateNeverExpireChange(val) {\n if (val) {\n this.newToken.autoDelete = false;\n }\n },\n onEditNeverExpireChange(val) {\n if (val) {\n this.editingToken.autoDelete = false;\n }\n },\n getTokenStatus(expiresAt) {\n return getTokenStatus(expiresAt);\n },\n saveSettings() {\n // 所有表单的Promise数组\n let validationPromises = [];\n\n // 验证用户密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.userPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证管理密码表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.adminPassForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 验证会话安全策略表单\n validationPromises.push(new Promise(resolve => {\n this.$refs.accessForm.validate(valid => {\n resolve(valid);\n });\n }));\n\n // 等待所有验证完成\n Promise.all(validationPromises).then(results => {\n const isValid = results.every(valid => valid);\n if (!isValid) {\n return;\n }\n\n // 验证会话有效期为 1-3650 的正整数\n if (this.accessSettings.userSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.userSessionMaxAge) || this.accessSettings.userSessionMaxAge > 3650 || this.accessSettings.adminSessionMaxAge < 1 || !Number.isInteger(this.accessSettings.adminSessionMaxAge) || this.accessSettings.adminSessionMaxAge > 3650) {\n this.$message.error(this.$t('sysSecurity.sessionMaxAgeInvalid'));\n return;\n }\n const settings = {\n auth: this.authSettings,\n upload: this.uploadSettings,\n access: this.accessSettings\n };\n // 不保存确认密码相关字段\n delete settings.auth.user.confirmNewUserPassword;\n delete settings.auth.admin.confirmNewAdminPassword;\n\n // 标记清除密码\n if (this.clearUserPassword) {\n settings.auth.user._clear = true;\n settings.auth.user.authCode = '';\n }\n if (this.clearAdminPassword) {\n settings.auth.admin._clear = true;\n settings.auth.admin.adminPassword = '';\n }\n fetchWithAuth('/api/manage/sysConfig/security', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(settings)\n }).then(res => res.json()).then(data => {\n // 管理端密码变更后,当前会话已被清除,需要重新登录\n if (data.adminPasswordChanged) {\n const msg = this.$t('sysSecurity.adminPasswordChangedRelogin');\n this.$message.warning(msg);\n setTimeout(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n }, 1500);\n return;\n }\n this.$message.success(this.$t('sysSecurity.settingsSaved'));\n // 保存成功后重置密码字段为空(后端已处理)\n this.authSettings.user.authCode = '';\n this.authSettings.admin.adminPassword = '';\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n // 标记已有密码(如果用户刚设置了密码,且不是清除操作)\n if (settings.auth.user.authCode && !settings.auth.user._clear) {\n this.authSettings.user._hasPassword = true;\n } else if (settings.auth.user._clear) {\n this.authSettings.user._hasPassword = false;\n }\n if (settings.auth.admin.adminPassword && !settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = true;\n } else if (settings.auth.admin._clear) {\n this.authSettings.admin._hasPassword = false;\n }\n this.showUserPassConfirm = false;\n this.showAdminPassConfirm = false;\n this.clearUserPassword = false;\n this.clearAdminPassword = false;\n }).catch(() => {\n // 如果请求过程中 session 已失效导致 fetchWithAuth 跳转,忽略后续错误\n });\n });\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/security').then(response => response.json()).then(data => {\n this.authSettings = data.auth;\n this.uploadSettings = this.normalizeIpQuerySettings(data.upload);\n this.accessSettings = data.access;\n\n // 密码从后端返回为空(安全考虑),记录原始空值\n this.oriUserPassword = '';\n this.oriAdminPassword = '';\n this.authSettings.user.confirmNewUserPassword = '';\n this.authSettings.admin.confirmNewAdminPassword = '';\n\n // 加载API Token列表\n this.loadApiTokens();\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogSecurity.vue?vue&type=template&id=906380e0&scoped=true\"\nimport script from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogSecurity.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogSecurity.vue?vue&type=style&index=0&id=906380e0&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-906380e0\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"page-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedSettings, (categoryGroup, categoryName) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: categoryName,\n class: \"first-settings\"\n }, [_createElementVNode(\"h3\", _hoisted_2, _toDisplayString(categoryName), 1), _createVNode(_component_el_form, {\n model: $data.settings,\n \"label-width\": \"150px\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(categoryGroup, (setting, index) => {\n return _openBlock(), _createBlock(_component_el_form_item, {\n key: setting.id\n }, {\n label: _withCtx(() => [_createTextVNode(_toDisplayString($options.localized(setting, 'label')) + \" \", 1), setting.tooltip ? (_openBlock(), _createBlock(_component_el_tooltip, {\n key: 0,\n content: $options.localized(setting, 'tooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])) : _createCommentVNode(\"\", true)]),\n default: _withCtx(() => [setting.type === 'select' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 0,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder'),\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(setting.options, option => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: option.value,\n label: $options.localizedOption(option),\n value: option.value\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 2\n }, 1032, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'channelName' ? (_openBlock(), _createBlock(_component_el_select, {\n key: 1,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: !$options.currentUploadChannel || $options.currentChannelList.length === 0,\n placeholder: _ctx.$t('sysPage.channelSelectPlaceholder'),\n clearable: \"\",\n style: {\n \"width\": \"100%\"\n }\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : setting.type === 'boolean' ? (_openBlock(), _createBlock(_component_el_switch, {\n key: 2,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\"])) : setting.type === 'textarea' ? (_openBlock(), _createBlock(_component_el_input, {\n key: 3,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n type: \"textarea\",\n autosize: {\n minRows: 2\n },\n resize: \"vertical\",\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 4,\n modelValue: setting.value,\n \"onUpdate:modelValue\": $event => setting.value = $event,\n disabled: setting.fixed,\n placeholder: $options.localized(setting, 'placeholder')\n }, null, 8, [\"modelValue\", \"onUpdate:modelValue\", \"disabled\", \"placeholder\"]))]),\n _: 2\n }, 1024);\n }), 128))]),\n _: 2\n }, 1032, [\"model\"])]);\n }), 128)), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport axios from '@/utils/axios';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n config: []\n },\n // 加载状态\n loading: true,\n // 可用渠道列表\n availableChannels: {}\n };\n },\n computed: {\n isEn() {\n return this.$i18n.locale === 'en';\n },\n // 根据category将配置项分组\n groupedSettings() {\n const grouped = {};\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n const category = this.isEn ? setting.category_en || setting.category || this.$t('sysPage.otherSettings') : setting.category || this.$t('sysPage.otherSettings');\n if (!grouped[category]) {\n grouped[category] = [];\n }\n grouped[category].push(setting);\n });\n }\n return grouped;\n },\n // 当前选择的上传渠道\n currentUploadChannel() {\n const channelSetting = this.settings.config?.find(s => s.id === 'defaultUploadChannel');\n return channelSetting?.value || '';\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.currentUploadChannel] || [];\n }\n },\n watch: {\n // 监听上传渠道变化,清空渠道名称(如果不在新列表中)\n currentUploadChannel(newVal, oldVal) {\n if (newVal !== oldVal) {\n const channelNameSetting = this.settings.config?.find(s => s.id === 'defaultChannelName');\n if (channelNameSetting) {\n const newChannelList = this.availableChannels[newVal] || [];\n if (!newChannelList.some(ch => ch.name === channelNameSetting.value)) {\n channelNameSetting.value = '';\n }\n }\n }\n }\n },\n methods: {\n localized(item, field) {\n if (this.isEn && item[field + '_en']) return item[field + '_en'];\n return item[field] || '';\n },\n localizedOption(option) {\n if (this.isEn && option.label_en) return option.label_en;\n return option.label;\n },\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/page', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(this.settings)\n }).then(() => this.$message.success(this.$t('sysPage.settingsSaved')));\n },\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels');\n if (response.data) {\n this.availableChannels = response.data;\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/page').then(response => response.json()).then(data => {\n this.settings = data;\n // 处理布尔类型的值初始化\n if (this.settings.config) {\n this.settings.config.forEach(setting => {\n if (setting.type === 'boolean') {\n // 将字符串转换为布尔值\n if (typeof setting.value === 'string') {\n setting.value = setting.value === 'true';\n } else if (setting.value === undefined || setting.value === null) {\n // 如果没有值,使用默认值\n setting.value = setting.default || false;\n }\n }\n });\n }\n }).finally(() => {\n this.loading = false;\n });\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogPage.vue?vue&type=template&id=e4c3a742&scoped=true\"\nimport script from \"./SysCogPage.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogPage.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogPage.vue?vue&type=style&index=0&id=e4c3a742&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-e4c3a742\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"others-settings\"\n};\nconst _hoisted_2 = {\n class: \"first-settings\"\n};\nconst _hoisted_3 = {\n class: \"first-title\"\n};\nconst _hoisted_4 = {\n class: \"first-title\"\n};\nconst _hoisted_5 = {\n class: \"first-title\"\n};\nconst _hoisted_6 = {\n class: \"first-title\"\n};\nconst _hoisted_7 = [\"innerHTML\"];\nconst _hoisted_8 = {\n class: \"first-title\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_FloatingSaveButton = _resolveComponent(\"FloatingSaveButton\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h3\", _hoisted_3, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.remoteTelemetry')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.remoteTelemetryTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.telemetry,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.telemetry.enabled,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.settings.telemetry.enabled = $event),\n disabled: $data.settings.telemetry.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_4, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.cloudflareApiToken')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.cloudflareApiTokenTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.cloudflareApiToken,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.zoneId')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_ZONE_ID,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.settings.cloudflareApiToken.CF_ZONE_ID = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.accountEmail')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_EMAIL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.settings.cloudflareApiToken.CF_EMAIL = $event),\n disabled: $data.settings.cloudflareApiToken.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: \"API Key\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.cloudflareApiToken.CF_API_KEY,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.settings.cloudflareApiToken.CF_API_KEY = $event),\n disabled: $data.settings.cloudflareApiToken.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_5, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.randomImageApi')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.randomImageApiTooltip'),\n placement: \"right\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.randomImageAPI,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.randomImageAPI.enabled,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.settings.randomImageAPI.enabled = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"randomImageAPI.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.directory')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.directoryTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.randomImageAPI.allowedDir,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.settings.randomImageAPI.allowedDir = $event),\n disabled: $data.settings.randomImageAPI.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_6, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.publicBrowse')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.publicBrowseTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.publicBrowse,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.publicBrowse.enabled,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.settings.publicBrowse.enabled = $event),\n disabled: $data.settings.publicBrowse.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n prop: \"publicBrowse.allowedDir\"\n }, {\n label: _withCtx(() => [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('sysOthers.openDirectory')), 1), _createVNode(_component_el_tooltip, {\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n content: _withCtx(() => [_createElementVNode(\"div\", {\n style: {\n \"max-width\": \"320px\",\n \"line-height\": \"1.6\"\n },\n innerHTML: _ctx.$t('sysOthers.openDirectoryTooltip')\n }, null, 8, _hoisted_7)]),\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.publicBrowse.allowedDir,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.settings.publicBrowse.allowedDir = $event),\n disabled: $data.settings.publicBrowse.fixed,\n placeholder: \"wallpaper,photos,album\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model\"]), _createElementVNode(\"h3\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('sysOthers.webdav')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('sysOthers.webdavTooltip'),\n placement: \"right\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n style: {\n \"margin-left\": \"5px\",\n \"cursor\": \"pointer\"\n }\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_form, {\n model: $data.settings.webDAV,\n \"label-width\": \"120px\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.enable')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_switch, {\n modelValue: $data.settings.webDAV.enabled,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.settings.webDAV.enabled = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUsername')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.username,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.settings.webDAV.username = $event),\n disabled: $data.settings.webDAV.fixed\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavPassword')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.settings.webDAV.password,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.settings.webDAV.password = $event),\n disabled: $data.settings.webDAV.fixed,\n type: \"password\",\n \"show-password\": \"\",\n autocomplete: \"new-password\"\n }, null, 8, [\"modelValue\", \"disabled\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_form_item, {\n label: _ctx.$t('sysOthers.webdavUploadChannel')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.uploadChannel,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.settings.webDAV.uploadChannel = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('sysOthers.webdavDefaultChannel'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_option, {\n label: \"Telegram\",\n value: \"telegram\"\n }), _createVNode(_component_el_option, {\n label: \"Cloudflare R2\",\n value: \"cfr2\"\n }), _createVNode(_component_el_option, {\n label: \"S3\",\n value: \"s3\"\n }), _createVNode(_component_el_option, {\n label: \"Discord\",\n value: \"discord\"\n }), _createVNode(_component_el_option, {\n label: \"HuggingFace\",\n value: \"huggingface\"\n }), _createVNode(_component_el_option, {\n label: \"WebDAV\",\n value: \"webdav\"\n })]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"]), $data.settings.webDAV.uploadChannel && $options.webdavChannelList.length > 1 ? (_openBlock(), _createBlock(_component_el_form_item, {\n key: 0,\n label: _ctx.$t('sysOthers.webdavChannelName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_select, {\n modelValue: $data.settings.webDAV.channelName,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.settings.webDAV.channelName = $event),\n disabled: $data.settings.webDAV.fixed,\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.webdavChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\", \"disabled\", \"placeholder\"])]),\n _: 1\n }, 8, [\"label\"])) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"model\"])]), _createVNode(_component_FloatingSaveButton, {\n show: !$data.loading,\n onClick: $options.saveSettings\n }, null, 8, [\"show\", \"onClick\"])])), [[_directive_loading, $data.loading]]);\n}","import \"core-js/modules/es.json.stringify.js\";\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport FloatingSaveButton from '@/components/FloatingSaveButton.vue';\nexport default {\n components: {\n FloatingSaveButton\n },\n data() {\n return {\n settings: {\n telemetry: {},\n randomImageAPI: {},\n cloudflareApiToken: {},\n webDAV: {},\n publicBrowse: {}\n },\n availableChannels: {},\n // 可用渠道列表\n // 加载状态\n loading: true\n };\n },\n computed: {\n // WebDAV 当前渠道类型对应的渠道列表\n webdavChannelList() {\n const channelType = this.settings.webDAV?.uploadChannel;\n return channelType ? this.availableChannels[channelType] || [] : [];\n }\n },\n watch: {\n 'settings.webDAV.uploadChannel'() {\n // 切换渠道类型时清空指定的渠道名称\n if (this.settings.webDAV) {\n this.settings.webDAV.channelName = '';\n }\n }\n },\n methods: {\n saveSettings() {\n fetchWithAuth('/api/manage/sysConfig/others', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(this.settings)\n }).then(() => this.$message.success(this.$t('sysOthers.settingsSaved')));\n },\n async fetchAvailableChannels() {\n try {\n const response = await fetchWithAuth('/api/channels');\n if (response.ok) {\n this.availableChannels = await response.json();\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n }\n },\n mounted() {\n this.loading = true;\n // 获取上传设置\n fetchWithAuth('/api/manage/sysConfig/others').then(response => response.json()).then(data => {\n this.settings = data;\n }).finally(() => {\n this.loading = false;\n });\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SysCogOthers.vue?vue&type=template&id=67b1b002&scoped=true\"\nimport script from \"./SysCogOthers.vue?vue&type=script&lang=js\"\nexport * from \"./SysCogOthers.vue?vue&type=script&lang=js\"\n\nimport \"./SysCogOthers.vue?vue&type=style&index=0&id=67b1b002&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-67b1b002\"]])\n\nexport default __exports__","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport SysConfigTabs from '@/components/config/SysConfigTabs.vue';\nimport SysCogStatus from '@/components/config/SysCogStatus.vue';\nimport SysCogUpload from '@/components/config/SysCogUpload.vue';\nimport SysCogSecurity from '@/components/config/SysCogSecurity.vue';\nimport SysCogPage from '@/components/config/SysCogPage.vue';\nimport SysCogOthers from '@/components/config/SysCogOthers.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'SystemConfig',\n mixins: [backgroundManager],\n data() {\n return {\n activeIndex: 'status',\n isSidebarCollapse: false\n };\n },\n watch: {\n // 监听锚点变化\n '$route.hash': {\n immediate: true,\n handler(newHash) {\n this.activeIndex = newHash.replace('#', '');\n window.scrollTo(0, 0); // 滚动到页面顶部\n }\n },\n activeIndex(newIndex) {\n // 更新锚点\n const hash = `#${newIndex}`;\n this.$router.push({\n hash\n });\n }\n },\n components: {\n DashboardTabs,\n SysConfigTabs,\n SysCogStatus,\n SysCogUpload,\n SysCogSecurity,\n SysCogPage,\n SysCogOthers\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n },\n // 根据锚点动态返回对应的组件\n currentComponent() {\n const hash = this.$route.hash.replace('#', '');\n switch (hash) {\n case 'status':\n return SysCogStatus;\n case 'upload':\n return SysCogUpload;\n case 'security':\n return SysCogSecurity;\n case 'page':\n return SysCogPage;\n case 'others':\n return SysCogOthers;\n default:\n return SysCogStatus;\n }\n }\n },\n methods: {\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n // 设置默认锚点\n setDefaultHash() {\n const defaultHash = '#status'; // 默认锚点\n window.location.hash = defaultHash;\n this.activeIndex = defaultHash.replace('#', '');\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n\n // 如果 URL 中没有锚点,则设置默认锚点\n if (!window.location.hash) {\n this.setDefaultHash();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SystemConfig.vue?vue&type=template&id=7607b77d&scoped=true\"\nimport script from \"./SystemConfig.vue?vue&type=script&lang=js\"\nexport * from \"./SystemConfig.vue?vue&type=script&lang=js\"\n\nimport \"./SystemConfig.vue?vue&type=style&index=0&id=7607b77d&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-7607b77d\"]])\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\"\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=33933ada&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=33933ada&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-33933ada\"]])\n\nexport default __exports__","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","isCollapse","ref","style","sidebarStyle","menuItems","item","key","index","activeIndex","onClick","$event","handleSelect","icon","$t","titleKey","args","toggleCollapse","name","props","type","String","default","Boolean","data","expandedWidth","computed","collapsedWidth","window","innerWidth","this","width","watch","$nextTick","measureWidth","methods","$emit","checkMobile","isMobile","el","$refs","sidebar","prevWidth","prevTransition","transition","wasCollapsed","classList","contains","remove","offsetWidth","natural","scrollWidth","add","mounted","addEventListener","beforeDestroy","removeEventListener","__exports__","_component_DashboardTabs","_component_el_tooltip","_component_el_header","_component_SysConfigTabs","activeTab","disabled","disableTooltip","content","placement","handleLogout","_","isSidebarCollapse","currentComponent","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","inputStart","inputmode","startDateLabel","onChange","handleManualInput","trim","rangeSeparator","inputEnd","endDateLabel","previousMonthLabel","goToPreviousMonth","monthTitle","nextMonthLabel","goToNextMonth","weekdayLabels","weekday","calendarDays","day","isCurrentMonth","isToday","draftStart","draftEnd","isInRange","selectDay","dayOfMonth","DAY_MS","padDatePart","value","padStart","formatDateKey","date","getFullYear","getMonth","getDate","parseDateKey","match","year","Number","month","Date","setHours","shiftMonth","amount","modelValue","Array","emits","today","displayYear","displayMonth","awaitingEnd","monthStart","start","getDay","todayKey","from","length","getTime","immediate","handler","syncFromModel","startDate","endDate","displayDate","range","commitRange","startKey","endKey","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_84","_hoisted_85","_hoisted_86","_component_el_button","_component_el_radio_button","_component_el_radio_group","_component_DateRangeCalendar","_component_el_dialog","_component_Line","_component_Doughnut","_component_el_progress","_component_el_image","_directive_loading","fetchIndexInfo","indexInfo","totalFiles","toLocaleString","formatTime","lastUpdated","getTimeAgo","openReleases","version","circle","openTrendDateDialog","trendGroupBy","size","label","trendDatePickerVisible","title","trendDateDialogWidth","trendDateRange","handleTrendDateRangeChange","hasTrendData","uploadTrendChartData","options","lineChartOptions","Object","keys","channelStats","channelChartData","chartOptions","count","channel","background","getChartColor","getPercentage","typeStats","typeChartData","aggregatedTypeStats","status","getTypeChartColor","isProcessing","phaseDescription","Math","round","processingProgress","percentage","current","total","estimatedTimeRemaining","message","plain","cancelOperation","processingError","suggestion","recoverable","retryOperation","dismissError","loading","rebuilding","rebuildIndex","backing","backupData","accept","handleFileSelect","restoring","selectRestoreFile","newestFile","oldestFile","openFileInNewTab","isImageFile","loadErrors","src","id","fit","onError","handleImageError","isVideoFile","muted","loop","autoplay","metadata","FileName","TimeStamp","v","lim","l","h","max","min","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","a","b","c","d","e","f","hex","h1","h2","eq","isShort","r","g","hexParse","str","ret","len","alpha","hexString","undefined","HUE_RE","hsl2rgbn","s","n","k","hsv2rgbn","hwb2rgbn","w","rgb","i","hueValue","rgb2hsl","calln","isArray","map","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","m","exec","p1","p2","rotate","deg","hslString","x","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","unpack","unpacked","tkeys","j","ok","nk","replace","parseInt","names","nameParse","transparent","toLowerCase","RGB_RE","rgbParse","rgbString","to","pow","interpolate","rgb1","rgb2","t","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","charAt","Color","constructor","_rgb","_valid","valid","obj","mix","color","weight","c1","c2","w2","p","w1","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","noop","uid","isNullOrUndef","prototype","toString","call","slice","isObject","isNumberFinite","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","callback","fn","thisArg","apply","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","source","target","create","klen","isValidKey","indexOf","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","keyResolvers","o","y","_splitKey","parts","split","part","push","_getKeyResolver","resolveObjectKey","resolver","_capitalize","toUpperCase","defined","isFunction","setsEqual","has","_isClickEvent","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","roundedRange","niceRange","floor","fraction","niceFraction","_factorize","result","sqrt","sort","pop","isNonPrimitive","Symbol","toPrimitive","isNumber","isNaN","almostWhole","rounded","_setMinAndMaxByKey","array","property","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","end","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","enumerable","forEach","method","base","res","object","unlistenArrayEvents","stub","splice","_arrayUnique","items","set","Set","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","check","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","_sorted","iScale","vScale","_parsed","spanGaps","dataset","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","findIndex","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","applyAnimationsDefaults","defaults","duration","easing","describe","_fallback","_indexable","_scriptable","properties","active","animation","resize","show","animations","visible","hide","applyLayoutsDefaults","autoPadding","padding","top","bottom","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","includes","Ticks","applyScaleDefaults","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","border","dash","dashOffset","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","overrides","descriptors","getScope$1","node","root","scope","Defaults","_descriptors","_appliers","backgroundColor","borderColor","datasets","devicePixelRatio","context","platform","getDevicePixelRatio","elements","events","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","override","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","appliers","toFontString","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","setRenderOpts","opts","translation","fillStyle","textAlign","textBaseline","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","resolve","inputs","info","cacheable","_addGrace","minmax","change","keepZero","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","_resolveScriptable","_resolveArray","getValue","Error","join","delete","createSubResolver","arr","filter","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","parse","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","getStyle","getPropertyValue","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","event","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","maintainHeight","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","setWidth","xPlus","leftForLtr","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","startBound","endBound","_boundSegment","prevValue","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","getSizeForArea","chartArea","field","getDatasetArea","getDatasetClipArea","_clip","Animator","_request","_charts","_running","_lastDate","_notify","anims","callbacks","numSteps","initial","currentStep","_refresh","_update","now","remaining","running","draw","_active","_total","tick","_getAnims","charts","complete","progress","listen","cb","reduce","acc","_duration","cancel","animator","interpolators","boolean","factor","c0","number","Animation","cfg","currentValue","_fn","_easing","_start","_target","_prop","_from","_to","_promises","update","elapsed","wait","promises","Promise","rej","resolved","Animations","config","_properties","configure","animationOptions","animatedProps","getOwnPropertyNames","option","_animateOptions","newOptions","resolveTargetOptions","_createAnimations","$shared","awaitAll","$animations","then","anim","all","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","found","convertObjectDataToArray","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","itemStacks","_top","_bottom","visualValues","_visualValues","getFirstScaleId","shift","createDatasetContext","createDataContext","dataIndex","raw","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","DatasetController","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","otherScale","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","resolveDatasetElementOptions","resolveDataElementOptions","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","arguments","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","getAllScaleValues","$bar","visibleMetas","concat","computeMinSampleSize","curr","_length","updateMinAndPrev","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","_defineProperty","BarController","super","bars","getBasePixel","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","grouped","currentParsed","iScaleValue","skipNull","find","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","_startPixel","_endPixel","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","axisCount","axisID","axisNumber","stackIndex","rects","_index_","_value_","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","useBorderRadius","borderRadius","fontColor","lineDash","lineDashOffset","lineJoin","legendItem","toggleDataVisibility","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PolarAreaController","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","abstract","DateAdapterBase","members","init","formats","diff","startOf","endOf","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","position","getSortedVisibleDatasetMetas","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","isPointInArea","evaluationFunc","inRange","getNearestRadialItems","getProps","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","minPadding","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","native","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","DomPlatform","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","Element","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","ceil","majorStart","majorEnd","reverseAlign","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","decimal","getDecimalForPixel","getBaseValue","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","tz","gz","bz","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","registerDefaults","unregister","itemDefaults","defaultRoutes","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","localIds","getOpts","pluginOpts","pluginScopeKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","error","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","scalesOptions","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","_handleEvent","_getActiveElements","clipSelf","outerAngleClip","innerAngleClip","clipWidth","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","inner","selfJoin","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineCap","getLineMethod","stepped","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","strokePathWithCache","path","_path","Path2D","strokePathDirect","segmentMethod","usePath2D","LineElement","_points","_segments","_pointsUpdated","_interpolate","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","maxR","enableBorder","boundingRects","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","below","unshift","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","above","doFill","fillColor","clipVertical","clipHorizontal","clipY","lineLoop","clipX","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","itemsEqual","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","SQRT2","yBoxTop","xBoxLeft","textDirection","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","isListened","hoveredItem","sameItem","onLeave","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","_element","afterEvent","ci","WeakMap","positioners","average","xSet","xAverage","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","beforeTitle","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","addIfString","addedLabels","findOrAddLabel","lastIndexOf","_getLabelForValue","CategoryScale","_startValue","_valueRange","_addedLabels","added","generateTicks$1","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","numericGeneratorOptions","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","apexesInArea","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","distanceFromCenter","getBasePosition","getPointLabelPosition","animate","INTERVALS","millisecond","common","second","minute","hour","week","quarter","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","timestamp","setMajorTicks","majorUnit","ticksFromTimestamps","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","CommonProps","required","datasetIdKey","updateMode","A11yProps","ariaLabel","ariaDescribedby","Props","destroyDelay","compatProps","internals","attrs","toRawIfProxy","isProxy","toRaw","cloneProxy","setOptions","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","addedDatasets","nextDataset","currentDataset","cloneData","nextData","defineComponent","setup","param","expose","slots","canvasRef","chartRef","shallowRef","renderChart","clonedData","proxiedData","Chart$1","destroyChart","onMounted","onUnmounted","param1","nextOptionsProxy","nextDataProxy","prevOptionsProxy","prevDataProxy","shouldUpdate","prevOptions","prevLabels","prevDatasets","nextTick","deep","role","createTypedChart","registerables","reforwardRef","Doughnut","Line","BatchOperationError","code","ERROR_HANDLERS","details","NETWORK","ABORT","createError","Response","TypeError","BatchProcessor","batchSize","abortController","fetchAllRecords","includeValue","AbortController","allRecords","totalFetched","batchCount","signal","aborted","response","fetchBatch","records","nextCursor","phase","batchError","URLSearchParams","fetchWithAuth","errorDetails","errorData","json","success","totalProcessed","abort","isAborted","IndexRebuilder","chunkSize","maxRetries","retryDelay","sessionId","generateSessionId","fetchConfig","databaseType","rebuild","processor","sortByTimestampDescending","chunks","splitIntoChunks","uploadChunkWithRetry","finalize","timestampA","timestampB","chunkId","lastError","attempt","uploadChunk","sleep","checksum","calculateChecksum","headers","createHttpError","totalChunks","random","encoder","TextEncoder","dataBuffer","encode","crypto","subtle","hashBuffer","digest","hashArray","Uint8Array","imul","ms","BackupGenerator","generateBackup","packageInfo","fileCount","files","settings","record","fetchSettings","downloadBackup","settingsCount","blob","Blob","url","URL","createObjectURL","createElement","href","download","toISOString","appendChild","click","removeChild","revokeObjectURL","RestoreProcessor","fileEntries","settingEntries","totalSettings","totalItems","restoredFiles","restoredSettings","failedFiles","failedSettings","fileChunks","chunkData","fromEntries","restoredCount","failedCount","settingChunks","backupTimestamp","formatDateInput","getDefaultTrendDateRange","components","DateRangeCalendar","newest","oldest","channelColors","typeColors","trendColors","processingPhase","processingStartTime","currentRebuilder","currentBackupGenerator","currentRestoreProcessor","stats","aggregatedStats","mappedStatus","currentTrendGroup","trend","uploadTrend","groupBy","series","trendRawLabels","trendRangeCrossesYear","years","extractTrendLabelDates","trendDisplayLabels","formatTrendAxisLabel","totalColor","hexToRgba","pointBackgroundColor","pointBorderColor","pointRadius","pointHoverRadius","getTrendColor","formatTrendSeriesName","toFixed","totalEstimated","seconds","minutes","hours","remainingMinutes","phaseMap","isOther","dates","formatSingleDate","includeYear","monthDay","endLabel","getTrendDateRangeParams","action","timezoneOffset","getTimezoneOffset","trendMaxPoints","trendSeriesLimit","trendStartDate","trendEndDate","$message","warning","handleProgress","handleError","errorMessage","settingsMsg","fileInput","file","$confirm","confirmButtonText","cancelButtonText","restoreData","fileContent","parseError","days","isValidPreview","FileType","open","fileName","extension","substring","imageExtensions","videoExtensions","_component_ChannelIcon","isOpen","toggleDropdown","displayLabel","selectOption","$slots","channelType","iconClass","ChannelIcon","placeholder","resolvedPlaceholder","selected","opt","handleClickOutside","beforeUnmount","$el","_component_CustomSelect","_component_el_tag","_component_el_switch","_component_el_option","_component_el_select","_component_el_form_item","_component_el_input","_component_el_input_number","_component_el_form","_component_el_descriptions_item","_component_el_descriptions","channelFilter","filterOptions","showAddDialog","filteredChannels","getChannelIconClass","getChannelList","hasLoadBalance","getSettings","loadBalance","saveSettings","fixed","onMousemove","handleCardMouseMove","onMouseleave","handleCardMouseLeave","ref_for","maskText","botToken","chatId","publicUrl","bucketName","endpoint","channelId","isNitro","repo","isPrivate","baseUrl","quota","getQuotaPercentage","getQuotaStatus","getQuotaText","openDetailDialog","openEditDialog","deleteChannel","onClosed","resetAddForm","newChannel","confirmAddChannel","model","rules","addRules","onChannelTypeChange","addableChannels","ch","innerHTML","proxyUrl","cdnDomain","region","accessKeyId","secretAccessKey","pathStyle","limitGB","threshold","token","username","password","headersText","autosize","minRows","createDirectory","showDetailDialog","currentChannel","resetDetailData","openEditFromDetail","column","getChannelTypeLabel","currentChannelType","readonly","formatHeaders","link","refreshQuota","quotaLoading","isQuotaExceeded","getQuotaStatusText","showEditDialog","editChannel","resetEditData","confirmEditChannel","editRules","onQuotaEnabledChange","CustomSelect","channels","telegramSettings","cfr2Settings","s3Settings","discordSettings","huggingfaceSettings","webdavSettings","currentChannelIndex","quotaStats","pattern","card","currentTarget","refKey","glowEl","telegram","cfr2","s3","discord","huggingface","webdav","showLength","headersToText","parseHeadersText","addForm","validate","reservedNames","isDuplicate","newChannelData","savePath","editForm","currentIndex","originalName","editedChannel","catch","getResponse","getData","loadQuotaStats","getChannelUsedGB","usedMB","usedGB","async","recalculateQuota","finally","handleClick","spin","_component_el_checkbox","_component_el_table_column","_component_el_table","_component_FloatingSaveButton","_component_el_checkbox_group","authSettings","user","userPassRules","authCode","onInput","handleUserPassInput","autocomplete","_hasPassword","clearUserPassword","handleClearUserPassword","showUserPassConfirm","confirmNewUserPassword","admin","adminPassRules","adminUsername","clearAdminPassword","adminPassword","handleAdminPassInput","handleClearAdminPassword","showAdminPassConfirm","confirmNewAdminPassword","showCreateTokenDialog","apiTokens","permissions","perm","getPermissionText","formatDate","createdAt","getTokenStatus","expiresAt","expiresText","editToken","deleteToken","tokenLoading","uploadSettings","moderate","moderateContentApiKey","nsfwApiPath","ipQuery","customApi","removeIpQueryParam","addIpQueryParam","responseFields","moveIpQueryResponseField","removeIpQueryResponseField","addIpQueryResponseField","accessSettings","allowedDomains","accessRules","whiteListMode","sessionSecure","userSessionMaxAge","adminSessionMaxAge","dialogWidth","createToken","newToken","tokenRules","neverExpire","onCreateNeverExpireChange","expirationValue","expirationUnit","timeUnitOptions","labelKey","autoDelete","showEditTokenDialog","updateToken","editingToken","editTokenRules","onEditNeverExpireChange","showTokenResultDialog","createdToken","append","copyToken","SIMPLE_UNIT_MS","computeExpiresAt","baseTime","setUTCMonth","getUTCMonth","setUTCFullYear","getUTCFullYear","formatExpiresTime","isoString","getHours","getMinutes","getSeconds","expiresDate","currentTime","formattedTime","FloatingSaveButton","oriUserPassword","oriAdminPassword","owner","validator","rule","urlReservedChars","hasReservedChar","char","validateSessionMaxAge","isInteger","normalizeIpQuerySettings","fields","targetIndex","checked","permission","permissionMap","dateString","loadApiTokens","tokens","tokenForm","hasExpiration","editTokenForm","tokenId","navigator","clipboard","writeText","validationPromises","userPassForm","adminPassForm","accessForm","results","isValid","every","auth","upload","access","_clear","adminPasswordChanged","msg","$store","commit","$router","groupedSettings","categoryGroup","categoryName","setting","localized","localizedOption","currentUploadChannel","currentChannelList","clearable","availableChannels","isEn","$i18n","category","category_en","channelSetting","newVal","oldVal","channelNameSetting","newChannelList","label_en","fetchAvailableChannels","axios","telemetry","cloudflareApiToken","CF_ZONE_ID","CF_EMAIL","CF_API_KEY","randomImageAPI","allowedDir","publicBrowse","webDAV","uploadChannel","webdavChannelList","channelName","mixins","backgroundManager","newHash","scrollTo","newIndex","hash","DashboardTabs","SysConfigTabs","SysCogStatus","SysCogUpload","SysCogSecurity","SysCogPage","SysCogOthers","$route","fetch","credentials","authType","setDefaultHash","defaultHash","location","initializeBackground","viewBox","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons","_typeof","iterator","toPropertyKey"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/529.e05f38bd.js.map.gz b/frontend-dist/js/529.287c329f.js.map.gz similarity index 99% rename from frontend-dist/js/529.e05f38bd.js.map.gz rename to frontend-dist/js/529.287c329f.js.map.gz index ebd9ab8a..292583e4 100644 Binary files a/frontend-dist/js/529.e05f38bd.js.map.gz and b/frontend-dist/js/529.287c329f.js.map.gz differ diff --git a/frontend-dist/js/529.e05f38bd.js.gz b/frontend-dist/js/529.e05f38bd.js.gz deleted file mode 100644 index b9c2eb82..00000000 Binary files a/frontend-dist/js/529.e05f38bd.js.gz and /dev/null differ diff --git a/frontend-dist/js/770.865557c0.js b/frontend-dist/js/770.865557c0.js deleted file mode 100644 index 211ffc8a..00000000 --- a/frontend-dist/js/770.865557c0.js +++ /dev/null @@ -1,2 +0,0 @@ -(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[770],{4885:function(e,t,a){"use strict";a(85331)},13378:function(e,t,a){"use strict";a(85331),a(38736),a(79899)},15423:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return hn}});var i=a(99114),n=(a(85331),a(30694),a(49385)),s=(a(37952),a(31802)),r=(a(13378),a(9267)),o=(a(15616),a(33892)),l=a(80047),d=(a(99648),a(39623)),c=(a(29092),a(56768)),h=a(24232);const u={class:"move-file-dialog-wrapper"},f={class:"move-dialog-content"},m={class:"move-path-input-container"},p={class:"move-dialog-hint"},g={class:"dialog-footer"},b={class:"move-drawer-content"},v={class:"move-path-section"},k={class:"move-path-label"},y={class:"move-path-input-row"},_={class:"move-dialog-hint"},w={key:0,class:"embedded-tree-section"},F={class:"tree-section-header"},C={class:"tree-section-title"},T={class:"tree-container"},$={key:0,class:"error-state"},L={class:"error-text"},S={class:"node-label"},x={class:"drawer-footer"};function D(e,t,a,D,E,A){const I=d.WK,U=(0,c.g2)("font-awesome-icon"),z=l.S2,B=o.A,W=r.kZ,P=s.qk,R=n.pw,O=i.A;return(0,c.uX)(),(0,c.CE)("div",u,[A.isDesktop?((0,c.uX)(),(0,c.Wv)(W,{key:0,modelValue:A.dialogVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),width:"500px","show-close":!0,class:"move-dialog",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",g,[(0,c.bF)(z,{onClick:A.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(z,{type:"primary",loading:E.loading,onClick:A.handleConfirm},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",f,[(0,c.Lk)("div",m,[(0,c.bF)(I,{modelValue:E.targetPath,"onUpdate:modelValue":t[0]||(t[0]=e=>E.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},{prepend:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.targetDirectory")),1)]),_:1},8,["modelValue","placeholder"]),(0,c.bF)(B,{"current-directory":a.currentDirectory,source:"admin",onSelect:A.handleDirectorySelect},{trigger:(0,c.k6)(()=>[(0,c.bF)(z,{class:"directory-picker-trigger"},{default:(0,c.k6)(()=>[(0,c.bF)(U,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])]),(0,c.Lk)("p",p,(0,h.v_)(e.$t("moveFile.hint")),1)])]),_:1},8,["modelValue","title","onClose"])):((0,c.uX)(),(0,c.Wv)(R,{key:1,modelValue:A.dialogVisible,"onUpdate:modelValue":t[5]||(t[5]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),direction:"btt",size:"auto","show-close":!0,class:"move-drawer",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("div",x,[(0,c.bF)(z,{onClick:A.handleClose,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(z,{type:"primary",loading:E.loading,onClick:A.handleConfirm,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",b,[(0,c.Lk)("div",v,[(0,c.Lk)("div",k,(0,h.v_)(e.$t("moveFile.targetDirectory")),1),(0,c.Lk)("div",y,[(0,c.bF)(I,{modelValue:E.targetPath,"onUpdate:modelValue":t[2]||(t[2]=e=>E.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},null,8,["modelValue","placeholder"]),(0,c.bF)(z,{class:"directory-picker-trigger",onClick:t[3]||(t[3]=e=>E.showTreePicker=!0)},{default:(0,c.k6)(()=>[(0,c.bF)(U,{icon:"folder-tree"})]),_:1})]),(0,c.Lk)("p",_,(0,h.v_)(e.$t("moveFile.hintMobile")),1)]),E.showTreePicker?((0,c.uX)(),(0,c.CE)("div",w,[(0,c.Lk)("div",F,[(0,c.Lk)("span",C,(0,h.v_)(e.$t("moveFile.selectDirectory")),1),(0,c.bF)(z,{text:"",onClick:t[4]||(t[4]=e=>E.showTreePicker=!1)},{default:(0,c.k6)(()=>[(0,c.bF)(U,{icon:"times"})]),_:1})]),(0,c.bo)(((0,c.uX)(),(0,c.CE)("div",T,[E.treeError?((0,c.uX)(),(0,c.CE)("div",$,[(0,c.bF)(U,{icon:"exclamation-circle",class:"error-icon"}),(0,c.Lk)("span",L,(0,h.v_)(E.treeError),1),(0,c.bF)(z,{type:"primary",size:"small",onClick:A.fetchDirectoryTree},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.retry")),1)]),_:1},8,["onClick"])])):((0,c.uX)(),(0,c.Wv)(P,{key:1,ref:"treeRef",data:E.treeData,props:E.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:A.handleTreeNodeClick},{default:(0,c.k6)(({node:e,data:t})=>[(0,c.Lk)("span",{class:(0,h.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,c.bF)(U,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,c.Lk)("span",S,(0,h.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[O,E.treeLoading]])])):(0,c.Q3)("",!0)])]),_:1},8,["modelValue","title","onClose"]))])}var E=a(70797),A={name:"MoveFileDialog",components:{DirectoryTreePicker:o.A},props:{modelValue:{type:Boolean,default:!1},currentDirectory:{type:String,default:""},isBatchMove:{type:Boolean,default:!1},initialPath:{type:String,default:"/"}},emits:["update:modelValue","confirm","close"],data(){return{targetPath:"/",loading:!1,windowWidth:window.innerWidth,showTreePicker:!1,treeData:[],treeLoading:!1,treeError:"",treeProps:{children:"children",label:"name"}}},computed:{dialogVisible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},isDesktop(){return this.windowWidth>768}},watch:{modelValue(e){e&&(this.targetPath=this.initialPath||"/",this.showTreePicker=!1)},showTreePicker(e){e&&!this.isDesktop&&this.fetchDirectoryTree()}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},handleDirectorySelect(e){this.targetPath=e},handleConfirm(){this.$emit("confirm",this.targetPath)},handleClose(){this.$emit("update:modelValue",!1),this.$emit("close")},async fetchDirectoryTree(){this.treeLoading=!0,this.treeError="";try{const e=await(0,E.A)("/api/directoryTree",{method:"GET"});if(!e.ok)return void(401===e.status?this.treeError=this.$t("moveFile.authFailed"):this.treeError=this.$t("moveFile.serverError"));const t=await e.json();t.tree?this.treeData=[t.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),this.treeError=this.$t("moveFile.loadTreeFailed")}finally{this.treeLoading=!1}},handleTreeNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.targetPath=t,this.showTreePicker=!1}}},I=a(71241);const U=(0,I.A)(A,[["render",D],["__scopeId","data-v-7aaa437c"]]);var z=U,B=a(45130);const W={class:"mobile-drawer-header"},P={class:"mobile-drawer-title"},R={class:"mobile-drawer-content"},O=["onClick"];function N(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"drawer-slide"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-overlay",onClick:t[3]||(t[3]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"mobile-drawer",onClick:t[2]||(t[2]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",W,[(0,c.Lk)("span",P,(0,h.v_)(e.$t("mobileDirectory.title")),1),(0,c.bF)(r,{icon:"times",class:"mobile-drawer-close",onClick:s.close},null,8,["onClick"])]),(0,c.Lk)("div",R,[(0,c.Lk)("div",{class:(0,h.C4)(["mobile-drawer-item",{active:!a.currentPath}]),onClick:t[0]||(t[0]=e=>s.navigate(""))},[(0,c.bF)(r,{icon:"home",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.rootDirectory")),1)],2),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.pathParts,(e,t)=>((0,c.uX)(),(0,c.CE)("div",{key:t,class:(0,h.C4)(["mobile-drawer-item",{active:t===s.pathParts.length-1}]),style:(0,h.Tr)({paddingLeft:16*(t+1)+16+"px"}),onClick:e=>s.navigate(s.pathParts.slice(0,t+1).join("/"))},[(0,c.bF)(r,{icon:"folder",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e),1)],14,O))),128)),a.currentPath?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-back",onClick:t[1]||(t[1]=(...e)=>s.goBack&&s.goBack(...e))},[(0,c.bF)(r,{icon:"arrow-left",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.goBack")),1)])):(0,c.Q3)("",!0)])])])):(0,c.Q3)("",!0)]),_:1})])}a(18111),a(22489);var M={name:"MobileDirectoryDrawer",props:{modelValue:{type:Boolean,default:!1},currentPath:{type:String,default:""}},emits:["update:modelValue","navigate","goBack"],computed:{pathParts(){return this.currentPath.split("/").filter(Boolean)}},methods:{close(){this.$emit("update:modelValue",!1)},navigate(e){this.$emit("navigate",e),this.close()},goBack(){this.$emit("goBack"),this.close()}}};const V=(0,I.A)(M,[["render",N],["__scopeId","data-v-768efd1f"]]);var X=V;const j={class:"bottom-sheet-header"},K={class:"bottom-sheet-title"},Z={class:"bottom-sheet-content"};function G(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"bottom-sheet"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"bottom-sheet-overlay",onClick:t[9]||(t[9]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"bottom-sheet",onClick:t[8]||(t[8]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",j,[t[10]||(t[10]=(0,c.Lk)("div",{class:"bottom-sheet-handle"},null,-1)),(0,c.Lk)("span",K,(0,h.v_)(a.title),1)]),(0,c.Lk)("div",Z,[a.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[5]||(t[5]=e=>s.handleAction("folderCopy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[6]||(t[6]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFolder")),1)])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[0]||(t[0]=e=>s.handleAction("detail"))},[(0,c.bF)(r,{icon:"info-circle",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.viewDetail")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[1]||(t[1]=e=>s.handleAction("copy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[2]||(t[2]=e=>s.handleAction("download"))},[(0,c.bF)(r,{icon:"download",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.downloadFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[3]||(t[3]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[4]||(t[4]=e=>s.handleAction("tag"))},[(0,c.bF)(r,{icon:"tags",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.tagManagement")),1)])],64)),(0,c.Lk)("div",{class:"bottom-sheet-item bottom-sheet-danger",onClick:t[7]||(t[7]=e=>s.handleAction("delete"))},[(0,c.bF)(r,{icon:"trash-alt",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(a.isFolder?e.$t("mobileAction.deleteFolder"):e.$t("mobileAction.deleteFile")),1)])])])])):(0,c.Q3)("",!0)]),_:1})])}var H={name:"MobileActionSheet",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},isFolder:{type:Boolean,default:!1}},emits:["update:modelValue","action"],methods:{close(){this.$emit("update:modelValue",!1)},handleAction(e){this.$emit("action",e),this.close()}}};const q=(0,I.A)(H,[["render",G],["__scopeId","data-v-62bb601c"]]);var Q=q,Y=a(4275),J=a(89559),ee=a(12687);a(18785);const te={class:"batch-tag-container"},ae={class:"tab-content"},ie={class:"tab-description"},ne={class:"input-section"},se={key:0,class:"suggestions-panel"},re=["onClick"],oe={class:"tags-to-add-section"},le={key:0,class:"tags-container"},de={key:1,class:"empty-message"},ce={class:"action-buttons"},he={class:"tab-content"},ue={class:"tab-description"},fe={key:0,class:"common-tags-section"},me={class:"tags-container"},pe={key:1,class:"empty-message"},ge={class:"tab-content"},be={class:"tab-description"},ve={class:"action-buttons"};function ke(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=Y.v$,g=J.KR,b=Y.q,v=r.kZ;return(0,c.uX)(),(0,c.Wv)(v,{title:e.$t("batchTag.title"),modelValue:s.visible,"onUpdate:modelValue":t[2]||(t[2]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{default:(0,c.k6)(()=>[(0,c.Lk)("div",te,[(0,c.bF)(b,{modelValue:n.activeTab,"onUpdate:modelValue":t[1]||(t[1]=e=>n.activeTab=e),type:"border-card"},{default:(0,c.k6)(()=>[(0,c.bF)(p,{label:e.$t("batchTag.addTab"),name:"add"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ae,[(0,c.Lk)("p",ie,(0,h.v_)(e.$t("batchTag.addDescription",{count:s.fileCount})),1),(0,c.Lk)("div",ne,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("batchTag.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddInputTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddInputTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",se,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,re))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",oe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.pendingTags")),1),n.tagsToAdd.length>0?((0,c.uX)(),(0,c.CE)("div",le,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.tagsToAdd,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.removeFromToAdd(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",de,(0,h.v_)(e.$t("batchTag.noPendingTags")),1))]),(0,c.Lk)("div",ce,[(0,c.bF)(u,{type:"primary",onClick:s.executeAddTags,loading:n.loading,disabled:0===n.tagsToAdd.length},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.addToAllFiles")),1)]),_:1},8,["onClick","loading","disabled"])])])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.removeTab"),name:"remove"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",he,[(0,c.Lk)("p",ue,(0,h.v_)(e.$t("batchTag.removeDescription")),1),n.commonTags.length>0?((0,c.uX)(),(0,c.CE)("div",fe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.commonTags")),1),(0,c.Lk)("div",me,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.commonTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveCommonTag(e),class:"tag-item",type:"warning"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])])):((0,c.uX)(),(0,c.CE)("div",pe,(0,h.v_)(e.$t("batchTag.noCommonTags")),1))])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.clearTab"),name:"clear"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ge,[(0,c.Lk)("p",be,(0,h.v_)(e.$t("batchTag.clearDescription",{count:s.fileCount})),1),(0,c.bF)(g,{title:e.$t("batchTag.clearWarningTitle"),type:"warning",description:e.$t("batchTag.clearWarningDesc"),closable:!1,style:{"margin-bottom":"20px"},center:""},null,8,["title","description"]),(0,c.Lk)("div",ve,[(0,c.bF)(u,{type:"danger",onClick:s.handleClearAllTags,loading:n.loading},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.confirmClearAll")),1)]),_:1},8,["onClick","loading"])])])]),_:1},8,["label"])]),_:1},8,["modelValue"])])]),_:1},8,["title","modelValue","width","onClose"])}a(44114),a(61701),a(33110);var ye=a(51219),_e=a(12933),we={name:"BatchTagDialog",props:{modelValue:{type:Boolean,default:!1},selectedFiles:{type:Array,required:!0,default:()=>[]}},emits:["update:modelValue","tagsUpdated"],data(){return{activeTab:"add",inputTag:"",tagsToAdd:[],commonTags:[],suggestions:[],showSuggestions:!1,loading:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"600px"},selectedFilesOnly(){return this.selectedFiles.filter(e=>!e.isFolder)},fileCount(){return this.selectedFilesOnly.length},fileIds(){return this.selectedFilesOnly.map(e=>e.name)}},watch:{visible(e){e?this.loadCommonTags():this.resetData()},activeTab(e){"remove"===e&&this.loadCommonTags()}},methods:{resetData(){this.tagsToAdd=[],this.inputTag="",this.showSuggestions=!1,this.activeTab="add"},async loadCommonTags(){if(0!==this.selectedFilesOnly.length)try{const e=this.selectedFilesOnly.map(e=>(0,E.A)(`/api/manage/tags/${encodeURIComponent(e.name)}`,{method:"GET"})),t=await Promise.all(e),a=[];for(const i of t)if(i.ok){const e=await i.json();a.push(e.tags||[])}a.length>0?this.commonTags=a[0].filter(e=>a.every(t=>t.includes(e))):this.commonTags=[]}catch(e){console.error("Error loading common tags:",e),ye.nk.error(this.$t("batchTag.loadCommonTagsFailed"))}else this.commonTags=[]},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,E.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.tagsToAdd.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddInputTag()},handleAddInputTag(){const e=this.inputTag.trim();if(e){if(this.tagsToAdd.includes(e))return ye.nk.warning(this.$t("batchTag.tagAlreadyInList")),this.inputTag="",void(this.showSuggestions=!1);this.tagsToAdd.push(e),this.inputTag="",this.showSuggestions=!1}},removeFromToAdd(e){const t=this.tagsToAdd.indexOf(e);t>-1&&this.tagsToAdd.splice(t,1)},async executeAddTags(){if(0!==this.tagsToAdd.length){this.loading=!0;try{const e=await(0,E.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"add",tags:this.tagsToAdd})});if(!e.ok)throw new Error(this.$t("batchTag.addFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.addFailed"));ye.nk.success(this.$t("batchTag.addSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.tagsToAdd=[]}}catch(e){console.error("Error adding tags:",e),ye.nk.error(this.$t("batchTag.addFailed"))}finally{this.loading=!1}}else ye.nk.warning(this.$t("batchTag.pleaseAddTags"))},async handleRemoveCommonTag(e){this.loading=!0;try{const t=await(0,E.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("batchTag.removeFailed"));{const e=await t.json();if(!(e.success||e.updated>0))throw new Error(this.$t("batchTag.removeFailed"));ye.nk.success(this.$t("batchTag.removeSuccess",{count:e.updated})),this.$emit("tagsUpdated"),await this.loadCommonTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("batchTag.removeFailed"))}finally{this.loading=!1}},handleClearAllTags(){_e.s.confirm(this.$t("batchTag.clearConfirmMessage",{count:this.fileCount}),this.$t("batchTag.clearConfirmTitle"),{confirmButtonText:this.$t("batchTag.clearConfirmOk"),cancelButtonText:this.$t("batchTag.clearConfirmCancel"),type:"warning"}).then(()=>{this.executeClearTags()}).catch(()=>{ye.nk.info(this.$t("batchTag.clearCancelled"))})},async executeClearTags(){this.loading=!0;try{const e=await(0,E.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"set",tags:[]})});if(!e.ok)throw new Error(this.$t("batchTag.clearFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.clearFailed"));ye.nk.success(this.$t("batchTag.clearSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.commonTags=[]}}catch(e){console.error("Error clearing tags:",e),ye.nk.error(this.$t("batchTag.clearFailed"))}finally{this.loading=!1}},handleClose(){this.visible=!1}}};const Fe=(0,I.A)(we,[["render",ke],["__scopeId","data-v-ec3adcfc"]]);var Ce=Fe,Te=a(813);a(34896);const $e={class:"tag-management-container"},Le={class:"input-section"},Se={key:0,class:"suggestions-panel"},xe=["onClick"],De={class:"current-tags-section"},Ee={key:0,class:"tags-container"},Ae={key:1,class:"empty-message"},Ie={class:"popular-tags-section"},Ue={key:0,class:"tags-container"},ze={key:1,class:"empty-message"},Be={key:2,class:"empty-message"},We={class:"dialog-footer"};function Pe(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=(0,c.g2)("Loading"),g=Te.tk,b=r.kZ;return(0,c.uX)(),(0,c.Wv)(b,{title:e.$t("tagManagement.title"),modelValue:s.visible,"onUpdate:modelValue":t[1]||(t[1]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",We,[(0,c.bF)(u,{onClick:s.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("tagManagement.close")),1)]),_:1},8,["onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",$e,[(0,c.Lk)("div",Le,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("tagManagement.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",Se,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,xe))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",De,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.currentTags")),1),n.currentTags.length>0?((0,c.uX)(),(0,c.CE)("div",Ee,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveTag(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",Ae,(0,h.v_)(e.$t("tagManagement.noTags")),1))]),(0,c.Lk)("div",Ie,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.popularTags")),1),n.popularTags.length>0?((0,c.uX)(),(0,c.CE)("div",Ue,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.popularTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,onClick:t=>s.handleAddPopularTag(e),class:"tag-item clickable",type:"info"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))])):n.loadingPopularTags?((0,c.uX)(),(0,c.CE)("div",ze,[(0,c.bF)(g,{class:"is-loading"},{default:(0,c.k6)(()=>[(0,c.bF)(p)]),_:1}),(0,c.eW)(" "+(0,h.v_)(e.$t("tagManagement.loading")),1)])):((0,c.uX)(),(0,c.CE)("div",Be,(0,h.v_)(e.$t("tagManagement.noPopularTags")),1))])])]),_:1},8,["title","modelValue","width","onClose"])}var Re=a(57477),Oe={name:"TagManagementDialog",components:{Loading:Re.Loading},props:{modelValue:{type:Boolean,default:!1},fileId:{type:String,required:!0}},emits:["update:modelValue","tagsUpdated"],data(){return{currentTags:[],inputTag:"",suggestions:[],popularTags:[],showSuggestions:!1,loading:!1,loadingPopularTags:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"500px"}},watch:{visible(e){e&&(this.loadFileTags(),this.loadPopularTags())}},methods:{async loadFileTags(){try{const e=await(0,E.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"GET"});if(!e.ok)throw new Error("Failed to load tags");{const t=await e.json();this.currentTags=t.tags||[]}}catch(e){console.error("Error loading file tags:",e),ye.nk.error(this.$t("tagManagement.loadFailed"))}},async loadPopularTags(){this.loadingPopularTags=!0;try{const e=await(0,E.A)("/api/manage/tags/autocomplete?limit=20",{method:"GET"});if(e.ok){const t=await e.json();this.popularTags=(t.tags||[]).filter(e=>!this.currentTags.includes(e))}}catch(e){console.error("Error loading popular tags:",e)}finally{this.loadingPopularTags=!1}},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,E.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.currentTags.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddTag()},async handleAddTag(){const e=this.inputTag.trim();if(e){if(this.currentTags.includes(e))return ye.nk.warning(this.$t("tagManagement.tagExists")),this.inputTag="",void(this.showSuggestions=!1);try{const t=await(0,E.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"add",tags:[e]})});if(!t.ok){const e=await t.json();throw new Error(e.message||this.$t("tagManagement.addFailed"))}{const e=await t.json();this.currentTags=e.tags||[],this.inputTag="",this.showSuggestions=!1,ye.nk.success(this.$t("tagManagement.addSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error adding tag:",t),ye.nk.error(t.message||this.$t("tagManagement.addFailed"))}}},async handleRemoveTag(e){try{const t=await(0,E.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("tagManagement.removeFailed"));{const e=await t.json();this.currentTags=e.tags||[],ye.nk.success(this.$t("tagManagement.removeSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("tagManagement.removeFailed"))}},handleAddPopularTag(e){this.inputTag=e,this.handleAddTag()},handleClose(){this.visible=!1,this.inputTag="",this.showSuggestions=!1,this.currentTags=[],this.popularTags=[]}}};const Ne=(0,I.A)(Oe,[["render",Pe],["__scopeId","data-v-689f94e2"]]);var Me=Ne,Ve=a(55558),Xe=(a(10456),a(66810)),je=(a(34396),a(4885),a(82006)),Ke=(a(98642),a(63003),a(59869)),Ze=(a(70415),a(73565),a(57009));a(78450);const Ge={class:"detail-actions"},He={class:"preview-section"},qe={class:"preview-content"},Qe=["src"],Ye=["src"],Je={key:1},et={key:1},tt={key:0,style:{display:"flex","align-items":"center",gap:"6px"}},at={key:1,style:{color:"#909399"}},it={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"5px"}},nt={key:1,style:{color:"#909399"}};function st(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=Y.v$,p=Y.q,g=Ze.Zq,b=Ke.MF,v=ee.u,k=Ke.TS,y=je.xE,_=je.US,w=r.kZ;return(0,c.uX)(),(0,c.Wv)(w,{title:e.$t("fileDetail.title"),modelValue:s.visible,"onUpdate:modelValue":t[24]||(t[24]=e=>s.visible=e),width:s.dialogWidth},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Ge,[n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:0,type:"primary",onClick:t[0]||(t[0]=t=>e.$emit("download")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"download",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.download")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:1,type:"primary",onClick:t[1]||(t[1]=t=>e.$emit("tagManagement")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"tags",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.tags")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:2,type:"primary",onClick:t[2]||(t[2]=t=>e.$emit("block")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"ban",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.blacklist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:3,type:"primary",onClick:t[3]||(t[3]=t=>e.$emit("white")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"shield-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.whitelist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:4,type:"danger",onClick:t[4]||(t[4]=t=>e.$emit("delete")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"trash-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.deleteBtn")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:5,type:"warning",onClick:t[5]||(t[5]=e=>s.startEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"edit",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.edit")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:6,type:"info",onClick:t[6]||(t[6]=e=>s.openRenameDialog()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"i-cursor",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.rename")),1)]),_:1})),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:7,type:"success",onClick:t[7]||(t[7]=e=>s.saveMetadata()),round:"",size:"small",class:"detail-action",loading:n.editSaving},{default:(0,c.k6)(()=>[n.editSaving?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(o,{key:0,icon:"save",style:{"margin-right":"3px"}})),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.save")),1)]),_:1},8,["loading"])):(0,c.Q3)("",!0),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:8,onClick:t[8]||(t[8]=e=>s.cancelEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.cancel")),1)]),_:1})):(0,c.Q3)("",!0)]),(0,c.bF)(p,{modelValue:n.activeTab,"onUpdate:modelValue":t[16]||(t[16]=e=>n.activeTab=e),onTabClick:s.handleTabClick,style:{"margin-bottom":"10px"}},{default:(0,c.k6)(()=>[(0,c.bF)(m,{label:e.$t("fileDetail.originUrl"),name:"originUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.originUrl,"onUpdate:modelValue":t[9]||(t[9]=e=>a.urls.originUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1},8,["label"]),(0,c.bF)(m,{label:"Markdown",name:"mdUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.mdUrl,"onUpdate:modelValue":t[10]||(t[10]=e=>a.urls.mdUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"HTML",name:"htmlUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.htmlUrl,"onUpdate:modelValue":t[11]||(t[11]=e=>a.urls.htmlUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"BBCode",name:"bbUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.bbUrl,"onUpdate:modelValue":t[12]||(t[12]=e=>a.urls.bbUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),a.file?.metadata?.TgFileId?((0,c.uX)(),(0,c.Wv)(m,{key:0,label:"TG File ID",name:"tgId"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.tgId,"onUpdate:modelValue":t[13]||(t[13]=e=>a.urls.tgId=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3Location?((0,c.uX)(),(0,c.Wv)(m,{key:1,label:"S3 Location",name:"s3Location"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3Location,"onUpdate:modelValue":t[14]||(t[14]=e=>a.urls.S3Location=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3CdnFileUrl?((0,c.uX)(),(0,c.Wv)(m,{key:2,label:"S3 CDN URL",name:"s3CdnFileUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3CdnFileUrl,"onUpdate:modelValue":t[15]||(t[15]=e=>a.urls.S3CdnFileUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0)]),_:1},8,["modelValue","onTabClick"]),(0,c.Lk)("div",He,[(0,c.Lk)("div",qe,[s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:0,src:a.fileLink,autoplay:"",muted:"",loop:"",class:"video-preview",onClick:t[17]||(t[17]=(...e)=>s.openImageLink&&s.openImageLink(...e))},null,8,Qe)):s.isAudio?((0,c.uX)(),(0,c.CE)("audio",{key:1,src:a.fileLink,controls:"",autoplay:"",class:"audio-preview"},null,8,Ye)):s.isImage?((0,c.uX)(),(0,c.Wv)(g,{key:2,src:a.fileLink,"preview-src-list":[a.fileLink],"preview-teleported":!0,fit:"contain",lazy:"",class:"image-preview"},null,8,["src","preview-src-list"])):((0,c.uX)(),(0,c.Wv)(o,{key:3,icon:"file",class:"file-icon-detail"}))])]),(0,c.bF)(k,{border:"",column:s.descColumn},{default:(0,c.k6)(()=>[(0,c.bF)(b,{label:e.$t("fileDetail.fileNameLabel")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileName,"onUpdate:modelValue":t[18]||(t[18]=e=>n.editForm.FileName=e),size:"small",placeholder:e.$t("fileDetail.fileNamePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",Je,(0,h.v_)(a.file?.metadata?.FileName||a.file?.name),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileType")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileType,"onUpdate:modelValue":t[19]||(t[19]=e=>n.editForm.FileType=e),size:"small",placeholder:e.$t("fileDetail.fileTypePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",et,(0,h.v_)(a.file?.metadata?.FileType||e.$t("fileDetail.unknown")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileSizeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.fileSizeDisplay),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.imageDimensions")},{default:(0,c.k6)(()=>[s.imageDimensions?((0,c.uX)(),(0,c.CE)("div",tt,[(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Width)+" × "+(0,h.v_)(a.file?.metadata?.Height),1),(0,c.bF)(v,{size:"small",type:"info",style:{display:"inline-flex","align-items":"center","justify-content":"center"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.orientationIcon),1)]),_:1})])):((0,c.uX)(),(0,c.CE)("span",at,(0,h.v_)(e.$t("fileDetail.noDimensions")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadTimeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.uploadTime),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.channelTypeAndName")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:"info",style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.Channel||e.$t("fileDetail.unknown")),1)]),_:1}),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.ChannelName||"-"),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.accessStatusAndReview")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:s.accessTagType,style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.accessType),1)]),_:1},8,["type"]),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Label||e.$t("fileDetail.noTags")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadIP")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadIP||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadAddressLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadAddress||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileTags")},{default:(0,c.k6)(()=>[a.file?.metadata?.Tags&&a.file?.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",it,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.file?.metadata?.Tags,e=>((0,c.uX)(),(0,c.Wv)(v,{key:e,size:"small"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1024))),128))])):((0,c.uX)(),(0,c.CE)("span",nt,(0,h.v_)(e.$t("fileDetail.noTags")),1))]),_:1},8,["label"])]),_:1},8,["column"]),(0,c.bF)(w,{modelValue:n.showRenameDialog,"onUpdate:modelValue":t[23]||(t[23]=e=>n.showRenameDialog=e),title:e.$t("fileDetail.renameTitle"),width:s.dialogWidth,"append-to-body":""},{footer:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:t[21]||(t[21]=e=>s.closeRenameDialog())},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameCancel")),1)]),_:1}),(0,c.bF)(u,{type:"primary",onClick:t[22]||(t[22]=e=>s.submitRename()),loading:n.renameSaving,disabled:!n.renameValidation.valid},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameConfirm")),1)]),_:1},8,["loading","disabled"])]),default:(0,c.k6)(()=>[(0,c.bF)(_,{onSubmit:(0,B.D$)(s.submitRename,["prevent"])},{default:(0,c.k6)(()=>[(0,c.bF)(y,{label:e.$t("fileDetail.renameLabel"),error:n.renameValidation.error},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:n.renameForm.newFileId,"onUpdate:modelValue":t[20]||(t[20]=e=>n.renameForm.newFileId=e),placeholder:e.$t("fileDetail.renamePlaceholder"),onInput:s.validateRenameInput,clearable:""},null,8,["modelValue","placeholder","onInput"])]),_:1},8,["label","error"])]),_:1},8,["onSubmit"])]),_:1},8,["modelValue","title","width"])]),_:1},8,["title","modelValue","width"])}const rt=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;function ot(e,t){return e&&""!==e.trim()?e===t?{valid:!1,error:"文件名未发生变化"}:e.includes("..")?{valid:!1,error:'文件名不能包含路径穿越字符 ".."'}:/\/\.\//.test(e)||/^\.\//.test(e)?{valid:!1,error:'文件名不能包含单独的 "." 路径段'}:rt.test(e)?{valid:!1,error:"文件名包含非法字符,请使用合法的文件名格式"}:e.includes("//")?{valid:!1,error:"文件名不能包含连续的斜杠"}:{valid:!0}:{valid:!1,error:"文件名不能为空"}}var lt={name:"FileDetailDialog",props:{modelValue:{type:Boolean,default:!1},file:{type:Object,default:null},fileLink:{type:String,default:""},urls:{type:Object,default:()=>({originUrl:"",mdUrl:"",htmlUrl:"",bbUrl:"",tgId:"",S3Location:"",S3CdnFileUrl:""})}},emits:["update:modelValue","download","tagManagement","block","white","delete","metadataUpdated","fileRenamed"],watch:{visible(e){e||(this.isEditing=!1,this.editSaving=!1)}},data(){return{activeTab:"originUrl",isEditing:!1,editForm:{FileName:"",FileType:""},editSaving:!1,showRenameDialog:!1,renameForm:{newFileId:""},renameValidation:{valid:!0,error:""},renameSaving:!1}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"95%":"900px"},descColumn(){return window.innerWidth<768?1:2},isVideo(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},uploadTime(){return this.file?.metadata?.TimeStamp?new Date(this.file.metadata.TimeStamp).toLocaleString():this.$t("fileDetail.unknown")},accessType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?this.$t("fileDetail.accessNormalWhitelist"):"Block"===e?this.$t("fileDetail.accessBlockedBlacklist"):"adult"===t?this.$t("fileDetail.accessBlockedReview"):this.$t("fileDetail.accessNormal")},accessTagType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?"success":"Block"===e||"adult"===t?"danger":"success"},imageDimensions(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;return!(!e||!t)||null},orientationIcon(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;if(!e||!t)return"";const a=e/t;return a>1.1?this.$t("fileDetail.orientationLandscape"):a<.9?this.$t("fileDetail.orientationPortrait"):this.$t("fileDetail.orientationSquare")},fileSizeDisplay(){const e=this.file?.metadata?.FileSizeBytes,t=this.file?.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(2)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:this.$t("fileDetail.unknown")}},methods:{handleVideoClick(e){const t=e.target;t.paused?t.play():t.pause()},handleTabClick(){},handleUrlClick(e){const t=e.target;t.select(),navigator.clipboard.writeText(t.value).then(()=>{ye.nk.success(this.$t("fileDetail.linkCopied"))})},openImageLink(){this.fileLink&&window.open(this.fileLink,"_blank")},startEdit(){this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.isEditing=!0},cancelEdit(){this.isEditing=!1,this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.editSaving=!1},async saveMetadata(){this.editSaving=!0;try{const e=this.file.name,t=await(0,E.A)(`/api/manage/metadata/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({FileName:this.editForm.FileName,FileType:this.editForm.FileType})});if(!t.ok){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.metadataSaveFailed"))}{const a=await t.json();ye.nk.success(this.$t("fileDetail.metadataSaved")),this.isEditing=!1,this.$emit("metadataUpdated",e,a.metadata)}}catch(e){console.error("Error saving metadata:",e),ye.nk.error(e.message||this.$t("fileDetail.metadataSaveFailed"))}finally{this.editSaving=!1}},openRenameDialog(){this.renameForm.newFileId=this.file?.name||"",this.renameValidation={valid:!0,error:""},this.showRenameDialog=!0},closeRenameDialog(){this.showRenameDialog=!1,this.renameForm.newFileId="",this.renameValidation={valid:!0,error:""}},validateRenameInput(){const e=ot(this.renameForm.newFileId,this.file?.name||"");this.renameValidation={valid:e.valid,error:e.error||""}},async submitRename(){if(!this.renameSaving&&(this.validateRenameInput(),this.renameValidation.valid)){this.renameSaving=!0;try{const e=this.file.name,t=await(0,E.A)(`/api/manage/rename/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newFileId:this.renameForm.newFileId})});if(t.ok){const a=await t.json();ye.nk.success(this.$t("fileDetail.renameSuccess")),this.showRenameDialog=!1,this.$emit("fileRenamed",e,this.renameForm.newFileId,a.metadata)}else{if(409!==t.status){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.renameFailed"))}this.renameValidation={valid:!1,error:this.$t("fileDetail.renameConflict")}}}catch(e){console.error("Error renaming file:",e),ye.nk.error(e.message||this.$t("fileDetail.renameFailed"))}finally{this.renameSaving=!1}}}}};const dt=(0,I.A)(lt,[["render",st],["__scopeId","data-v-3f80812c"]]);var ct=dt,ht=a(78507);a(213);const ut={key:0,class:"batch-floating-bar"},ft={class:"batch-selection-summary"},mt={class:"batch-selection-count"},pt={class:"batch-floating-actions"};function gt(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=l.S2,d=ht.R7;return(0,c.uX)(),(0,c.Wv)(B.eB,{name:"batch-toolbar"},{default:(0,c.k6)(()=>[a.selectedCount>0?((0,c.uX)(),(0,c.CE)("div",ut,[(0,c.bF)(d,{content:e.$t("dashboard.clearSelection"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:"batch-floating-btn ghost","aria-label":e.$t("dashboard.clearSelection"),onClick:s.handleClear},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"times",class:"batch-floating-icon"})]),_:1},8,["aria-label","onClick"])]),_:1},8,["content"]),(0,c.bF)(d,{content:`${a.selectedCount} ${e.$t("dashboard.selectedItems")}`,placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ft,[(0,c.Lk)("span",mt,(0,h.v_)(a.selectedCount),1)])]),_:1},8,["content"]),t[0]||(t[0]=(0,c.Lk)("span",{class:"batch-toolbar-divider"},null,-1)),(0,c.Lk)("div",pt,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.actions,t=>((0,c.uX)(),(0,c.Wv)(d,{key:t.command,content:e.$t(t.label),placement:"top"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:(0,h.C4)(["batch-floating-btn",t.className]),"aria-label":e.$t(t.label),onClick:e=>s.handleAction(t.command)},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:t.icon,class:"batch-floating-icon"},null,8,["icon"])]),_:2},1032,["class","aria-label","onClick"])]),_:2},1032,["content"]))),128))])])):(0,c.Q3)("",!0)]),_:1})}var bt={name:"BatchActionBar",props:{selectedCount:{type:Number,required:!0}},emits:["action","clear"],data(){return{actions:[{command:"copy",label:"dashboard.copy",icon:"copy",className:"copy"},{command:"download",label:"dashboard.download",icon:"download",className:"download"},{command:"move",label:"dashboard.move",icon:"file-export",className:"move"},{command:"tagManagement",label:"dashboard.tagManagement",icon:"tags",className:"tag"},{command:"ban",label:"dashboard.addToBlacklist",icon:"ban",className:"ban"},{command:"white",label:"dashboard.addToWhitelist",icon:"shield-alt",className:"white"},{command:"delete",label:"dashboard.delete",icon:"trash-alt",className:"danger"}]}},methods:{handleAction(e){this.$emit("action",e)},handleClear(){this.$emit("clear")}}};const vt=(0,I.A)(bt,[["render",gt],["__scopeId","data-v-7445695a"]]);var kt=vt,yt=a(54880),_t=(a(4318),a(77815));a(72907);const wt={class:"list-col list-col-checkbox"},Ft=["src"],Ct=["src"],Tt=["title"],$t={class:"filename-start"},Lt={class:"filename-end"},St={class:"list-col list-col-tags"},xt={key:1,class:"list-empty"},Dt={class:"list-col list-col-channel"},Et={class:"list-col list-col-channel-name"},At={key:0,class:"channel-name-box"},It={key:1,class:"list-empty"},Ut={class:"list-col list-col-address"},zt={key:0,class:"address-box"},Bt={key:1,class:"list-empty"},Wt={class:"list-col list-col-size"},Pt={class:"list-col list-col-date"},Rt={class:"list-col list-col-actions"};function Ot(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=ht.R7;return(0,c.uX)(),(0,c.CE)("div",{class:"list-item",onTouchstart:t[9]||(t[9]=t=>e.$emit("touchstart",t)),onTouchend:t[10]||(t[10]=t=>e.$emit("touchend",t)),onTouchmove:t[11]||(t[11]=t=>e.$emit("touchmove",t))},[(0,c.Lk)("div",wt,[(0,c.Lk)("span",{class:(0,h.C4)(["custom-checkbox",{checked:n.localSelected}]),onClick:t[0]||(t[0]=(0,B.D$)((...e)=>s.toggleSelect&&s.toggleSelect(...e),["stop"]))},[n.localSelected?((0,c.uX)(),(0,c.Wv)(r,{key:0,icon:"check",class:"check-icon"})):(0,c.Q3)("",!0)],2)]),(0,c.Lk)("div",{class:"list-col list-col-preview",onClick:t[1]||(t[1]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[s.isFolder?((0,c.uX)(),(0,c.Wv)(r,{key:0,icon:"folder-open",class:"list-folder-icon"})):s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:1,src:a.fileLink,class:"list-preview-img",muted:"",preload:"metadata"},null,8,Ft)):s.isImage?((0,c.uX)(),(0,c.CE)("img",{key:2,src:a.fileLink,class:"list-preview-img",loading:"lazy",decoding:"async"},null,8,Ct)):((0,c.uX)(),(0,c.Wv)(r,{key:3,icon:"file",class:"list-file-icon"}))]),(0,c.Lk)("div",{class:"list-col list-col-name",onClick:t[2]||(t[2]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[(0,c.Lk)("span",{class:"filename-ellipsis",title:s.displayName},[(0,c.Lk)("span",$t,(0,h.v_)(s.fileNameStart),1),(0,c.Lk)("span",Lt,(0,h.v_)(s.fileNameEnd),1)],8,Tt)]),(0,c.Lk)("div",St,[!s.isFolder&&a.item.metadata?.Tags&&a.item.metadata.Tags.length>0?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.item.metadata.Tags.slice(0,3),(e,t)=>((0,c.uX)(),(0,c.CE)("span",{key:t,class:"color-tag",style:(0,h.Tr)({background:s.getTagColor(t)})},(0,h.v_)(e),5))),128)),a.item.metadata.Tags.length>3?((0,c.uX)(),(0,c.CE)("span",{key:0,class:"color-tag color-tag-more",style:(0,h.Tr)({background:s.getTagColor(3)})},"+"+(0,h.v_)(a.item.metadata.Tags.length-3),5)):(0,c.Q3)("",!0)],64)):((0,c.uX)(),(0,c.CE)("span",xt,"-"))]),(0,c.Lk)("div",Dt,(0,h.v_)(s.isFolder?"-":a.item.metadata?.Channel||a.item.channelTag||"-"),1),(0,c.Lk)("div",Et,[!s.isFolder&&a.item.metadata?.ChannelName?((0,c.uX)(),(0,c.CE)("div",At,(0,h.v_)(a.item.metadata.ChannelName),1)):((0,c.uX)(),(0,c.CE)("span",It,"-"))]),(0,c.Lk)("div",Ut,[!s.isFolder&&a.item.metadata?.UploadIP?((0,c.uX)(),(0,c.CE)("div",zt,(0,h.v_)(a.item.metadata.UploadIP),1)):((0,c.uX)(),(0,c.CE)("span",Bt,"-"))]),(0,c.Lk)("div",Wt,(0,h.v_)(s.isFolder?"-":s.fileSizeDisplay),1),(0,c.Lk)("div",Pt,(0,h.v_)(s.uploadDate),1),(0,c.Lk)("div",Rt,[s.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.bF)(o,{content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[6]||(t[6]=(0,B.D$)(t=>e.$emit("folderCopy"),["stop"]))},[(0,c.bF)(r,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(o,{content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[7]||(t[7]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(r,{icon:"file-export"})])]),_:1},8,["content"])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.bF)(o,{content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[3]||(t[3]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(r,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(o,{content:e.$t("dashboard.downloadFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(r,{icon:"download"})])]),_:1},8,["content"]),(0,c.bF)(o,{content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(r,{icon:"file-export"})])]),_:1},8,["content"])],64)),(0,c.bF)(o,{content:e.$t("dashboard.delete"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn list-action-danger",onClick:t[8]||(t[8]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(r,{icon:"trash-alt"})])]),_:1},8,["content"])])],32)}var Nt={name:"FileListItem",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,default:""}},emits:["update:selected","enter","detail","copy","folderCopy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,tagColors:["#f472b6","#a78bfa","#60a5fa","#34d399"]}},computed:{isFolder(){return this.item.isFolder||this.item.name?.endsWith("/")},isVideo(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".mp4")||e.endsWith(".webm")||e.endsWith(".mov")||e.endsWith(".avi")},isImage(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".jpg")||e.endsWith(".jpeg")||e.endsWith(".png")||e.endsWith(".gif")||e.endsWith(".webp")||e.endsWith(".svg")||e.endsWith(".bmp")},displayName(){if(this.isFolder){const e=this.item.name.split("/").filter(Boolean);return e[e.length-1]||this.item.name}return this.item.metadata?.FileName||this.getFileName(this.item.name)},fileNameStart(){const e=this.displayName;return e.length<=20?e:e.slice(0,-8)},fileNameEnd(){const e=this.displayName;return e.length<=20?"":e.slice(-8)},uploadDate(){return this.item.uploaded?new Date(this.item.uploaded).toLocaleDateString():this.item.metadata?.TimeStamp?new Date(this.item.metadata.TimeStamp).toLocaleDateString():"-"},fileSizeDisplay(){const e=this.item.metadata?.FileSizeBytes,t=this.item.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:"-"}},watch:{selected(e){this.localSelected=e}},methods:{toggleSelect(){this.localSelected=!this.localSelected,this.$emit("update:selected",this.localSelected)},handlePreviewClick(){this.isFolder?this.$emit("enter"):this.$emit("detail")},getFileName(e){const t=(e||"").split("/");return t[t.length-1]},getTagColor(e){return this.tagColors[e%this.tagColors.length]}}};const Mt=(0,I.A)(Nt,[["render",Ot],["__scopeId","data-v-78d34f50"]]);var Vt=Mt,Xt=a(70683),jt=(a(95385),a(98469));a(38736);const Kt={class:"file-short-info"},Zt={key:0,class:"success-tag"},Gt={key:1,class:"fail-tag"},Ht={key:2,class:"success-tag"},qt={key:3,class:"primary-tag"},Qt={key:0,style:{"margin-left":"2px"}},Yt={key:0,class:"skeleton-wrapper"},Jt={class:"error-text"},ea=["src"],ta={class:"error-text"},aa={key:3,class:"file-preview"},ia={class:"card-bottom-overlay"},na={class:"file-name-row"},sa={class:"file-name"},ra={class:"action-bar"},oa={class:"action-bar-left"},la={class:"action-bar-right"};function da(e,t,a,i,n,s){const r=jt.dI,o=(0,c.g2)("font-awesome-icon"),l=Ze.Zq,d=ht.R7,u=Xt.Ik;return(0,c.uX)(),(0,c.Wv)(u,{class:"img-card",onTouchstart:t[17]||(t[17]=t=>e.$emit("touchstart",t)),onTouchend:t[18]||(t[18]=t=>e.$emit("touchend",t)),onTouchmove:t[19]||(t[19]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",Kt,["White"===a.item.metadata?.ListType?((0,c.uX)(),(0,c.CE)("div",Zt,(0,h.v_)(s.channelTag),1)):"Block"===a.item.metadata?.ListType||"adult"===a.item.metadata?.Label?((0,c.uX)(),(0,c.CE)("div",Gt,(0,h.v_)(s.channelTag),1)):((0,c.uX)(),(0,c.CE)("div",Ht,(0,h.v_)(s.channelTag),1)),a.item.metadata?.Tags&&a.item.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",qt,[(0,c.bF)(o,{icon:"tag",style:{"margin-right":"3px","font-size":"12px"}}),(0,c.eW)(" "+(0,h.v_)(a.item.metadata.Tags[0])+" ",1),a.item.metadata.Tags.length>1?((0,c.uX)(),(0,c.CE)("span",Qt," (+"+(0,h.v_)(a.item.metadata.Tags.length-1)+") ",1)):(0,c.Q3)("",!0)])):(0,c.Q3)("",!0)]),s.isVideo?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[n.videoLoading?((0,c.uX)(),(0,c.CE)("div",Yt)):n.videoError?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"error-wrapper",onClick:t[2]||(t[2]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"exclamation-triangle",class:"error-icon"}),(0,c.Lk)("span",Jt,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])):(0,c.Q3)("",!0),(0,c.bo)((0,c.Lk)("video",{src:a.fileLink,muted:"",loop:"",preload:"metadata",class:"video-preview",onClick:t[3]||(t[3]=(...e)=>s.handleVideoClick&&s.handleVideoClick(...e)),onMouseenter:t[4]||(t[4]=e=>s.handleVideoHover(e,!0)),onMouseleave:t[5]||(t[5]=e=>s.handleVideoHover(e,!1)),onFullscreenchange:t[6]||(t[6]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onWebkitfullscreenchange:t[7]||(t[7]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onLoadeddata:t[8]||(t[8]=e=>n.videoLoading=!1),onError:t[9]||(t[9]=(...e)=>s.handleVideoError&&s.handleVideoError(...e))},null,40,ea),[[B.aG,!n.videoLoading&&!n.videoError]])],64)):s.isAudio?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"file-preview audio-card-preview",onClick:t[10]||(t[10]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"music",class:"file-icon audio-icon"})])):s.isImage?((0,c.uX)(),(0,c.Wv)(l,{key:2,"preview-teleported":!0,src:a.fileLink,"preview-src-list":a.previewSrcList,fit:"cover",lazy:"",decoding:"async",class:"image-preview"},{placeholder:(0,c.k6)(()=>[...t[20]||(t[20]=[(0,c.Lk)("div",{class:"skeleton-wrapper"},null,-1)])]),error:(0,c.k6)(()=>[(0,c.Lk)("div",{class:"error-wrapper",onClick:t[11]||(t[11]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"image",class:"error-icon"}),(0,c.Lk)("span",ta,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])]),_:1},8,["src","preview-src-list"])):((0,c.uX)(),(0,c.CE)("div",aa,[(0,c.bF)(o,{icon:"file",class:"file-icon"})])),(0,c.Lk)("div",ia,[(0,c.Lk)("div",na,[(0,c.Lk)("span",sa,(0,h.v_)(s.displayName),1)]),(0,c.Lk)("div",ra,[(0,c.Lk)("div",oa,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.detail"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[12]||(t[12]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"info-circle"})])]),_:1},8,["disabled","content"])]),(0,c.Lk)("div",la,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[13]||(t[13]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[14]||(t[14]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.downloadFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[15]||(t[15]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(o,{icon:"download"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[16]||(t[16]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"])])])])]),_:1})}var ca={name:"FileCard",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,required:!0},previewSrcList:{type:Array,default:()=>[]},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","detail","copy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,videoLoading:!0,videoError:!1}},computed:{channelTag(){return this.item.channelTag||""},isVideo(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},displayName(){const e=this.item.metadata?.FileName||this.item.name||"",t=e.split("/");return t[t.length-1]}},watch:{selected(e){this.localSelected=e},fileLink(){this.videoLoading=!0,this.videoError=!1}},methods:{handleVideoError(){this.videoLoading=!1,this.videoError=!0},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleFullscreenChange(e){const t=e.target,a=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;a?(t.muted=!1,t.loop=!1):(t.muted=!0,t.loop=!0,t.pause(),t.currentTime=0)},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)}}};const ha=(0,I.A)(ca,[["render",da],["__scopeId","data-v-e367e94e"]]);var ua=ha;const fa={class:"card-bottom-overlay"},ma={class:"file-name-row"},pa={class:"file-name"},ga={key:0,class:"action-bar"},ba={class:"action-bar-right"};function va(e,t,a,i,n,s){const r=jt.dI,o=(0,c.g2)("font-awesome-icon"),l=ht.R7,d=Xt.Ik;return(0,c.uX)(),(0,c.Wv)(d,{class:"img-card folder-card",onTouchstart:t[6]||(t[6]=t=>e.$emit("touchstart",t)),onTouchend:t[7]||(t[7]=t=>e.$emit("touchend",t)),onTouchmove:t[8]||(t[8]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",{class:"folder-icon",onClick:t[2]||(t[2]=t=>e.$emit("enter"))},[(0,c.bF)(o,{icon:"folder-open",class:"folder-icon-svg"})]),(0,c.Lk)("div",fa,[(0,c.Lk)("div",ma,[(0,c.Lk)("span",pa,(0,h.v_)(s.folderName),1)]),a.showActions?((0,c.uX)(),(0,c.CE)("div",ga,[t[9]||(t[9]=(0,c.Lk)("div",{class:"action-bar-left"},null,-1)),(0,c.Lk)("div",ba,[(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[3]||(t[3]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"])])])):(0,c.Q3)("",!0)])]),_:1})}var ka={name:"FolderCard",props:{name:{type:String,required:!0},selected:{type:Boolean,default:!1},showActions:{type:Boolean,default:!0},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","enter","copy","move","delete","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected}},computed:{folderName(){const e=this.name.split("/").filter(Boolean);return e[e.length-1]||this.name}},watch:{selected(e){this.localSelected=e}}};const ya=(0,I.A)(ka,[["render",va],["__scopeId","data-v-5f22ef48"]]);var _a=ya;function wa(e,t,a,i,n,s){return"card"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:0},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"skeleton-"+e,class:"skeleton-card"},[...t[0]||(t[0]=[(0,c.Lk)("div",{class:"skeleton-image"},null,-1),(0,c.Lk)("div",{class:"skeleton-info"},[(0,c.Lk)("div",{class:"skeleton-text"})],-1)])]))),128)):"list"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:1},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"list-skeleton-"+e,class:"list-item skeleton-list-item"},[...t[1]||(t[1]=[(0,c.Fv)('
',10)])]))),128)):(0,c.Q3)("",!0)}var Fa={name:"SkeletonLoader",props:{type:{type:String,default:"card",validator:e=>["card","list"].includes(e)},count:{type:Number,default:15}}};const Ca=(0,I.A)(Fa,[["render",wa],["__scopeId","data-v-5060702c"]]);var Ta=Ca,$a=a(81095),La=(a(77128),a(62086)),Sa=(a(40670),a(88830),a(23597),a(49187),a(77788));a(72099);const xa={class:"el-dropdown-link filter-trigger"},Da={class:"filter-section"},Ea={class:"filter-title"},Aa={class:"filter-options"},Ia={class:"filter-section"},Ua={class:"filter-title"},za={class:"filter-options"},Ba={class:"filter-section"},Wa={class:"filter-title"},Pa={class:"filter-options"},Ra={class:"filter-section"},Oa={class:"filter-title"},Na={class:"filter-options"},Ma={class:"filter-section"},Va={class:"filter-title"},Xa={class:"filter-options"},ja={key:0,class:"filter-section"},Ka={class:"filter-title"},Za={class:"filter-options"},Ga={key:0,class:"channel-divider"},Ha={class:"channel-group-title"},qa={class:"filter-actions"};function Qa(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=Sa.z_,d=jt.dI,u=jt.o5,f=l.S2,m=La.Iy,p=La.dW;return(0,c.uX)(),(0,c.Wv)(p,{"hide-on-click":!1,trigger:"click",class:"filter-dropdown",ref:"dropdownRef"},{dropdown:(0,c.k6)(()=>[(0,c.bF)(m,{class:"filter-dropdown-menu"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Da,[(0,c.Lk)("div",Ea,(0,h.v_)(e.$t("filter.accessStatus")),1),(0,c.Lk)("div",Aa,[(0,c.bF)(u,{modelValue:n.localFilters.accessStatus,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localFilters.accessStatus=e),onChange:t[1]||(t[1]=e=>s.handleFilterChange("accessStatus"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.accessStatusOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"accessStatus-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ia,[(0,c.Lk)("div",Ua,(0,h.v_)(e.$t("filter.blackWhiteList")),1),(0,c.Lk)("div",za,[(0,c.bF)(u,{modelValue:n.localFilters.listType,"onUpdate:modelValue":t[2]||(t[2]=e=>n.localFilters.listType=e),onChange:t[3]||(t[3]=e=>s.handleFilterChange("listType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.listTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"listType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ba,[(0,c.Lk)("div",Wa,(0,h.v_)(e.$t("filter.reviewResult")),1),(0,c.Lk)("div",Pa,[(0,c.bF)(u,{modelValue:n.localFilters.label,"onUpdate:modelValue":t[4]||(t[4]=e=>n.localFilters.label=e),onChange:t[5]||(t[5]=e=>s.handleFilterChange("label"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.labelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"label-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ra,[(0,c.Lk)("div",Oa,(0,h.v_)(e.$t("filter.fileType")),1),(0,c.Lk)("div",Na,[(0,c.bF)(u,{modelValue:n.localFilters.fileType,"onUpdate:modelValue":t[6]||(t[6]=e=>n.localFilters.fileType=e),onChange:t[7]||(t[7]=e=>s.handleFilterChange("fileType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.fileTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"fileType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ma,[(0,c.Lk)("div",Va,(0,h.v_)(e.$t("filter.channelType")),1),(0,c.Lk)("div",Xa,[(0,c.bF)(u,{modelValue:n.localFilters.channel,"onUpdate:modelValue":t[8]||(t[8]=e=>n.localFilters.channel=e),onChange:t[9]||(t[9]=e=>s.handleFilterChange("channel"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.channelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channel-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),a.channelNameOptions.length>0?((0,c.uX)(),(0,c.CE)("div",ja,[(0,c.Lk)("div",Ka,(0,h.v_)(e.$t("filter.channelName")),1),(0,c.Lk)("div",Za,[(0,c.bF)(u,{modelValue:n.localFilters.channelName,"onUpdate:modelValue":t[10]||(t[10]=e=>n.localFilters.channelName=e),onChange:t[11]||(t[11]=e=>s.handleFilterChange("channelName"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.groupedChannelNames,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:"group-"+e.type},[t>0?((0,c.uX)(),(0,c.CE)("div",Ga)):(0,c.Q3)("",!0),(0,c.Lk)("div",Ha,(0,h.v_)(e.typeLabel),1),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(e.channels,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channelName-"+e.type+"-"+e.name,label:e.type+":"+e.name},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.name),1)]),_:2},1032,["label"]))),128))],64))),128))]),_:1},8,["modelValue"])])])):(0,c.Q3)("",!0),(0,c.Lk)("div",qa,[(0,c.bF)(f,{size:"small",onClick:s.clearFilters,disabled:0===s.activeFilterCount},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("filter.clearFilters")),1)]),_:1},8,["onClick","disabled"])])]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("span",xa,[(0,c.bF)(o,{value:s.activeFilterCount,hidden:0===s.activeFilterCount,class:"filter-badge"},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"filter",class:"header-icon"})]),_:1},8,["value","hidden"])])]),_:1},512)}a(7588),a(18237);var Ya={name:"FilterDropdown",props:{filters:{type:Object,default:()=>({accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]})},channelNameOptions:{type:Array,default:()=>[]}},emits:["update:filters","change"],data(){return{localFilters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]}}},computed:{accessStatusOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.blocked"),value:"blocked"}]},listTypeOptions(){return[{label:this.$t("filter.whiteList"),value:"White"},{label:this.$t("filter.blackList"),value:"Block"},{label:this.$t("filter.notSet"),value:"None"}]},labelOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.teenContent"),value:"teen"},{label:this.$t("filter.adultContent"),value:"adult"}]},fileTypeOptions(){return[{label:this.$t("filter.image"),value:"image"},{label:this.$t("filter.video"),value:"video"},{label:this.$t("filter.audio"),value:"audio"},{label:this.$t("filter.other"),value:"other"}]},channelOptions(){return[{label:"Telegram",value:"TelegramNew"},{label:"Cloudflare R2",value:"CloudflareR2"},{label:"S3",value:"S3"},{label:"Discord",value:"Discord"},{label:"HuggingFace",value:"HuggingFace"},{label:"WebDAV",value:"WebDAV"},{label:this.$t("filter.externalLink"),value:"External"}]},activeFilterCount(){return Object.values(this.localFilters).reduce((e,t)=>e+t.length,0)},groupedChannelNames(){const e={};return this.channelNameOptions.forEach(t=>{e[t.type]||(e[t.type]={type:t.type,typeLabel:t.typeLabel,channels:[]}),e[t.type].channels.push(t)}),Object.values(e)}},watch:{filters:{handler(e){this.localFilters={accessStatus:Array.isArray(e.accessStatus)?[...e.accessStatus]:[],listType:Array.isArray(e.listType)?[...e.listType]:[],label:Array.isArray(e.label)?[...e.label]:[],fileType:Array.isArray(e.fileType)?[...e.fileType]:[],channel:Array.isArray(e.channel)?[...e.channel]:[],channelName:Array.isArray(e.channelName)?[...e.channelName]:[]}},immediate:!0,deep:!0}},methods:{handleFilterChange(e){this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:e,filters:{...this.localFilters}})},clearFilters(){this.localFilters={accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:"clear",filters:{...this.localFilters}})}}};const Ja=(0,I.A)(Ya,[["render",Qa],["__scopeId","data-v-c3aeeea0"]]);var ei=Ja,ti=a(97247);const ai={class:"container"},ii={class:"header-content"},ni={class:"search-area"},si={class:"search-card"},ri={class:"actions"},oi={class:"el-dropdown-link"},li={class:"el-dropdown-link"},di={class:"breadcrumb-container"},ci={class:"mobile-directory-path"},hi={class:"breadcrumb desktop-only"},ui=["title"],fi={key:1,class:"empty-state"},mi={class:"empty-text"},pi={class:"empty-hint"},gi={class:"list-header"},bi={class:"list-col list-col-checkbox"},vi={class:"list-col list-col-preview"},ki={class:"list-col list-col-name"},yi={class:"list-col list-col-tags"},_i={class:"list-col list-col-channel"},wi={class:"list-col list-col-channel-name"},Fi={class:"list-col list-col-address"},Ci={class:"list-col list-col-size"},Ti={class:"list-col list-col-date"},$i={class:"list-col list-col-actions"},Li={key:1,class:"empty-state list-empty"},Si={class:"empty-text"},xi={class:"empty-hint"},Di={class:"pagination-container"},Ei={class:"pagination-center"},Ai={class:"pagination-right"},Ii={class:"page-total"},Ui={class:"page-jump"},zi={class:"dialog-section"},Bi={class:"section-header"},Wi={class:"section-title"},Pi={class:"section-content"},Ri={class:"dialog-section"},Oi={class:"section-header"},Ni={class:"section-title"},Mi={class:"section-content"},Vi={class:"setting-item"},Xi={class:"setting-label"},ji={key:0,class:"setting-item"},Ki={class:"setting-label"},Zi={class:"dialog-action"};function Gi(e,t,a,i,n,s){const o=ti.A,u=(0,c.g2)("font-awesome-icon"),f=d.WK,m=ei,p=La.c6,g=La.Iy,b=La.dW,v=ht.R7,k=yt.bZ,y=$a.WZ,_=$a.vp,w=Ta,F=_a,C=ua,T=Vt,$=_t.aQ,L=l.S2,S=yt.ZO,x=yt.lX,D=kt,E=ct,A=Xe.ll,I=Xe.MQ,U=Ve.qi,W=r.kZ,P=Me,R=Ce,O=Q,N=X,M=z;return(0,c.uX)(),(0,c.CE)("div",ai,[(0,c.bF)(x,null,{default:(0,c.k6)(()=>[(0,c.bF)(k,null,{default:(0,c.k6)(()=>[(0,c.Lk)("div",ii,[(0,c.bF)(o,{activeTab:"dashboard"}),(0,c.Lk)("div",ni,[(0,c.Lk)("div",si,[(0,c.bF)(f,{modelValue:n.tempSearch,"onUpdate:modelValue":t[0]||(t[0]=e=>n.tempSearch=e),size:"small",placeholder:e.$t("dashboard.searchPlaceholder"),onKeyup:(0,B.jR)(s.handleSearch,["enter"])},{suffix:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"search",class:"search-icon",onClick:s.handleSearch},null,8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup"])]),(0,c.bF)(m,{filters:n.filters,"onUpdate:filters":t[1]||(t[1]=e=>n.filters=e),channelNameOptions:n.channelNameOptions,onChange:s.handleFilterChange},null,8,["filters","channelNameOptions","onChange"])]),(0,c.Lk)("div",ri,[(0,c.bF)(b,{onCommand:s.sort,"hide-on-click":!1},{dropdown:(0,c.k6)(()=>[(0,c.bF)(g,null,{default:(0,c.k6)(()=>[(0,c.bF)(p,{command:"dateDesc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortByDateDesc")),1)]),_:1}),(0,c.bF)(p,{command:"nameAsc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortByNameAsc")),1)]),_:1})]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("span",oi,[(0,c.bF)(u,{icon:s.sortIcon,class:"header-icon"},null,8,["icon"])])]),_:1},8,["onCommand"]),(0,c.bF)(v,{disabled:s.disableTooltip,content:e.$t("dashboard.linkFormat"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.Lk)("span",li,[(0,c.bF)(u,{icon:"link",class:"header-icon",onClick:t[2]||(t[2]=e=>n.showUrlDialog=!0)})])]),_:1},8,["disabled","content"]),(0,c.bF)(v,{disabled:s.disableTooltip,content:"card"===n.viewMode?e.$t("dashboard.listView"):e.$t("dashboard.cardView"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"card"===n.viewMode?"list":"th-large",class:"header-icon",onClick:s.toggleViewMode},null,8,["icon","onClick"])]),_:1},8,["disabled","content"]),(0,c.bF)(v,{disabled:s.disableTooltip,content:e.$t("dashboard.logout"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sign-out-alt",class:"header-icon",onClick:s.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,c.bF)(S,{class:(0,h.C4)(["main-container",{"has-batch-toolbar":n.selectedFiles.length>0}])},{default:(0,c.k6)(()=>[(0,c.Lk)("div",di,[(0,c.Lk)("button",{class:"breadcrumb-select-button",type:"button",onClick:t[3]||(t[3]=(...e)=>s.handleSelectPage&&s.handleSelectPage(...e))},[(0,c.bF)(u,{icon:s.selectPageIcon,class:"breadcrumb-select-icon"},null,8,["icon"])]),(0,c.Lk)("div",{class:"mobile-directory-trigger",onClick:t[4]||(t[4]=e=>n.showMobileDirectoryDrawer=!0)},[(0,c.bF)(u,{icon:"folder-open",class:"mobile-directory-icon"}),(0,c.Lk)("span",ci,(0,h.v_)(n.currentPath&&n.currentPath.split("/").filter(Boolean).length>0?n.currentPath.split("/").filter(Boolean).pop():e.$t("dashboard.rootDirectory")),1),(0,c.bF)(u,{icon:"chevron-down",class:"mobile-directory-arrow"})]),(0,c.Lk)("div",hi,[(0,c.bF)(_,{separator:"/"},{default:(0,c.k6)(()=>[(0,c.bF)(y,{onClick:t[5]||(t[5]=e=>s.navigateToFolder(""))},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"home",class:"breadcrumb-home-icon"})]),_:1}),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentPath.split("/").filter(Boolean),(e,t)=>((0,c.uX)(),(0,c.Wv)(y,{key:t,onClick:e=>s.navigateToFolder(n.currentPath.split("/").filter(Boolean).slice(0,t+1).join("/"))},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))]),_:1})]),(0,c.Lk)("span",{class:"stats-badge",title:e.$t("dashboard.totalFiles",{count:e.$data.Number})},[(0,c.bF)(u,{icon:"database",class:"stats-badge-icon"}),(0,c.eW)(" "+(0,h.v_)(n.Number),1)],8,ui)]),"card"===n.viewMode?((0,c.uX)(),(0,c.CE)("div",{key:0,class:(0,h.C4)(["content",{"is-drag-selecting":i.isDragging}]),ref:"cardContainerRef"},[n.loading?((0,c.uX)(),(0,c.Wv)(w,{key:0,type:"card",count:15})):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",fi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",mi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",pi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:t},[s.isFolder(e)?((0,c.uX)(),(0,c.Wv)(F,{key:0,name:e.name,selected:e.selected,"onUpdate:selected":t=>e.selected=t,showActions:!n.isSearchMode,disableTooltip:s.disableTooltip,onEnter:t=>s.enterFolder(e.name),onCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onTouchstart:a=>s.handleFolderTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["name","selected","onUpdate:selected","showActions","disableTooltip","onEnter","onCopy","onMove","onDelete","onTouchstart","onTouchend","onTouchmove"])):((0,c.uX)(),(0,c.Wv)(C,{key:1,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),previewSrcList:e.previewSrcList,disableTooltip:s.disableTooltip,onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","previewSrcList","disableTooltip","onDetail","onCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))],64))),128))],2)):((0,c.uX)(),(0,c.CE)("div",{key:1,class:(0,h.C4)(["list-view",{"is-drag-selecting":i.isDragging}]),ref:"listContainerRef"},[(0,c.Lk)("div",gi,[(0,c.Lk)("div",bi,[(0,c.Lk)("span",{class:(0,h.C4)(["custom-checkbox",{checked:s.isSelectAll,indeterminate:s.isIndeterminate}]),onClick:t[6]||(t[6]=e=>s.handleSelectAllPage(!s.isSelectAll))},[s.isSelectAll?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"check-icon"})):s.isIndeterminate?((0,c.uX)(),(0,c.Wv)(u,{key:1,icon:"minus",class:"check-icon"})):(0,c.Q3)("",!0)],2)]),(0,c.Lk)("div",vi,(0,h.v_)(e.$t("dashboard.preview")),1),(0,c.Lk)("div",ki,(0,h.v_)(e.$t("dashboard.fileName")),1),(0,c.Lk)("div",yi,(0,h.v_)(e.$t("dashboard.tags")),1),(0,c.Lk)("div",_i,(0,h.v_)(e.$t("dashboard.channelType")),1),(0,c.Lk)("div",wi,(0,h.v_)(e.$t("dashboard.channelNameCol")),1),(0,c.Lk)("div",Fi,(0,h.v_)(e.$t("dashboard.uploadAddress")),1),(0,c.Lk)("div",Ci,(0,h.v_)(e.$t("dashboard.fileSize")),1),(0,c.Lk)("div",Ti,(0,h.v_)(e.$t("dashboard.uploadTime")),1),(0,c.Lk)("div",$i,(0,h.v_)(e.$t("dashboard.actions")),1)]),n.loading?((0,c.uX)(),(0,c.Wv)(w,{key:0,type:"list",count:15})):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",Li,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",Si,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",xi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.Wv)(T,{key:t,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),onEnter:t=>s.enterFolder(e.name),onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onFolderCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.isFolder(e)?s.handleFolderTouchStart(e,t):s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","onEnter","onDetail","onCopy","onFolderCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))),128))],2)),i.isDragging?((0,c.uX)(),(0,c.CE)("div",{key:2,class:"drag-select-overlay",style:(0,h.Tr)({position:"fixed",left:i.selectionRect.left+"px",top:i.selectionRect.top+"px",width:i.selectionRect.width+"px",height:i.selectionRect.height+"px"})},null,4)):(0,c.Q3)("",!0),(0,c.Lk)("div",Di,[(0,c.Lk)("div",Ei,[(0,c.bF)($,{background:"",layout:"prev, pager, next",total:s.filteredTableData.length,"page-size":n.pageSize,"current-page":n.currentPage,"pager-count":s.pagerCount,onCurrentChange:s.handlePageChange},null,8,["total","page-size","current-page","pager-count","onCurrentChange"]),(0,c.bF)(L,{type:"primary",onClick:s.refreshFileList,class:"refresh-btn"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sync",class:(0,h.C4)({"fa-spin":n.refreshLoading})},null,8,["class"])]),_:1},8,["onClick"]),n.currentPage===Math.ceil(s.filteredTableData.length/n.pageSize)?((0,c.uX)(),(0,c.Wv)(L,{key:0,type:"primary",onClick:s.loadMoreData,loading:n.loading,class:"load-more"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",Ai,[(0,c.Lk)("span",Ii,(0,h.v_)(e.$t("dashboard.totalPages",{count:s.realTotalPages})),1),(0,c.Lk)("div",Ui,[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.jumpTo")),1),(0,c.bF)(f,{modelValue:n.jumpPage,"onUpdate:modelValue":t[7]||(t[7]=e=>n.jumpPage=e),size:"small",class:"jump-input",onKeyup:(0,B.jR)(s.handleJumpPage,["enter"])},null,8,["modelValue","onKeyup"]),(0,c.bF)(L,{size:"small",type:"primary",onClick:s.handleJumpPage,class:"jump-btn"},{default:(0,c.k6)(()=>[...t[24]||(t[24]=[(0,c.eW)("GO",-1)])]),_:1},8,["onClick"])])])])]),_:1},8,["class"])]),_:1}),(0,c.bF)(D,{"selected-count":n.selectedFiles.length,onAction:s.handleBatchAction,onClear:s.clearSelection},null,8,["selected-count","onAction","onClear"]),(0,c.bF)(E,{modelValue:n.showdetailDialog,"onUpdate:modelValue":t[8]||(t[8]=e=>n.showdetailDialog=e),file:n.detailFile,fileLink:s.getFileLink(n.detailFile?.name),urls:s.allUrl,onDownload:t[9]||(t[9]=e=>s.handleDownload(n.detailFile?.name)),onTagManagement:t[10]||(t[10]=e=>s.handleTagManagement(n.detailFile?.name)),onBlock:t[11]||(t[11]=e=>s.handleBlock(n.detailFile?.name)),onWhite:t[12]||(t[12]=e=>s.handleWhite(n.detailFile?.name)),onDelete:t[13]||(t[13]=e=>s.handleDetailDelete(n.detailFile?.name)),onMetadataUpdated:s.handleMetadataUpdated,onFileRenamed:s.handleFileRenamed},null,8,["modelValue","file","fileLink","urls","onMetadataUpdated","onFileRenamed"]),(0,c.bF)(W,{title:e.$t("dashboard.linkFormat"),modelValue:n.showUrlDialog,"onUpdate:modelValue":t[18]||(t[18]=e=>n.showUrlDialog=e),width:s.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",zi,[(0,c.Lk)("div",Bi,[(0,c.Lk)("span",Wi,(0,h.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,c.Lk)("div",Pi,[(0,c.bF)(I,{modelValue:n.defaultUrlFormat,"onUpdate:modelValue":t[14]||(t[14]=e=>n.defaultUrlFormat=e),class:"radio-card-group grid-2x2"},{default:(0,c.k6)(()=>[(0,c.bF)(A,{label:"originUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"link",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,c.bF)(A,{label:"mdUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,c.Lk)("span",null,"Markdown",-1))]),_:1}),(0,c.bF)(A,{label:"htmlUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,c.Lk)("span",null,"HTML",-1))]),_:1}),(0,c.bF)(A,{label:"bbUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,c.Lk)("span",null,"BBCode",-1))]),_:1}),(0,c.bF)(A,{label:"tgId",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"paper-plane",class:"radio-icon"}),t[28]||(t[28]=(0,c.Lk)("span",null,"TG File ID",-1))]),_:1}),(0,c.bF)(A,{label:"s3Location",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"cloud",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.s3Link")),1)]),_:1})]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ri,[(0,c.Lk)("div",Oi,[(0,c.Lk)("span",Ni,(0,h.v_)(e.$t("settings.customLink")),1),(0,c.bF)(v,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,c.Lk)("div",Mi,[(0,c.Lk)("div",Vi,[(0,c.Lk)("span",Xi,(0,h.v_)(e.$t("settings.enableCustom")),1),(0,c.bF)(U,{modelValue:n.useCustomUrl,"onUpdate:modelValue":t[15]||(t[15]=e=>n.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===n.useCustomUrl?((0,c.uX)(),(0,c.CE)("div",ji,[(0,c.Lk)("span",Ki,(0,h.v_)(e.$t("settings.customPrefix")),1),(0,c.bF)(f,{modelValue:n.customUrlPrefix,"onUpdate:modelValue":t[16]||(t[16]=e=>n.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,c.Q3)("",!0)])]),(0,c.Lk)("div",Zi,[(0,c.bF)(L,{type:"primary",onClick:t[17]||(t[17]=e=>n.showUrlDialog=!1),class:"confirm-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,c.bF)(P,{modelValue:n.showTagDialog,"onUpdate:modelValue":t[19]||(t[19]=e=>n.showTagDialog=e),fileId:n.currentTagFile,onTagsUpdated:s.handleTagsUpdated},null,8,["modelValue","fileId","onTagsUpdated"]),(0,c.bF)(R,{modelValue:n.showBatchTagDialog,"onUpdate:modelValue":t[20]||(t[20]=e=>n.showBatchTagDialog=e),selectedFiles:n.selectedFiles,onTagsUpdated:s.handleBatchTagsUpdated},null,8,["modelValue","selectedFiles","onTagsUpdated"]),(0,c.bF)(O,{modelValue:n.showMobileActionModal,"onUpdate:modelValue":t[21]||(t[21]=e=>n.showMobileActionModal=e),title:n.mobileActionIsFolder?s.getFolderName(n.mobileActionFile?.name||""):n.mobileActionFile?.metadata?.FileName||s.getFileName(n.mobileActionFile?.name||""),isFolder:n.mobileActionIsFolder,onAction:s.handleMobileAction},null,8,["modelValue","title","isFolder","onAction"]),(0,c.bF)(N,{modelValue:n.showMobileDirectoryDrawer,"onUpdate:modelValue":t[22]||(t[22]=e=>n.showMobileDirectoryDrawer=e),currentPath:n.currentPath,onNavigate:s.navigateToFolder,onGoBack:s.handleGoBack},null,8,["modelValue","currentPath","onNavigate","onGoBack"]),(0,c.bF)(M,{modelValue:n.showMoveDialog,"onUpdate:modelValue":t[23]||(t[23]=e=>n.showMoveDialog=e),"current-directory":n.currentPath,"is-batch-move":n.isBatchMove,"initial-path":n.moveTargetPath,onConfirm:s.confirmMove},null,8,["modelValue","current-directory","is-batch-move","initial-path","onConfirm"])])}a(81148),a(20116),a(13579),a(17642),a(58004),a(33853),a(45876),a(32475),a(15024),a(31698),a(14603),a(47566),a(98721);var Hi=a(60782),qi=a(44813),Qi=a.n(qi),Yi=a(54047),Ji=(a(58335),a(46638));class en{constructor(){this.FILE_LIST_PATH="data/fileList.json",this.fileListCache=null,this.storageWarningShown=!1}getLocalFileList(){const e=this.getMutableFileList();return{...e,files:[...e.files||[]],directories:[...e.directories||[]]}}getMutableFileList(){if(this.fileListCache)return this.fileListCache;try{const e=localStorage.getItem(this.FILE_LIST_PATH);return this.fileListCache=e?JSON.parse(e):this.createEmptyFileList(),this.fileListCache}catch(e){return console.error("Error reading local file list:",e),this.fileListCache=this.createEmptyFileList(),this.fileListCache}}updateFileListCache(e){this.fileListCache=e||this.createEmptyFileList();const t=this.persistFileListCache();return{cacheUpdated:!0,persisted:t}}persistFileListCache(){try{return localStorage.setItem(this.FILE_LIST_PATH,JSON.stringify(this.fileListCache)),!0}catch(e){return this.handleStoragePersistError(e),!1}}createEmptyFileList(){return{files:[],directories:[]}}handleStoragePersistError(e){console.warn("File list is kept in memory because localStorage persistence failed:",e);try{localStorage.removeItem(this.FILE_LIST_PATH)}catch(t){console.warn("Failed to remove stale file list cache:",t)}this.storageWarningShown||(this.storageWarningShown=!0,ye.nk.warning(Ji.Ay.global.t("dashboard.fileListMemoryCacheWarning")))}addFile(e){try{const t=this.getMutableFileList();return t.files.push(e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error adding file:",t),!1}}addFolder(e){try{const t=this.getMutableFileList();return!t.directories.includes(e)&&(t.directories.push(e),this.updateFileListCache(t).cacheUpdated)}catch(t){return console.error("Error adding folder:",t),!1}}moveFile(e,t,a=!1,i=""){try{let n=this.getMutableFileList();if(a){const t=n.directories.indexOf(e);-1!==t&&n.directories.splice(t,1)}else{const t=n.files.findIndex(t=>t.name===e);-1!==t&&n.files.splice(t,1)}if(t.startsWith(i)){const e=t.substring(i.length).split("/");if(e.length>1){const t=i+e[0];n.directories.includes(t)||n.directories.push(t)}}return this.updateFileListCache(n).cacheUpdated}catch(n){return console.error("Error moving file:",n),!1}}removeFile(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>t.name!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing file:",t),!1}}removeFolder(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>!t.name.startsWith(e+"/")),t.directories=t.directories.filter(t=>t!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing folder:",t),!1}}getFilesInFolder(e){try{const t=this.getMutableFileList(),a=t.files.filter(t=>t.name.startsWith(e+"/")),i=t.directories.filter(t=>t.startsWith(e+"/"));return{files:a,directories:i}}catch(t){return console.error("Error getting files in folder:",t),{files:[],directories:[]}}}buildFilterParams(e){let t="";return e.accessStatus&&e.accessStatus.length>0&&(t+=`&accessStatus=${encodeURIComponent(e.accessStatus.join(","))}`),e.listType&&e.listType.length>0&&(t+=`&listType=${encodeURIComponent(e.listType.join(","))}`),e.label&&e.label.length>0&&(t+=`&label=${encodeURIComponent(e.label.join(","))}`),e.fileType&&e.fileType.length>0&&(t+=`&fileType=${encodeURIComponent(e.fileType.join(","))}`),e.channel&&e.channel.length>0&&(t+=`&channel=${encodeURIComponent(e.channel.join(","))}`),e.channelName&&e.channelName.length>0&&(t+=`&channelName=${encodeURIComponent(e.channelName.join(","))}`),t}async refreshFileList(e,t="",a="",i="",n={}){t=t.trim();try{let s=`/api/manage/list?count=60&dir=${e}&search=${encodeURIComponent(t)}`;a&&(s+=`&includeTags=${encodeURIComponent(a)}`),i&&(s+=`&excludeTags=${encodeURIComponent(i)}`),s+=this.buildFilterParams(n);const r=await(0,E.A)(s,{method:"GET"}),o=await r.json();return o.isIndexedResponse||ye.nk.warning(Ji.Ay.global.t("dashboard.indexingWarning")),this.updateFileListCache(o).cacheUpdated}catch(s){return console.error("Error refreshing file list:",s),!1}}async loadMoreFiles(e,t="",a="",i="",n=60,s={}){t=t.trim();try{const r=this.getMutableFileList(),o=r.files.length;let l=`/api/manage/list?dir=${e}&start=${o}&count=${n}&search=${encodeURIComponent(t)}`;a&&(l+=`&includeTags=${encodeURIComponent(a)}`),i&&(l+=`&excludeTags=${encodeURIComponent(i)}`),l+=this.buildFilterParams(s);const d=await(0,E.A)(l,{method:"GET"}),c=await d.json();return r.files.push(...c.files),this.updateFileListCache(r).cacheUpdated}catch(r){return console.error("Error loading more files:",r),{files:[],directories:[]}}}}const tn=new en;var an=a(62388),nn=a(48903),sn=a(90144);function rn(e,t){return!(e.right<=t.left||e.left>=t.right||e.bottom<=t.top||e.top>=t.bottom)}function on(e,t){const a=Math.min(e.x,t.x),i=Math.min(e.y,t.y),n=Math.abs(t.x-e.x),s=Math.abs(t.y-e.y);return{left:a,top:i,width:n,height:s,right:a+n,bottom:i+s}}function ln(e){const{modes:t,mainSelector:a=".main-container",viewMode:i,items:n}=e,s=(0,sn.KR)(!1),r=(0,sn.KR)({left:0,top:0,width:0,height:0,right:0,bottom:0});let o=null,l=[],d=!1;const h=768;let u=!1;const f=50,m=10;let p=null,g="";function b(){const e=(0,sn.BA)(i);return t[e]||void 0}function v(){const e=(0,sn.BA)(i);return("card"===e||"list"===e)&&window.innerWidth>h}function k(){v()?u||A():u&&(U(),I())}function y(e){const t=e.target,i=t.closest(a);if(!i)return!1;const n=b();if(n){const e=t.closest(n.itemSelector);if(e){const t=(0,sn.BA)(n.containerRef);if(t&&t.contains(e))return!1}}const s=t.closest("button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container");return!s}function _(e){return e.shiftKey||e.ctrlKey||e.metaKey}function w(){const e=(0,sn.BA)(n);l=e.map(e=>!!e.selected)}let F=0;function C(){function e(){const t=window.innerHeight;let a=0;F>=t-f?a=m:F<=f&&(a=-m),0!==a&&(window.scrollBy(0,a),o&&(o.y-=a,r.value=on(o,{x:r.value.right>=o.x?r.value.right:r.value.left,y:F}),S())),p=requestAnimationFrame(e)}null===p&&(p=requestAnimationFrame(e))}function T(){null!==p&&(cancelAnimationFrame(p),p=null)}function $(){g=document.body.style.userSelect,document.body.style.userSelect="none"}function L(){document.body.style.userSelect=g}function S(){const e=b();if(!e)return;const t=(0,sn.BA)(e.containerRef);if(!t)return;const a=(0,sn.BA)(n),i=r.value,s={left:i.left,top:i.top,right:i.right,bottom:i.bottom},o=t.querySelectorAll(e.itemSelector);a.forEach((e,t)=>{const a=o[t];if(!a)return;const i=a.getBoundingClientRect(),n={left:i.left,top:i.top,right:i.right,bottom:i.bottom},r=rn(s,n);d&&l[t]?e.selected=!0:e.selected=r})}function x(e){if(0===e.button&&y(e)){if(o={x:e.clientX,y:e.clientY},d=_(e),w(),!d){const e=(0,sn.BA)(n);e.forEach(e=>{e.selected=!1})}s.value=!0,r.value=on(o,o),$(),document.addEventListener("mousemove",D),document.addEventListener("mouseup",E)}}function D(e){if(!s.value||!o)return;const t={x:e.clientX,y:e.clientY};F=e.clientY,r.value=on(o,t),S();const a=window.innerHeight;F<=f||F>=a-f?C():T()}function E(e){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",E))}function A(){u||(document.addEventListener("mousedown",x),u=!0)}function I(){u&&(document.removeEventListener("mousedown",x),u=!1)}function U(){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",E))}function z(){k()}return(0,c.wB)(()=>(0,sn.BA)(i),()=>{U(),k()}),(0,c.sV)(()=>{v()&&A(),window.addEventListener("resize",z)}),(0,c.xo)(()=>{U(),L(),T(),I(),window.removeEventListener("resize",z)}),{isDragging:s,selectionRect:r}}var dn={name:"AdminDashBoard",mixins:[nn.A],data(){return{Number:0,directFileCount:0,directFolderCount:0,showLogoutButton:!1,tableData:[],tempSearch:"",search:"",searchKeywords:"",searchIncludeTags:"",searchExcludeTags:"",isSearchMode:!1,currentPage:1,pageSize:15,selectedFiles:[],sortOption:"dateDesc",isUploading:!1,showdetailDialog:!1,detailFile:null,activeUrlTab:"originUrl",defaultUrlFormat:"originUrl",showUrlDialog:!1,useCustomUrl:"false",customUrlPrefix:"",loading:!1,currentPath:"",refreshLoading:!1,showTagDialog:!1,showBatchTagDialog:!1,currentTagFile:"",viewMode:"card",showMobileActionModal:!1,mobileActionFile:null,mobileActionIndex:-1,mobileActionIsFolder:!1,longPressTimer:null,showMobileDirectoryDrawer:!1,jumpPage:"",filters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},channelNameOptions:[],showMoveDialog:!1,moveTargetPath:"/",moveFileKey:"",moveFileIndex:-1,isBatchMove:!1}},components:{DashboardTabs:ti.A,TagManagementDialog:Me,BatchTagDialog:Ce,SkeletonLoader:Ta,FileCard:ua,FolderCard:_a,FileListItem:Vt,FileDetailDialog:ct,BatchActionBar:kt,MobileActionSheet:Q,MobileDirectoryDrawer:X,FilterDropdown:ei,MoveFileDialog:z,LanguageSwitcher:Yi.A},setup(){const e=(0,sn.KR)(null),t=(0,sn.KR)(null),a=(0,sn.KR)("card"),i=(0,sn.KR)([]),{isDragging:n,selectionRect:s}=ln({modes:{card:{containerRef:e,itemSelector:".img-card"},list:{containerRef:t,itemSelector:".list-item"}},viewMode:a,items:i});return{cardContainerRef:e,listContainerRef:t,viewModeRef:a,itemsRef:i,isDragging:n,selectionRect:s}},computed:{...(0,Hi.L8)(["adminUrlSettings","userConfig"]),filteredTableData(){return this.tableData},totalPages(){return Math.ceil(this.filteredTableData.length/this.pageSize)||1},realTotalPages(){const e=this.directFolderCount+this.directFileCount;return Math.ceil(e/this.pageSize)||1},activeFilterCount(){return Object.values(this.filters).reduce((e,t)=>e+(Array.isArray(t)?t.length:0),0)},hasSearchOrFilter(){return this.isSearchMode||this.activeFilterCount>0},paginatedTableData(){const e=this.sortData(this.filteredTableData),t=(this.currentPage-1)*this.pageSize,a=t+this.pageSize;let i=e.slice(t,a);const n=i.filter(e=>this.isImage(e)).map(e=>this.getFileLink(e.name));return i.forEach(e=>{this.isImage(e)&&(e.previewSrcList=n.slice(n.indexOf(this.getFileLink(e.name))).concat(n.slice(0,n.indexOf(this.getFileLink(e.name)))))}),i.forEach(e=>{"TelegramNew"===e.metadata?.Channel||"Telegram"===e.metadata?.Channel?e.channelTag="TG":"CloudflareR2"===e.metadata?.Channel?e.channelTag="R2":"S3"===e.metadata?.Channel?e.channelTag="S3":"Discord"===e.metadata?.Channel?e.channelTag="DC":"HuggingFace"===e.metadata?.Channel?e.channelTag="HF":"WebDAV"===e.metadata?.Channel?e.channelTag="WD":"External"===e.metadata?.Channel?e.channelTag=this.$t("dashboard.externalTag"):e.channelTag=this.$t("dashboard.unknownTag")}),i},sortIcon(){return"dateDesc"===this.sortOption?"sort-amount-down":"sort-alpha-up"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},detailDialogWidth(){return window.innerWidth>768?"70%":"90%"},accessType(){return"White"===this.detailFile?.metadata?.ListType?this.$t("filter.normal"):"Block"===this.detailFile?.metadata?.ListType||"adult"===this.detailFile?.metadata?.Label?this.$t("filter.blocked"):this.$t("filter.normal")},allUrl(){return"External"===this.detailFile?.metadata?.Channel?{originUrl:`${this.detailFile?.metadata?.ExternalLink}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}:{originUrl:`${this.rootUrl}${this.detailFile?.name}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.rootUrl}${this.detailFile?.name}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}},tableColumnNum(){return window.innerWidth>768?3:1},tablePreviewSpan(){return window.innerWidth>768?2:1},disableTooltip(){return window.innerWidth<768},selectPage(){return this.paginatedTableData.every(e=>e.selected)},selectedPageFiles(){return this.paginatedTableData.some(e=>e.selected)},selectPageIcon(){return this.selectPage?"check-square":this.selectedPageFiles?"minus-square":"square"},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.userConfig?.urlPrefix||`${document.location.origin}/file/`},isSelectAll:{get(){return this.paginatedTableData.length>0&&this.paginatedTableData.every(e=>e.selected)},set(e){this.paginatedTableData.forEach(t=>t.selected=e)}},isIndeterminate(){const e=this.paginatedTableData.filter(e=>e.selected).length;return e>0&&ee.selected&&!this.selectedFiles.includes(e))),this.selectedFiles=this.selectedFiles.filter(e=>e.selected),this.selectedFiles=this.selectedFiles.filter(t=>e.includes(t))},deep:!0},sortOption(e){localStorage.setItem("sortOption",e)},defaultUrlFormat(e){localStorage.setItem("defaultUrlFormat",e)},showdetailDialog(e){e&&(this.activeUrlTab=this.defaultUrlFormat||"originUrl")},customUrlPrefix(e){this.$store.commit("setAdminUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setAdminUrlSettings",{key:"useCustomUrl",value:e})},currentPath(e){this.tableData.forEach(e=>e.selected=!1)}},methods:{toggleViewMode(){this.viewMode="card"===this.viewMode?"list":"card",localStorage.setItem("viewMode",this.viewMode)},handleSelectAllPage(e){this.paginatedTableData.forEach(t=>t.selected=e)},handleTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!1,this.showMobileActionModal=!0},500)},handleTouchEnd(){this.longPressTimer&&(clearTimeout(this.longPressTimer),this.longPressTimer=null)},handleFolderTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!0,this.showMobileActionModal=!0},500)},handleMobileAction(e){const t=this.mobileActionFile,a=this.mobileActionIndex;if(this.showMobileActionModal=!1,t)switch(e){case"detail":this.openDetailDialog(a,t.name);break;case"copy":this.handleCopy(a,t.name);break;case"folderCopy":this.handleFolderCopy(t.name);break;case"download":this.handleDownload(t.name);break;case"move":this.handleMove(a,t.name);break;case"delete":this.handleDelete(a,t.name);break;case"tag":this.handleTagManagement(t.name);break}},handleGoBack(){const e=this.currentPath.split("/").filter(Boolean);if(e.length>0){e.pop();const t=e.join("/");this.navigateToFolder(t)}this.showMobileDirectoryDrawer=!1},getTagColor(e){const t=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)"];return t[e%t.length]},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)},formatFileSize(e){if(!e||0===e)return"-";if(e=Number(e),isNaN(e))return"-";const t=["B","KB","MB","GB","TB"];let a=0;while(e>=1024&&a0?1:0)+" "+t[a]},handleSearch(){if(this.search=this.tempSearch,this.isSearchMode=""!==this.search.trim(),this.currentPage=1,this.search&&this.search.trim()){const e=[],t=[];let a=this.search;const i=/-#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(i,(e,a)=>(t.push(a.toLowerCase())," "));const n=/#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(n,(t,a)=>(e.push(a.toLowerCase())," ")),this.searchKeywords=a.replace(/\s+/g," ").trim(),this.searchIncludeTags=e.join(","),this.searchExcludeTags=t.join(","),console.log("Search keywords:",this.searchKeywords),console.log("Include tags:",this.searchIncludeTags),console.log("Exclude tags:",this.searchExcludeTags)}else this.searchKeywords="",this.searchIncludeTags="",this.searchExcludeTags="";this.refreshFileList()},handleFilterChange({type:e,filters:t}){this.filters=t,this.currentPage=1,this.refreshFileList()},clearFilters(){this.filters={listType:[],label:[],fileType:[],channel:[],channelName:[]},this.currentPage=1,this.refreshFileList()},async extractChannelNames(){try{const e=await(0,E.A)("/api/channels?includeDisabled=true",{method:"GET"});if(e.ok){const t=await e.json(),a=[],i={telegram:"Telegram",cfr2:"Cloudflare R2",s3:"S3",discord:"Discord",huggingface:"HuggingFace",webdav:"WebDAV"};Object.entries(t).forEach(([e,t])=>{Array.isArray(t)&&t.length>0&&t.forEach(t=>{t.name&&a.push({name:t.name,type:t.type,typeLabel:i[e]||e,value:`${t.type}:${t.name}`})})}),a.sort((e,t)=>e.type!==t.type?e.type.localeCompare(t.type):e.name.localeCompare(t.name)),this.channelNameOptions=a}}catch(e){console.error("Failed to fetch channel names:",e)}},handleDownload(e){const t=document.createElement("a");t.href=this.getFileLink(e),t.download=e,t.click()},openDetailDialog(e,t){this.detailFile=this.paginatedTableData[e],this.showdetailDialog=!0},handleTabClick(e){this.activeUrlTab=e.props.name},handleUrlClick(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("dashboard.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("dashboard.copyFailed")})})},handleDetailDelete(e){this.$confirm(this.$t("dashboard.deleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/delete/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&this.tableData.splice(t,1)}}).then(()=>{this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.deleteSuccess")),this.showdetailDialog=!1}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBlock(e){this.$confirm(this.$t("dashboard.blockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/block/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="Block")}}).then(()=>{this.$message.success(this.$t("dashboard.blockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.blockFailed")))}).catch(()=>console.log("Block cancelled"))},handleWhite(e){this.$confirm(this.$t("dashboard.whiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/white/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="White")}}).then(()=>{this.$message.success(this.$t("dashboard.whiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.whiteFailed")))}).catch(()=>console.log("White cancelled"))},handleDelete(e,t){const a=this.tableData.find(e=>e.name===t).isFolder;this.$confirm(a?this.$t("dashboard.deleteFolderConfirm"):this.$t("dashboard.deleteFileConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/delete/${t}?folder=${a}`,{method:"GET"}).then(e=>{if(!e.ok)return Promise.reject("Request failed");{const e=this.tableData.findIndex(e=>e.name===t);-1!==e&&this.tableData.splice(e,1)}}).then(()=>{this.updateStats(-1,!1),tn.removeFile(t),this.$message.success(this.$t("dashboard.deleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBatchDelete(){this.$confirm(this.$t("dashboard.batchDeleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>{const t=e.isFolder;return(0,E.A)(`/api/manage/delete/${e.name}?folder=${t}`,{method:"GET"})});Promise.all(e).then(e=>{let t=0;e.forEach((e,a)=>{if(e.ok){t++;const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[a].name);-1!==e&&this.tableData.splice(e,1),tn.removeFile(this.selectedFiles[a].name)}}),this.selectedFiles=[],this.updateStats(-t,!1),this.$message.success(this.$t("dashboard.batchDeleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchDeleteFailed")))}).catch(()=>console.log("Batch delete cancelled"))},async handleBatchCopy(){const e=this.selectedFiles.filter(e=>!e.isFolder),t=this.selectedFiles.filter(e=>e.isFolder);let a=null;t.length>0&&(a=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")}));try{let n=[...e];for(const e of t)try{const t=await(0,E.A)(`/api/manage/list?dir=${encodeURIComponent(e.name)}&recursive=true&count=-1`,{method:"GET"}),a=await t.json();a.files&&a.files.length>0&&(n=n.concat(a.files))}catch(i){console.error(`获取文件夹 ${e.name} 内容失败:`,i)}if(a&&a.close(),0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===s.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const r=s.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(r),this.$message.success(this.$t("dashboard.batchCopySuccess",{count:s.length}))):this.copyToClipboardFallback(r)}catch(i){a&&a.close(),console.error("Batch copy failed:",i),this.$message.error(this.$t("dashboard.batchCopyFailed"))}},copyToClipboardFallback(e){const t=document.createElement("textarea");document.body.appendChild(t),t.style.position="fixed",t.style.clip="rect(0 0 0 0)",t.style.top="10px",t.value=e,t.select(),document.execCommand("copy"),document.body.removeChild(t),this.$message.success(this.$t("dashboard.batchCopyLinksSuccess"))},handleCopy(e,t){let a="";if("External"===this.paginatedTableData[e].metadata?.Channel)switch(this.defaultUrlFormat){case"originUrl":a=this.paginatedTableData[e].metadata?.ExternalLink;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.paginatedTableData[e].metadata?.ExternalLink})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.paginatedTableData[e].metadata?.ExternalLink}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}else switch(this.defaultUrlFormat){case"originUrl":a=`${this.rootUrl}${t}`;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.rootUrl}${t})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.rootUrl}${t}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}navigator.clipboard?navigator.clipboard.writeText(a).then(()=>this.$message.success(this.$t("dashboard.copyFileLinkSuccess"))):this.copyToClipboardFallback(a)},async loadMoreData(){this.loading=!0;try{await tn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,60,this.filters),await this.fetchFileList()}catch(e){this.$message.error(this.$t("dashboard.loadMoreFailed"))}finally{this.loading=!1}},updateStats(e,t=!1){t?this.Number=e:this.Number+=e},sort(e){this.sortOption=e},sortData(e){const t=e.filter(e=>e.isFolder),a=e.filter(e=>!e.isFolder);return"dateDesc"===this.sortOption?(t.sort((e,t)=>new Date(t.metadata?.TimeStamp)-new Date(e.metadata?.TimeStamp)),a.sort((e,t)=>new Date(t.metadata?.TimeStamp)-new Date(e.metadata?.TimeStamp))):(t.sort((e,t)=>e.name.localeCompare(t.name)),a.sort((e,t)=>e.name.localeCompare(t.name))),t.concat(a)},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},handleSelectPage(){this.selectPage?this.paginatedTableData.forEach(e=>e.selected=!1):this.paginatedTableData.forEach(e=>e.selected=!0)},clearSelection(){this.tableData.forEach(e=>e.selected=!1),this.selectedFiles=[]},handleBatchAction(e){"copy"===e?this.handleBatchCopy():"delete"===e?this.handleBatchDelete():"download"===e?this.handleBatchDownload():"move"===e?this.handleBatchMove():"tagManagement"===e?this.handleBatchTagManagement():"ban"===e?this.handleBatchBlock():"white"===e&&this.handleBatchWhite()},handleMove(e,t){this.moveFileKey=t,this.moveFileIndex=e,this.isBatchMove=!1,this.moveTargetPath="/",this.showMoveDialog=!0},handleBatchMove(){this.isBatchMove=!0,this.moveTargetPath="/",this.showMoveDialog=!0},confirmMove(e){const t=e,a=(0,an.G)(t);if(!a.valid)return void this.$message.error(a.error);const i=t.replace(/^\/+/,"")+(t.endsWith("/")||""===t?"":"/");i!==this.currentPath?(this.showMoveDialog=!1,this.isBatchMove?this.executeBatchMove(i):this.executeSingleMove(i)):this.$message.warning(this.$t("dashboard.moveTargetSameAsCurrent"))},executeSingleMove(e){const t=this.moveFileKey,a=this.tableData.find(e=>e.name===t)?.isFolder;(0,E.A)(`/api/manage/move/${t}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"}).then(i=>{if(!i.ok)return Promise.reject("Request failed");{const i=this.tableData.findIndex(e=>e.name===t);if(-1!==i){const n=e+t.split("/").pop();tn.moveFile(t,n,a,this.currentPath),this.tableData.splice(i,1),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})})}this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},executeBatchMove(e){const t=this.selectedFiles.map(t=>{const a=t.isFolder;return(0,E.A)(`/api/manage/move/${t.name}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"})});Promise.all(t).then(t=>{let a=0;t.forEach((t,i)=>{if(t.ok){a++;const t=this.selectedFiles[i];t.selected=!1;const n=this.tableData.findIndex(e=>e.name===t.name);if(-1!==n){const a=e+t.name.split("/").pop();tn.moveFile(t.name,a,t.isFolder,this.currentPath),this.tableData.splice(n,1)}}}),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})}),this.updateStats(-a,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},handleBatchBlock(){this.$confirm(this.$t("dashboard.batchBlockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,E.A)(`/api/manage/block/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="Block")}}),this.$message.success(this.$t("dashboard.batchBlockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchBlockFailed")))}).catch(()=>console.log("Batch block cancelled"))},handleBatchWhite(){this.$confirm(this.$t("dashboard.batchWhiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,E.A)(`/api/manage/white/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="White")}}),this.$message.success(this.$t("dashboard.batchWhiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchWhiteFailed")))}).catch(()=>console.log("Batch white cancelled"))},handleBatchDownload(){const e=new(Qi()),t=e.folder("files"),a={},i=this.selectedFiles.map(async e=>{if(e.isFolder)return;const i=await fetch(this.getFileLink(e.name)),n=await i.blob();let s=e.metadata?.FileName||e.name;if(a[s]){const t=s.substring(s.lastIndexOf(".")),i=s.substring(0,s.lastIndexOf("."));s=`${i}(${a[s]})${t}`,a[e.name]++}else a[s]=1;t.file(s,n)});Promise.all(i).then(()=>e.generateAsync({type:"blob"})).then(e=>{const t=document.createElement("a");t.href=URL.createObjectURL(e),t.download="files.zip",t.click()})},isVideo(e){if(this.isAudio(e))return!1;let t=e.metadata?.FileType?.includes("video");if(!t){const a=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","rmvb","3gp","mpg","mpeg","m4v","f4v","rm","asf","dat","ts","vob","swf","divx","xvid","m2ts","mts","m2v","3g2","3gp2","3gpp","3gpp2","mpe","m1v","mpv","mpv2","mp2v","m2t","m2ts","m2v","m4v"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isAudio(e){let t=e.metadata?.FileType?.includes("audio");if(!t){const a=["mp3","wav","flac","aac","ogg","wma","m4a","ape","aiff","alac","opus","mid","midi","m4b","m4p","m4r","amr","au","ra","ram"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isImage(e){let t=e.metadata?.FileType?.includes("image");if(!t){const a=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","psd","ai","eps","raw","cr2","nef","orf","sr2","dng","arw","rw2","raf","pef","x3f","srf","erf","mrw","nrw","kdc","dcr","mef","mos","crw","raf","rwl","srw","3fr","fff","iiq","qtk","bay","k25","kdc","dcs","drf","dng","erf","kdc","mdc","mef","mos","mrw","nef","nrw","orf","pef","ptx","pxn","r3d","raf","raw","rwl","rw2","rwz","sr2","srf","x3f"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},getFileLink(e){const t=`/file/${e}?from=admin`;return t},handlePageChange(e){this.currentPage=e,this.currentPage===Math.ceil(this.tableData.length/this.pageSize)&&this.loadMoreData()},handleJumpPage(){const e=parseInt(this.jumpPage);isNaN(e)||e<1?this.$message.warning(this.$t("dashboard.invalidPageNumber")):e>this.realTotalPages?this.$message.warning(this.$t("dashboard.pageExceedsMax",{max:this.realTotalPages})):(e>this.totalPages?(this.$message.info(this.$t("dashboard.loadingData")),this.loadMoreDataUntilPage(e)):this.currentPage=e,this.jumpPage="")},async loadMoreDataUntilPage(e){this.loading=!0;try{const t=e*this.pageSize,a=this.filteredTableData.filter(e=>e.isFolder).length,i=this.filteredTableData.filter(e=>!e.isFolder).length,n=Math.max(0,t-a-i);n>0&&(await tn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,n,this.filters),await this.fetchFileList()),this.currentPage=Math.min(e,this.totalPages)}catch(t){this.$message.error(this.$t("dashboard.loadDataFailed"))}finally{this.loading=!1}},isFolder(e){if(e.isFolder)return!0;let t=e.name;if(t.startsWith("http")&&(t=t.split("/file/")[1]),t&&t.includes("/")){const e=this.currentPath?t.substring(this.currentPath.length):t;return""===this.currentPath?!t.split("/")[0].includes("."):e.includes("/")}return!1},getFolderName(e){let t="";if(e&&e.includes("/")){const a=e.split("/");if(""===this.currentPath)t=a[0];else{const a=e.substring(this.currentPath.length);t=a.split("/")[0]}}else t=e;const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileName(e){let t=e.split("/").pop();const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileNameStart(e){if(!e)return"";if(e.length<=30)return e;const t=e.lastIndexOf(".");if(t>0){const a=e.substring(0,t),i=Math.min(a.length,Math.floor(.6*e.length));return a.substring(0,i)}return e.substring(0,Math.floor(.6*e.length))},getFileNameEnd(e){if(!e)return"";if(e.length<=30)return"";const t=e.lastIndexOf(".");if(t>0){const a=e.substring(t),i=e.substring(0,t),n=Math.min(8,Math.floor(.2*i.length));return"…"+i.substring(i.length-n)+a}const a=Math.min(10,Math.floor(.3*e.length));return"…"+e.substring(e.length-a)},enterFolder(e){this.currentPath=e+(e.endsWith("/")?"":"/"),this.refreshFileList()},navigateToFolder(e){this.currentPath=e?e+(e.endsWith("/")?"":"/"):"",this.refreshFileList()},async fetchFileList(){this.loading=!0;try{const e=tn.getLocalFileList(),t=new Set(e.directories||[]),a=e.files||[],i=Array.from(t).map(e=>({name:e,isFolder:!0,selected:!1,metadata:{FileName:e.split("/").pop()}})),n=a.map(e=>({name:e.name,isFolder:!1,selected:!1,metadata:e.metadata}));this.tableData=[...i,...n],this.updateStats(e.totalCount,!0),this.directFileCount=e.directFileCount||0,this.directFolderCount=e.directFolderCount||0}catch(e){console.error("Error fetching file list:",e),this.$message.error(this.$t("dashboard.fetchFileListFailed"))}finally{this.loading=!1}},async refreshFileList(){this.refreshLoading=!0,this.loading=!0;try{const e=await tn.refreshFileList(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,this.filters);if(!e)throw new Error("Refresh failed");await this.fetchFileList()}catch(e){!e.message?.includes("Unauthorized")&&this.$store.state.adminLoggedIn&&(console.error("Error refreshing file list:",e),this.$message.error(this.$t("dashboard.refreshFailed")))}finally{this.refreshLoading=!1,this.loading=!1}},async refreshLocalFileList(){this.refreshLoading=!0,this.loading=!0;try{await this.fetchFileList()}catch(e){console.error("Error refreshing local file list:",e),this.$message.error(this.$t("dashboard.refreshFailed"))}finally{this.refreshLoading=!1,this.loading=!1}},handleTagManagement(e){this.currentTagFile=e,this.showTagDialog=!0},handleBatchTagManagement(){0!==this.selectedFiles.length?this.showBatchTagDialog=!0:this.$message.warning(this.$t("dashboard.selectFilesFirst"))},async handleTagsUpdated(e){const t=this.tableData.findIndex(e=>e.name===this.currentTagFile);-1!==t&&(this.tableData[t].metadata||(this.tableData[t].metadata={}),this.tableData[t].metadata.Tags=e,this.showdetailDialog&&this.detailFile?.name===this.currentTagFile&&(this.detailFile.metadata||(this.detailFile.metadata={}),this.detailFile.metadata.Tags=e))},async handleBatchTagsUpdated(){await this.refreshLocalFileList()},handleMetadataUpdated(e,t){const a=this.tableData.findIndex(t=>t.name===e);-1!==a&&(this.tableData[a].metadata={...this.tableData[a].metadata,...t}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.metadata={...this.detailFile.metadata,...t})},handleFileRenamed(e,t,a){const i=this.tableData.findIndex(t=>t.name===e);-1!==i&&(this.tableData[i].name=t,this.tableData[i].metadata={...this.tableData[i].metadata,...a}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.name=t,this.detailFile.metadata={...this.detailFile.metadata,...a},this.showdetailDialog=!1,this.$nextTick(()=>{this.showdetailDialog=!0}))},generateFileLink(e,t){const a="External"===t?.Channel,i=a?t?.ExternalLink:`${this.rootUrl}${e}`,n=t?.FileName||e;switch(this.defaultUrlFormat){case"originUrl":return i;case"mdUrl":return`![${n}](${i})`;case"htmlUrl":return`${n}`;case"bbUrl":return`[img]${i}[/img]`;case"tgId":return t?.TgFileId||"";case"s3Location":return t?.S3Location||"";default:return i}},async handleFolderCopy(e){const t=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")});try{const a=await(0,E.A)(`/api/manage/list?dir=${encodeURIComponent(e)}&recursive=true&count=-1`,{method:"GET"}),i=await a.json();if(t.close(),!i.files||0===i.files.length)return void this.$message.warning(this.$t("dashboard.folderEmptyNoLinks"));const n=i.files.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length}))):(this.copyToClipboardFallback(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length})))}catch(a){t.close(),console.error("Copy folder links failed:",a),this.$message.error(this.$t("dashboard.copyFolderLinksFailed"))}}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,this.refreshFileList().then(()=>this.extractChannelNames()).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("dashboard.syncDataError"))}).finally(()=>{this.loading=!1}),this.customUrlPrefix=this.adminUrlSettings.customUrlPrefix,this.useCustomUrl=this.adminUrlSettings.useCustomUrl;const e=localStorage.getItem("viewMode");"card"!==e&&"list"!==e||(this.viewMode=e)}};const cn=(0,I.A)(dn,[["render",Gi],["__scopeId","data-v-437b7a30"]]);var hn=cn},15616:function(e,t,a){"use strict";a(85331),a(97197)},33892:function(e,t,a){"use strict";a.d(t,{A:function(){return $}});var i=a(99114),n=(a(85331),a(30694),a(49385)),s=(a(37952),a(30650)),r=(a(19104),a(31802)),o=(a(13378),a(80047)),l=(a(99648),a(56768)),d=a(45130),c=a(24232);const h={class:"directory-tree-picker"},u={class:"tree-container"},f={key:0,class:"error-state"},m={class:"error-text"},p={class:"node-label"},g={class:"tree-container"},b={key:0,class:"error-state"},v={class:"error-text"},k={class:"node-label"};function y(e,t,a,y,_,w){const F=(0,l.g2)("font-awesome-icon"),C=o.S2,T=r.qk,$=s.Vc,L=n.pw,S=i.A;return(0,l.uX)(),(0,l.CE)("div",h,[w.isDesktop?((0,l.uX)(),(0,l.Wv)($,{key:0,visible:_.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>_.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,l.k6)(()=>[(0,l.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",u,[_.error?((0,l.uX)(),(0,l.CE)("div",f,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",m,(0,c.v_)(_.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRef",data:_.treeData,props:_.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",p,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[S,_.loading]])]),_:3},8,["visible"])):((0,l.uX)(),(0,l.CE)(l.FK,{key:1},[(0,l.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,l.bF)(L,{modelValue:_.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>_.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",g,[_.error?((0,l.uX)(),(0,l.CE)("div",b,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",v,(0,c.v_)(_.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRefMobile",data:_.treeData,props:_.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",k,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[S,_.loading]])]),_:1},8,["modelValue","title"])],64))])}var _=a(457),w=a(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,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 _.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},C=a(71241);const T=(0,C.A)(F,[["render",y],["__scopeId","data-v-62eab69a"]]);var $=T},34396:function(e,t,a){"use strict";a(85331),a(4885)},34896:function(e,t,a){"use strict";a(85331)},37952:function(e,t,a){"use strict";a(85331),a(97197)},44813:function(e,t,a){a(44114),a(16573),a(78100),a(77936),a(18111),a(22489),a(7588),a(79577),a(41549),a(49797),a(49631),a(35623),a(59848),function(t){e.exports=t()}(function(){return function e(t,a,i){function n(r,o){if(!a[r]){if(!t[r]){var l=void 0;if(!o&&l)return require(r,!0);if(s)return s(r,!0);var d=new Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}var c=a[r]={exports:{}};t[r][0].call(c.exports,function(e){var a=t[r][1][e];return n(a||e)},c,c.exports,e,t,a,i)}return a[r].exports}for(var s=void 0,r=0;r>2,o=(3&t)<<4|a>>4,l=1>6:64,d=2>4,a=(15&r)<<4|(o=s.indexOf(e.charAt(d++)))>>2,i=(3&o)<<6|(l=s.indexOf(e.charAt(d++))),u[c++]=t,64!==o&&(u[c++]=a),64!==l&&(u[c++]=i);return u}},{"./support":30,"./utils":32}],2:[function(e,t,a){"use strict";var i=e("./external"),n=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),r=e("./stream/DataLengthProbe");function o(e,t,a,i,n){this.compressedSize=e,this.uncompressedSize=t,this.crc32=a,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var e=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new r("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,a){return e.pipe(new s).pipe(new r("uncompressedSize")).pipe(t.compressWorker(a)).pipe(new r("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,a){"use strict";var i=e("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},a.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,a){"use strict";var i=e("./utils"),n=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==i.getTypeOf(e)?function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t[o])];return-1^e}(0|t,e,e.length,0):function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t.charCodeAt(o))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,a){"use strict";a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(e,t,a){"use strict";var i=null;i="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:i}},{lie:37}],7:[function(e,t,a){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,n=e("pako"),s=e("./utils"),r=e("./stream/GenericWorker"),o=i?"uint8array":"array";function l(e,t){r.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}a.magic="\b\0",s.inherits(l,r),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},l.prototype.flush=function(){r.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){r.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},a.compressWorker=function(e){return new l("Deflate",e)},a.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,a){"use strict";function i(e,t){var a,i="";for(a=0;a>>=8;return i}function n(e,t,a,n,r,c){var h,u,f=e.file,m=e.compression,p=c!==o.utf8encode,g=s.transformTo("string",c(f.name)),b=s.transformTo("string",o.utf8encode(f.name)),v=f.comment,k=s.transformTo("string",c(v)),y=s.transformTo("string",o.utf8encode(v)),_=b.length!==f.name.length,w=y.length!==v.length,F="",C="",T="",$=f.dir,L=f.date,S={crc32:0,compressedSize:0,uncompressedSize:0};t&&!a||(S.crc32=e.crc32,S.compressedSize=e.compressedSize,S.uncompressedSize=e.uncompressedSize);var x=0;t&&(x|=8),p||!_&&!w||(x|=2048);var D=0,E=0;$&&(D|=16),"UNIX"===r?(E=798,D|=function(e,t){var a=e;return e||(a=t?16893:33204),(65535&a)<<16}(f.unixPermissions,$)):(E=20,D|=function(e){return 63&(e||0)}(f.dosPermissions)),h=L.getUTCHours(),h<<=6,h|=L.getUTCMinutes(),h<<=5,h|=L.getUTCSeconds()/2,u=L.getUTCFullYear()-1980,u<<=4,u|=L.getUTCMonth()+1,u<<=5,u|=L.getUTCDate(),_&&(C=i(1,1)+i(l(g),4)+b,F+="up"+i(C.length,2)+C),w&&(T=i(1,1)+i(l(k),4)+y,F+="uc"+i(T.length,2)+T);var A="";return A+="\n\0",A+=i(x,2),A+=m.magic,A+=i(h,2),A+=i(u,2),A+=i(S.crc32,4),A+=i(S.compressedSize,4),A+=i(S.uncompressedSize,4),A+=i(g.length,2),A+=i(F.length,2),{fileRecord:d.LOCAL_FILE_HEADER+A+g+F,dirRecord:d.CENTRAL_FILE_HEADER+i(E,2)+A+i(k.length,2)+"\0\0\0\0"+i(D,4)+i(n,4)+g+F+k}}var s=e("../utils"),r=e("../stream/GenericWorker"),o=e("../utf8"),l=e("../crc32"),d=e("../signature");function c(e,t,a,i){r.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=a,this.encodeFileName=i,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}s.inherits(c,r),c.prototype.push=function(e){var t=e.meta.percent||0,a=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,r.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:a?(t+100*(a-i-1))/a:100}}))},c.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var a=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:a.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,a=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(a.dirRecord),t)this.push({data:function(e){return d.DATA_DESCRIPTOR+i(e.crc32,4)+i(e.compressedSize,4)+i(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:a.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)a=(a<<8)+this.byteAt(t);return this.index+=e,a},readString:function(e){return i.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=n},{"../utils":32}],19:[function(e,t,a){"use strict";var i=e("./Uint8ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,a){"use strict";var i=e("./DataReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},n.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},n.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./DataReader":18}],21:[function(e,t,a){"use strict";var i=e("./ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,a){"use strict";var i=e("../utils"),n=e("../support"),s=e("./ArrayReader"),r=e("./StringReader"),o=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=i.getTypeOf(e);return i.checkSupport(t),"string"!==t||n.uint8array?"nodebuffer"===t?new o(e):n.uint8array?new l(i.transformTo("uint8array",e)):new s(i.transformTo("array",e)):new r(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,a){"use strict";a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../utils");function s(e){i.call(this,"ConvertWorker to "+e),this.destType=e}n.inherits(s,i),s.prototype.processChunk=function(e){this.push({data:n.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../crc32");function s(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,i),s.prototype.processChunk=function(e){this.streamInfo.crc32=n(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}i.inherits(s,n),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}n.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=i.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,a){"use strict";function i(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var a=0;a "+e:e}},t.exports=i},{}],29:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./ConvertWorker"),s=e("./GenericWorker"),r=e("../base64"),o=e("../support"),l=e("../external"),d=null;if(o.nodestream)try{d=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function c(e,t){return new l.Promise(function(a,n){var s=[],o=e._internalType,l=e._outputType,d=e._mimeType;e.on("data",function(e,a){s.push(e),t&&t(a)}).on("error",function(e){s=[],n(e)}).on("end",function(){try{var e=function(e,t,a){switch(e){case"blob":return i.newBlob(i.transformTo("arraybuffer",t),a);case"base64":return r.encode(t);default:return i.transformTo(e,t)}}(l,function(e,t){var a,i=0,n=null,s=0;for(a=0;a>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t}(e)},a.utf8decode=function(e){return n.nodebuffer?i.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,a,n,s,r=e.length,l=new Array(2*r);for(t=a=0;t>10&1023,l[a++]=56320|1023&n)}return l.length!==a&&(l.subarray?l=l.subarray(0,a):l.length=a),i.applyFromCharCode(l)}(e=i.transformTo(n.uint8array?"uint8array":"array",e))},i.inherits(d,r),d.prototype.processChunk=function(e){var t=i.transformTo(n.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(n.uint8array){var s=t;(t=new Uint8Array(s.length+this.leftOver.length)).set(this.leftOver,0),t.set(s,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var r=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+o[e[a]]>t?a:t}(t),l=t;r!==t.length&&(n.uint8array?(l=t.subarray(0,r),this.leftOver=t.subarray(r,t.length)):(l=t.slice(0,r),this.leftOver=t.slice(r,t.length))),this.push({data:a.utf8decode(l),meta:e.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=d,i.inherits(c,r),c.prototype.processChunk=function(e){this.push({data:a.utf8encode(e.data),meta:e.meta})},a.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var i=e("./support"),n=e("./base64"),s=e("./nodejsUtils"),r=e("./external");function o(e){return e}function l(e,t){for(var a=0;a>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===n.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===n.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===n.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===n.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,a,i,n=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t},a.buf2binstring=function(e){return l(e,e.length)},a.binstring2buf=function(e){for(var t=new i.Buf8(e.length),a=0,n=t.length;a>10&1023,d[i++]=56320|1023&n)}return l(d,i)},a.utf8border=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+r[e[a]]>t?a:t}},{"./common":41}],43:[function(e,t,a){"use strict";t.exports=function(e,t,a,i){for(var n=65535&e,s=e>>>16&65535,r=0;0!==a;){for(a-=r=2e3>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t,a,n){var s=i,r=n+a;e^=-1;for(var o=n;o>>8^s[255&(e^t[o])];return-1^e}},{}],46:[function(e,t,a){"use strict";var i,n=e("../utils/common"),s=e("./trees"),r=e("./adler32"),o=e("./crc32"),l=e("./messages"),d=0,c=4,h=0,u=-2,f=-1,m=4,p=2,g=8,b=9,v=286,k=30,y=19,_=2*v+1,w=15,F=3,C=258,T=C+F+1,$=42,L=113,S=1,x=2,D=3,E=4;function A(e,t){return e.msg=l[t],t}function I(e){return(e<<1)-(4e.avail_out&&(a=e.avail_out),0!==a&&(n.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function B(e,t){s._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,z(e.strm)}function W(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function R(e,t){var a,i,n=e.max_chain_length,s=e.strstart,r=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-T?e.strstart-(e.w_size-T):0,d=e.window,c=e.w_mask,h=e.prev,u=e.strstart+C,f=d[s+r-1],m=d[s+r];e.prev_length>=e.good_match&&(n>>=2),o>e.lookahead&&(o=e.lookahead);do{if(d[(a=t)+r]===m&&d[a+r-1]===f&&d[a]===d[s]&&d[++a]===d[s+1]){s+=2,a++;do{}while(d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&sl&&0!=--n);return r<=e.lookahead?r:e.lookahead}function O(e){var t,a,i,s,l,d,c,h,u,f,m=e.w_size;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-T)){for(n.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=a=e.hash_size;i=e.head[--t],e.head[t]=m<=i?i-m:0,--a;);for(t=a=m;i=e.prev[--t],e.prev[t]=m<=i?i-m:0,--a;);s+=m}if(0===e.strm.avail_in)break;if(d=e.strm,c=e.window,h=e.strstart+e.lookahead,u=s,f=void 0,f=d.avail_in,u=F)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F)if(i=s._tr_tally(e,e.strstart-e.match_start,e.match_length-F),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=F){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F&&e.match_length<=e.prev_length){for(n=e.strstart+e.lookahead-F,i=s._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-F),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=n&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(O(e),0===e.lookahead&&t===d)return S;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+a;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,B(e,!1),0===e.strm.avail_out))return S;if(e.strstart-e.block_start>=e.w_size-T&&(B(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?D:E):(e.strstart>e.block_start&&(B(e,!1),e.strm.avail_out),S)}),new V(4,4,8,4,N),new V(4,5,16,8,N),new V(4,6,32,32,N),new V(4,4,16,16,M),new V(8,16,32,32,M),new V(8,16,128,128,M),new V(8,32,128,256,M),new V(32,128,258,1024,M),new V(32,258,258,4096,M)],a.deflateInit=function(e,t){return Z(e,t,g,15,8,0)},a.deflateInit2=Z,a.deflateReset=K,a.deflateResetKeep=j,a.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?u:(e.state.gzhead=t,h):u},a.deflate=function(e,t){var a,n,r,l;if(!e||!e.state||5>8&255),W(n,n.gzhead.time>>16&255),W(n,n.gzhead.time>>24&255),W(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),W(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(W(n,255&n.gzhead.extra.length),W(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=o(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(W(n,0),W(n,0),W(n,0),W(n,0),W(n,0),W(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),W(n,3),n.status=L);else{var f=g+(n.w_bits-8<<4)<<8;f|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(f|=32),f+=31-f%31,n.status=L,P(n,f),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(r=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),z(e),r=n.pending,n.pending!==n.pending_buf_size));)W(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),z(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),z(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&z(e),n.pending+2<=n.pending_buf_size&&(W(n,255&e.adler),W(n,e.adler>>8&255),e.adler=0,n.status=L)):n.status=L),0!==n.pending){if(z(e),0===e.avail_out)return n.last_flush=-1,h}else if(0===e.avail_in&&I(t)<=I(a)&&t!==c)return A(e,-5);if(666===n.status&&0!==e.avail_in)return A(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==d&&666!==n.status){var m=2===n.strategy?function(e,t){for(var a;;){if(0===e.lookahead&&(O(e),0===e.lookahead)){if(t===d)return S;break}if(e.match_length=0,a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(B(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?D:E):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?S:x}(n,t):3===n.strategy?function(e,t){for(var a,i,n,r,o=e.window;;){if(e.lookahead<=C){if(O(e),e.lookahead<=C&&t===d)return S;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=F&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=F?(a=s._tr_tally(e,1,e.match_length-F),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(B(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?D:E):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?S:x}(n,t):i[n.level].func(n,t);if(m!==D&&m!==E||(n.status=666),m===S||m===D)return 0===e.avail_out&&(n.last_flush=-1),h;if(m===x&&(1===t?s._tr_align(n):5!==t&&(s._tr_stored_block(n,0,0,!1),3===t&&(U(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),z(e),0===e.avail_out))return n.last_flush=-1,h}return t!==c?h:n.wrap<=0?1:(2===n.wrap?(W(n,255&e.adler),W(n,e.adler>>8&255),W(n,e.adler>>16&255),W(n,e.adler>>24&255),W(n,255&e.total_in),W(n,e.total_in>>8&255),W(n,e.total_in>>16&255),W(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),z(e),0=a.w_size&&(0===o&&(U(a.head),a.strstart=0,a.block_start=0,a.insert=0),f=new n.Buf8(a.w_size),n.arraySet(f,t,m-a.w_size,a.w_size,0),t=f,m=a.w_size),l=e.avail_in,d=e.next_in,c=e.input,e.avail_in=m,e.next_in=0,e.input=t,O(a);a.lookahead>=F;){for(i=a.strstart,s=a.lookahead-(F-1);a.ins_h=(a.ins_h<>>=y=k>>>24,m-=y,0===(y=k>>>16&255))$[s++]=65535&k;else{if(!(16&y)){if(0==(64&y)){k=p[(65535&k)+(f&(1<>>=y,m-=y),m<15&&(f+=T[i++]<>>=y=k>>>24,m-=y,!(16&(y=k>>>16&255))){if(0==(64&y)){k=g[(65535&k)+(f&(1<>>=y,m-=y,(y=s-r)>3,f&=(1<<(m-=_<<3))-1,e.next_in=i,e.next_out=s,e.avail_in=i>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function b(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=u,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(f),t.distcode=t.distdyn=new i.Buf32(m),t.sane=1,t.back=-1,c):h}function v(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,b(e)):h}function k(e,t){var a,i;return e&&e.state?(i=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=r.wsize?(i.arraySet(r.window,t,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n<(s=r.wsize-r.wnext)&&(s=n),i.arraySet(r.window,t,a-n,s,r.wnext),(n-=s)?(i.arraySet(r.window,t,a-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=s,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,a.check=s(a.check,O,2,0),_=y=0,a.mode=2;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&y)<<8)+(y>>8))%31){e.msg="incorrect header check",a.mode=30;break}if(8!=(15&y)){e.msg="unknown compression method",a.mode=30;break}if(_-=4,z=8+(15&(y>>>=4)),0===a.wbits)a.wbits=z;else if(z>a.wbits){e.msg="invalid window size",a.mode=30;break}a.dmax=1<>8&1),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,a.check=s(a.check,O,2,0)),_=y=0,a.mode=3;case 3:for(;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}a.head&&(a.head.time=y),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,O[2]=y>>>16&255,O[3]=y>>>24&255,a.check=s(a.check,O,4,0)),_=y=0,a.mode=4;case 4:for(;_<16;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}a.head&&(a.head.xflags=255&y,a.head.os=y>>8),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,a.check=s(a.check,O,2,0)),_=y=0,a.mode=5;case 5:if(1024&a.flags){for(;_<16;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}a.length=y,a.head&&(a.head.extra_len=y),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,a.check=s(a.check,O,2,0)),_=y=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(1024&a.flags&&(v<($=a.length)&&($=v),$&&(a.head&&(z=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),i.arraySet(a.head.extra,f,g,$,z)),512&a.flags&&(a.check=s(a.check,f,$,g)),v-=$,g+=$,a.length-=$),a.length))break e;a.length=0,a.mode=7;case 7:if(2048&a.flags){if(0===v)break e;for($=0;z=f[g+$++],a.head&&z&&a.length<65536&&(a.head.name+=String.fromCharCode(z)),z&&$>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=12;break;case 10:for(;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}e.adler=a.check=p(y),_=y=0,a.mode=11;case 11:if(0===a.havedict)return e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=_,2;e.adler=a.check=1,a.mode=12;case 12:if(5===t||6===t)break e;case 13:if(a.last){y>>>=7&_,_-=7&_,a.mode=27;break}for(;_<3;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}switch(a.last=1&y,_-=1,3&(y>>>=1)){case 0:a.mode=14;break;case 1:if(C(a),a.mode=20,6!==t)break;y>>>=2,_-=2;break e;case 2:a.mode=17;break;case 3:e.msg="invalid block type",a.mode=30}y>>>=2,_-=2;break;case 14:for(y>>>=7&_,_-=7&_;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if((65535&y)!=(y>>>16^65535)){e.msg="invalid stored block lengths",a.mode=30;break}if(a.length=65535&y,_=y=0,a.mode=15,6===t)break e;case 15:a.mode=16;case 16:if($=a.length){if(v<$&&($=v),k<$&&($=k),0===$)break e;i.arraySet(m,f,g,$,b),v-=$,g+=$,k-=$,b+=$,a.length-=$;break}a.mode=12;break;case 17:for(;_<14;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(a.nlen=257+(31&y),y>>>=5,_-=5,a.ndist=1+(31&y),y>>>=5,_-=5,a.ncode=4+(15&y),y>>>=4,_-=4,286>>=3,_-=3}for(;a.have<19;)a.lens[N[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,W={bits:a.lenbits},B=o(0,a.lens,0,19,a.lencode,0,a.work,W),a.lenbits=W.bits,B){e.msg="invalid code lengths set",a.mode=30;break}a.have=0,a.mode=19;case 19:for(;a.have>>16&255,E=65535&R,!((x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(E<16)y>>>=x,_-=x,a.lens[a.have++]=E;else{if(16===E){for(P=x+2;_>>=x,_-=x,0===a.have){e.msg="invalid bit length repeat",a.mode=30;break}z=a.lens[a.have-1],$=3+(3&y),y>>>=2,_-=2}else if(17===E){for(P=x+3;_>>=x)),y>>>=3,_-=3}else{for(P=x+7;_>>=x)),y>>>=7,_-=7}if(a.have+$>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=30;break}for(;$--;)a.lens[a.have++]=z}}if(30===a.mode)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=30;break}if(a.lenbits=9,W={bits:a.lenbits},B=o(l,a.lens,0,a.nlen,a.lencode,0,a.work,W),a.lenbits=W.bits,B){e.msg="invalid literal/lengths set",a.mode=30;break}if(a.distbits=6,a.distcode=a.distdyn,W={bits:a.distbits},B=o(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,W),a.distbits=W.bits,B){e.msg="invalid distances set",a.mode=30;break}if(a.mode=20,6===t)break e;case 20:a.mode=21;case 21:if(6<=v&&258<=k){e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=_,r(e,F),b=e.next_out,m=e.output,k=e.avail_out,g=e.next_in,f=e.input,v=e.avail_in,y=a.hold,_=a.bits,12===a.mode&&(a.back=-1);break}for(a.back=0;D=(R=a.lencode[y&(1<>>16&255,E=65535&R,!((x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(D&&0==(240&D)){for(A=x,I=D,U=E;D=(R=a.lencode[U+((y&(1<>A)])>>>16&255,E=65535&R,!(A+(x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}y>>>=A,_-=A,a.back+=A}if(y>>>=x,_-=x,a.back+=x,a.length=E,0===D){a.mode=26;break}if(32&D){a.back=-1,a.mode=12;break}if(64&D){e.msg="invalid literal/length code",a.mode=30;break}a.extra=15&D,a.mode=22;case 22:if(a.extra){for(P=a.extra;_>>=a.extra,_-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=23;case 23:for(;D=(R=a.distcode[y&(1<>>16&255,E=65535&R,!((x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(0==(240&D)){for(A=x,I=D,U=E;D=(R=a.distcode[U+((y&(1<>A)])>>>16&255,E=65535&R,!(A+(x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}y>>>=A,_-=A,a.back+=A}if(y>>>=x,_-=x,a.back+=x,64&D){e.msg="invalid distance code",a.mode=30;break}a.offset=E,a.extra=15&D,a.mode=24;case 24:if(a.extra){for(P=a.extra;_>>=a.extra,_-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=30;break}a.mode=25;case 25:if(0===k)break e;if($=F-k,a.offset>$){if(($=a.offset-$)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=30;break}L=$>a.wnext?($-=a.wnext,a.wsize-$):a.wnext-$,$>a.length&&($=a.length),S=a.window}else S=m,L=b-a.offset,$=a.length;for(k<$&&($=k),k-=$,a.length-=$;m[b++]=S[L++],--$;);0===a.length&&(a.mode=21);break;case 26:if(0===k)break e;m[b++]=a.length,k--,a.mode=21;break;case 27:if(a.wrap){for(;_<32;){if(0===v)break e;v--,y|=f[g++]<<_,_+=8}if(F-=k,e.total_out+=F,a.total+=F,F&&(e.adler=a.check=a.flags?s(a.check,m,F,b-F):n(a.check,m,F,b-F)),F=k,(a.flags?y:p(y))!==a.check){e.msg="incorrect data check",a.mode=30;break}_=y=0}a.mode=28;case 28:if(a.wrap&&a.flags){for(;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(y!==(4294967295&a.total)){e.msg="incorrect length check",a.mode=30;break}_=y=0}a.mode=29;case 29:B=1;break e;case 30:B=-3;break e;case 31:return-4;case 32:default:return h}return e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=_,(a.wsize||F!==e.avail_out&&a.mode<30&&(a.mode<27||4!==t))&&T(e,e.output,e.next_out,F-e.avail_out)?(a.mode=31,-4):(w-=e.avail_in,F-=e.avail_out,e.total_in+=w,e.total_out+=F,a.total+=F,a.wrap&&F&&(e.adler=a.check=a.flags?s(a.check,m,F,e.next_out-F):n(a.check,m,F,e.next_out-F)),e.data_type=a.bits+(a.last?64:0)+(12===a.mode?128:0)+(20===a.mode||15===a.mode?256:0),(0==w&&0===F||4===t)&&B===c&&(B=-5),B)},a.inflateEnd=function(e){if(!e||!e.state)return h;var t=e.state;return t.window&&(t.window=null),e.state=null,c},a.inflateGetHeader=function(e,t){var a;return e&&e.state?0==(2&(a=e.state).wrap)?h:((a.head=t).done=!1,c):h},a.inflateSetDictionary=function(e,t){var a,i=t.length;return e&&e.state?0!==(a=e.state).wrap&&11!==a.mode?h:11===a.mode&&n(1,t,i,0)!==a.check?-3:T(e,t,i,i)?(a.mode=31,-4):(a.havedict=1,c):h},a.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(e,t,a){"use strict";var i=e("../utils/common"),n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],s=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],r=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],o=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,a,l,d,c,h,u){var f,m,p,g,b,v,k,y,_,w=u.bits,F=0,C=0,T=0,$=0,L=0,S=0,x=0,D=0,E=0,A=0,I=null,U=0,z=new i.Buf16(16),B=new i.Buf16(16),W=null,P=0;for(F=0;F<=15;F++)z[F]=0;for(C=0;Cv?(y=W[P+h[C]],I[U+h[C]]):(y=96,0),f=1<>x)+(m-=f)]=k<<24|y<<16|_,0!==m;);for(f=1<>=1;if(0!==f?(A&=f-1,A+=f):A=0,C++,0==--z[F]){if(F===$)break;F=t[a+h[C]]}if(L>>7)]}function W(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1,0<--t;);return a>>>1}function N(e,t,a){var i,n,s=new Array(m+1),r=0;for(i=1;i<=m;i++)s[i]=r=r+a[i-1]<<1;for(n=0;n<=t;n++){var o=e[2*n+1];0!==o&&(e[2*n]=O(s[o]++,o))}}function M(e){var t;for(t=0;t>1;1<=a;a--)j(e,s,a);for(n=l;a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],j(e,s,1),i=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=i,s[2*n]=s[2*a]+s[2*i],e.depth[n]=(e.depth[a]>=e.depth[i]?e.depth[a]:e.depth[i])+1,s[2*a+1]=s[2*i+1]=n,e.heap[1]=n++,j(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,i,n,s,r,o,l=t.dyn_tree,d=t.max_code,c=t.stat_desc.static_tree,h=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,g=t.stat_desc.max_length,b=0;for(s=0;s<=m;s++)e.bl_count[s]=0;for(l[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;a>=7;i>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return n;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t>>3,(o=e.static_len+3+7>>>3)<=r&&(r=o)):r=o=a+5,a+4<=r&&-1!==t?Q(e,t,a,i):4===e.strategy||o===r?(P(e,2+(i?1:0),3),K(e,T,$)):(P(e,4+(i?1:0),3),function(e,t,a,i){var n;for(P(e,t-257,5),P(e,a-1,5),P(e,i-4,4),n=0;n>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*(S[a]+d+1)]++,e.dyn_dtree[2*B(t)]++),e.last_lit===e.lit_bufsize-1},a._tr_align=function(e){P(e,2,3),R(e,b,T),function(e){16===e.bi_valid?(W(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,a){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,i){(function(e){!function(e,t){"use strict";if(!e.setImmediate){var a,i,n,s,r=1,o={},l=!1,d=e.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(e);c=c&&c.setTimeout?c:e,a="[object process]"==={}.toString.call(e.process)?function(e){process.nextTick(function(){u(e)})}:function(){if(e.postMessage&&!e.importScripts){var t=!0,a=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=a,t}}()?(s="setImmediate$"+Math.random()+"$",e.addEventListener?e.addEventListener("message",f,!1):e.attachEvent("onmessage",f),function(t){e.postMessage(s+t,"*")}):e.MessageChannel?((n=new MessageChannel).port1.onmessage=function(e){u(e.data)},function(e){n.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(i=d.documentElement,function(e){var t=d.createElement("script");t.onreadystatechange=function(){u(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):function(e){setTimeout(u,0,e)},c.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),i=0;i\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return n.test(e)?{valid:!1,error:i.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},63003:function(e,t,a){"use strict";a(85331)},70415:function(e,t,a){"use strict";a(85331),a(73565)},72907:function(e,t,a){"use strict";a(85331),a(96808),a(29092)},73565:function(e,t,a){"use strict";a(85331)},79899:function(e,t,a){"use strict";a(85331)},95385:function(e,t,a){"use strict";a(85331)},98642:function(e,t,a){"use strict";a(85331)}}]); -//# sourceMappingURL=770.865557c0.js.map \ No newline at end of file diff --git a/frontend-dist/js/770.865557c0.js.gz b/frontend-dist/js/770.865557c0.js.gz deleted file mode 100644 index c77e890c..00000000 Binary files a/frontend-dist/js/770.865557c0.js.gz and /dev/null differ diff --git a/frontend-dist/js/770.865557c0.js.map b/frontend-dist/js/770.865557c0.js.map deleted file mode 100644 index 85ec91b8..00000000 --- a/frontend-dist/js/770.865557c0.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/770.865557c0.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cb6d","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cba1","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue?99b2","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue?256e","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue?5420","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue?f2e3","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue?ffce","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue?9ca8","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue?e1c6","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue?e3f8","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue?25b5","webpack://sanyue_imghub/./src/utils/fileIdValidator.js","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue?8cda","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue?0dfd","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue?ed70","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue?9d79","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue?6ed7","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue?f89c","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue?8969","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue?1c31","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue?a03e","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue?136f","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue?4854","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue?bd3a","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue?09c8","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue?0ec3","webpack://sanyue_imghub/./src/utils/fileManager.js","webpack://sanyue_imghub/./src/utils/dashboard/rectIntersects.js","webpack://sanyue_imghub/./src/utils/dashboard/useDragSelect.js","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue?40d2","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./node_modules/jszip/dist/jszip.min.js","webpack://sanyue_imghub/./src/utils/pathValidator.js"],"sourcesContent":["import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"move-file-dialog-wrapper\"\n};\nconst _hoisted_2 = {\n class: \"move-dialog-content\"\n};\nconst _hoisted_3 = {\n class: \"move-path-input-container\"\n};\nconst _hoisted_4 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_5 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_6 = {\n class: \"move-drawer-content\"\n};\nconst _hoisted_7 = {\n class: \"move-path-section\"\n};\nconst _hoisted_8 = {\n class: \"move-path-label\"\n};\nconst _hoisted_9 = {\n class: \"move-path-input-row\"\n};\nconst _hoisted_10 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"embedded-tree-section\"\n};\nconst _hoisted_12 = {\n class: \"tree-section-header\"\n};\nconst _hoisted_13 = {\n class: \"tree-section-title\"\n};\nconst _hoisted_14 = {\n class: \"tree-container\"\n};\nconst _hoisted_15 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_16 = {\n class: \"error-text\"\n};\nconst _hoisted_17 = {\n class: \"node-label\"\n};\nconst _hoisted_18 = {\n class: \"drawer-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_dialog, {\n key: 0,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n width: \"500px\",\n \"show-close\": true,\n class: \"move-dialog\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_5, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, {\n prepend: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_DirectoryTreePicker, {\n \"current-directory\": $props.currentDirectory,\n source: \"admin\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-picker-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])]), _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t('moveFile.hint')), 1)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"])) : (_openBlock(), _createBlock(_component_el_drawer, {\n key: 1,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n direction: \"btt\",\n size: \"auto\",\n \"show-close\": true,\n class: \"move-drawer\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n onClick: $options.handleClose,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n class: \"directory-picker-trigger\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showTreePicker = true)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]), _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t('moveFile.hintMobile')), 1)]), $data.showTreePicker ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('moveFile.selectDirectory')), 1), _createVNode(_component_el_button, {\n text: \"\",\n onClick: _cache[4] || (_cache[4] = $event => $data.showTreePicker = false)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })]), _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_14, [$data.treeError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_16, _toDisplayString($data.treeError), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleTreeNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_17, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.treeLoading]])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"]))]);\n}","import DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'MoveFileDialog',\n components: {\n DirectoryTreePicker\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentDirectory: {\n type: String,\n default: ''\n },\n isBatchMove: {\n type: Boolean,\n default: false\n },\n initialPath: {\n type: String,\n default: '/'\n }\n },\n emits: ['update:modelValue', 'confirm', 'close'],\n data() {\n return {\n targetPath: '/',\n loading: false,\n windowWidth: window.innerWidth,\n // 移动端内嵌树相关\n showTreePicker: false,\n treeData: [],\n treeLoading: false,\n treeError: '',\n treeProps: {\n children: 'children',\n label: 'name'\n }\n };\n },\n computed: {\n dialogVisible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n isDesktop() {\n return this.windowWidth > 768;\n }\n },\n watch: {\n modelValue(newVal) {\n if (newVal) {\n this.targetPath = this.initialPath || '/';\n this.showTreePicker = false;\n }\n },\n showTreePicker(newVal) {\n if (newVal && !this.isDesktop) {\n this.fetchDirectoryTree();\n }\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n handleDirectorySelect(path) {\n this.targetPath = path;\n },\n handleConfirm() {\n this.$emit('confirm', this.targetPath);\n },\n handleClose() {\n this.$emit('update:modelValue', false);\n this.$emit('close');\n },\n // 移动端内嵌树相关方法\n async fetchDirectoryTree() {\n this.treeLoading = true;\n this.treeError = '';\n try {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.treeError = this.$t('moveFile.authFailed');\n } else {\n this.treeError = this.$t('moveFile.serverError');\n }\n return;\n }\n const data = await response.json();\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n this.treeError = this.$t('moveFile.loadTreeFailed');\n } finally {\n this.treeLoading = false;\n }\n },\n handleTreeNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.targetPath = path;\n this.showTreePicker = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MoveFileDialog.vue?vue&type=template&id=7aaa437c&scoped=true\"\nimport script from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\nexport * from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\n\nimport \"./MoveFileDialog.vue?vue&type=style&index=0&id=7aaa437c&scoped=true&lang=css\"\nimport \"./MoveFileDialog.vue?vue&type=style&index=1&id=7aaa437c&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7aaa437c\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"mobile-drawer-header\"\n};\nconst _hoisted_2 = {\n class: \"mobile-drawer-title\"\n};\nconst _hoisted_3 = {\n class: \"mobile-drawer-content\"\n};\nconst _hoisted_4 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"drawer-slide\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-overlay\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"mobile-drawer\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t('mobileDirectory.title')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"mobile-drawer-close\",\n onClick: $options.close\n }, null, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: !$props.currentPath\n }]),\n onClick: _cache[0] || (_cache[0] = $event => $options.navigate(''))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.rootDirectory')), 1)], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.pathParts, (folder, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: index === $options.pathParts.length - 1\n }]),\n style: _normalizeStyle({\n paddingLeft: (index + 1) * 16 + 16 + 'px'\n }),\n onClick: $event => $options.navigate($options.pathParts.slice(0, index + 1).join('/'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(folder), 1)], 14, _hoisted_4);\n }), 128)), $props.currentPath ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-back\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.goBack && $options.goBack(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.goBack')), 1)])) : _createCommentVNode(\"\", true)])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'MobileDirectoryDrawer',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentPath: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'navigate', 'goBack'],\n computed: {\n pathParts() {\n return this.currentPath.split('/').filter(Boolean);\n }\n },\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n navigate(path) {\n this.$emit('navigate', path);\n this.close();\n },\n goBack() {\n this.$emit('goBack');\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileDirectoryDrawer.vue?vue&type=template&id=768efd1f&scoped=true\"\nimport script from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\nexport * from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\n\nimport \"./MobileDirectoryDrawer.vue?vue&type=style&index=0&id=768efd1f&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-768efd1f\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"bottom-sheet-header\"\n};\nconst _hoisted_2 = {\n class: \"bottom-sheet-title\"\n};\nconst _hoisted_3 = {\n class: \"bottom-sheet-content\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"bottom-sheet\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"bottom-sheet-overlay\",\n onClick: _cache[9] || (_cache[9] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet\",\n onClick: _cache[8] || (_cache[8] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_cache[10] || (_cache[10] = _createElementVNode(\"div\", {\n class: \"bottom-sheet-handle\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.title), 1)]), _createElementVNode(\"div\", _hoisted_3, [!$props.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[0] || (_cache[0] = $event => $options.handleAction('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.viewDetail')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[1] || (_cache[1] = $event => $options.handleAction('copy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleAction('download'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.downloadFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleAction('tag'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.tagManagement')), 1)])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[5] || (_cache[5] = $event => $options.handleAction('folderCopy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[6] || (_cache[6] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFolder')), 1)])], 64)), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item bottom-sheet-danger\",\n onClick: _cache[7] || (_cache[7] = $event => $options.handleAction('delete'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString($props.isFolder ? _ctx.$t('mobileAction.deleteFolder') : _ctx.$t('mobileAction.deleteFile')), 1)])])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","export default {\n name: 'MobileActionSheet',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n title: {\n type: String,\n default: ''\n },\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:modelValue', 'action'],\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n handleAction(action) {\n this.$emit('action', action);\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileActionSheet.vue?vue&type=template&id=62bb601c&scoped=true\"\nimport script from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\nexport * from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\n\nimport \"./MobileActionSheet.vue?vue&type=style&index=0&id=62bb601c&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-62bb601c\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"batch-tag-container\"\n};\nconst _hoisted_2 = {\n class: \"tab-content\"\n};\nconst _hoisted_3 = {\n class: \"tab-description\"\n};\nconst _hoisted_4 = {\n class: \"input-section\"\n};\nconst _hoisted_5 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_6 = [\"onClick\"];\nconst _hoisted_7 = {\n class: \"tags-to-add-section\"\n};\nconst _hoisted_8 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_9 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_10 = {\n class: \"action-buttons\"\n};\nconst _hoisted_11 = {\n class: \"tab-content\"\n};\nconst _hoisted_12 = {\n class: \"tab-description\"\n};\nconst _hoisted_13 = {\n key: 0,\n class: \"common-tags-section\"\n};\nconst _hoisted_14 = {\n class: \"tags-container\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_16 = {\n class: \"tab-content\"\n};\nconst _hoisted_17 = {\n class: \"tab-description\"\n};\nconst _hoisted_18 = {\n class: \"action-buttons\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_alert = _resolveComponent(\"el-alert\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('batchTag.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.activeTab = $event),\n type: \"border-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.addTab'),\n name: \"add\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t('batchTag.addDescription', {\n count: $options.fileCount\n })), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('batchTag.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddInputTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddInputTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_6);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.pendingTags')), 1), $data.tagsToAdd.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.tagsToAdd, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.removeFromToAdd(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('batchTag.noPendingTags')), 1))]), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.executeAddTags,\n loading: $data.loading,\n disabled: $data.tagsToAdd.length === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.addToAllFiles')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\", \"disabled\"])])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.removeTab'),\n name: \"remove\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.$t('batchTag.removeDescription')), 1), $data.commonTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.commonTags')), 1), _createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.commonTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveCommonTag(tag),\n class: \"tag-item\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('batchTag.noCommonTags')), 1))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.clearTab'),\n name: \"clear\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"p\", _hoisted_17, _toDisplayString(_ctx.$t('batchTag.clearDescription', {\n count: $options.fileCount\n })), 1), _createVNode(_component_el_alert, {\n title: _ctx.$t('batchTag.clearWarningTitle'),\n type: \"warning\",\n description: _ctx.$t('batchTag.clearWarningDesc'),\n closable: false,\n style: {\n \"margin-bottom\": \"20px\"\n },\n center: \"\"\n }, null, 8, [\"title\", \"description\"]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n type: \"danger\",\n onClick: $options.handleClearAllTags,\n loading: $data.loading\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.confirmClearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport { ElMessage, ElMessageBox } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'BatchTagDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n selectedFiles: {\n type: Array,\n required: true,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n activeTab: 'add',\n inputTag: '',\n tagsToAdd: [],\n commonTags: [],\n suggestions: [],\n showSuggestions: false,\n loading: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '600px';\n },\n selectedFilesOnly() {\n // 排除文件夹,只保留文件\n return this.selectedFiles.filter(file => !file.isFolder);\n },\n fileCount() {\n return this.selectedFilesOnly.length;\n },\n fileIds() {\n return this.selectedFilesOnly.map(file => file.name);\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadCommonTags();\n } else {\n this.resetData();\n }\n },\n activeTab(newTab) {\n if (newTab === 'remove') {\n this.loadCommonTags();\n }\n }\n },\n methods: {\n resetData() {\n this.tagsToAdd = [];\n this.inputTag = '';\n this.showSuggestions = false;\n this.activeTab = 'add';\n },\n async loadCommonTags() {\n if (this.selectedFilesOnly.length === 0) {\n this.commonTags = [];\n return;\n }\n try {\n // 获取所有文件的标签\n const tagPromises = this.selectedFilesOnly.map(file => fetchWithAuth(`/api/manage/tags/${encodeURIComponent(file.name)}`, {\n method: 'GET'\n }));\n const responses = await Promise.all(tagPromises);\n const allTags = [];\n for (const response of responses) {\n if (response.ok) {\n const data = await response.json();\n allTags.push(data.tags || []);\n }\n }\n\n // 找出共有标签\n if (allTags.length > 0) {\n this.commonTags = allTags[0].filter(tag => allTags.every(tags => tags.includes(tag)));\n } else {\n this.commonTags = [];\n }\n } catch (error) {\n console.error('Error loading common tags:', error);\n ElMessage.error(this.$t('batchTag.loadCommonTagsFailed'));\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.tagsToAdd.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddInputTag();\n },\n handleAddInputTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.tagsToAdd.includes(tag)) {\n ElMessage.warning(this.$t('batchTag.tagAlreadyInList'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n this.tagsToAdd.push(tag);\n this.inputTag = '';\n this.showSuggestions = false;\n },\n removeFromToAdd(tag) {\n const index = this.tagsToAdd.indexOf(tag);\n if (index > -1) {\n this.tagsToAdd.splice(index, 1);\n }\n },\n async executeAddTags() {\n if (this.tagsToAdd.length === 0) {\n ElMessage.warning(this.$t('batchTag.pleaseAddTags'));\n return;\n }\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'add',\n tags: this.tagsToAdd\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.addSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.tagsToAdd = [];\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tags:', error);\n ElMessage.error(this.$t('batchTag.addFailed'));\n } finally {\n this.loading = false;\n }\n },\n async handleRemoveCommonTag(tag) {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.removeSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n await this.loadCommonTags();\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('batchTag.removeFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClearAllTags() {\n ElMessageBox.confirm(this.$t('batchTag.clearConfirmMessage', {\n count: this.fileCount\n }), this.$t('batchTag.clearConfirmTitle'), {\n confirmButtonText: this.$t('batchTag.clearConfirmOk'),\n cancelButtonText: this.$t('batchTag.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.executeClearTags();\n }).catch(() => {\n ElMessage.info(this.$t('batchTag.clearCancelled'));\n });\n },\n async executeClearTags() {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'set',\n tags: []\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.clearSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.commonTags = [];\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } catch (error) {\n console.error('Error clearing tags:', error);\n ElMessage.error(this.$t('batchTag.clearFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClose() {\n this.visible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchTagDialog.vue?vue&type=template&id=ec3adcfc&scoped=true\"\nimport script from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\nexport * from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\n\nimport \"./BatchTagDialog.vue?vue&type=style&index=0&id=ec3adcfc&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-ec3adcfc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"tag-management-container\"\n};\nconst _hoisted_2 = {\n class: \"input-section\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_4 = [\"onClick\"];\nconst _hoisted_5 = {\n class: \"current-tags-section\"\n};\nconst _hoisted_6 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_8 = {\n class: \"popular-tags-section\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_10 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_11 = {\n key: 2,\n class: \"empty-message\"\n};\nconst _hoisted_12 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_Loading = _resolveComponent(\"Loading\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('tagManagement.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_12, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('tagManagement.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('tagManagement.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_4);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.currentTags')), 1), $data.currentTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveTag(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('tagManagement.noTags')), 1))]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.popularTags')), 1), $data.popularTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.popularTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n onClick: $event => $options.handleAddPopularTag(tag),\n class: \"tag-item clickable\",\n type: \"info\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))])) : $data.loadingPopularTags ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [_createVNode(_component_el_icon, {\n class: \"is-loading\"\n }, {\n default: _withCtx(() => [_createVNode(_component_Loading)]),\n _: 1\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('tagManagement.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString(_ctx.$t('tagManagement.noPopularTags')), 1))])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport { ElMessage } from 'element-plus';\nimport { Loading } from '@element-plus/icons-vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'TagManagementDialog',\n components: {\n Loading\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n fileId: {\n type: String,\n required: true\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n currentTags: [],\n inputTag: '',\n suggestions: [],\n popularTags: [],\n showSuggestions: false,\n loading: false,\n loadingPopularTags: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '500px';\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadFileTags();\n this.loadPopularTags();\n }\n }\n },\n methods: {\n async loadFileTags() {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n } else {\n throw new Error('Failed to load tags');\n }\n } catch (error) {\n console.error('Error loading file tags:', error);\n ElMessage.error(this.$t('tagManagement.loadFailed'));\n }\n },\n async loadPopularTags() {\n this.loadingPopularTags = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/autocomplete?limit=20', {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.popularTags = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n }\n } catch (error) {\n console.error('Error loading popular tags:', error);\n } finally {\n this.loadingPopularTags = false;\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddTag();\n },\n async handleAddTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.currentTags.includes(tag)) {\n ElMessage.warning(this.$t('tagManagement.tagExists'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'add',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n this.inputTag = '';\n this.showSuggestions = false;\n ElMessage.success(this.$t('tagManagement.addSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n const error = await response.json();\n throw new Error(error.message || this.$t('tagManagement.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tag:', error);\n ElMessage.error(error.message || this.$t('tagManagement.addFailed'));\n }\n },\n async handleRemoveTag(tag) {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n ElMessage.success(this.$t('tagManagement.removeSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n throw new Error(this.$t('tagManagement.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('tagManagement.removeFailed'));\n }\n },\n handleAddPopularTag(tag) {\n this.inputTag = tag;\n this.handleAddTag();\n },\n handleClose() {\n this.visible = false;\n this.inputTag = '';\n this.showSuggestions = false;\n this.currentTags = [];\n this.popularTags = [];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./TagManagementDialog.vue?vue&type=template&id=689f94e2&scoped=true\"\nimport script from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\nexport * from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\n\nimport \"./TagManagementDialog.vue?vue&type=style&index=0&id=689f94e2&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-689f94e2\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers } from \"vue\";\nconst _hoisted_1 = {\n class: \"detail-actions\"\n};\nconst _hoisted_2 = {\n class: \"preview-section\"\n};\nconst _hoisted_3 = {\n class: \"preview-content\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 1\n};\nconst _hoisted_7 = {\n key: 1\n};\nconst _hoisted_8 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"gap\": \"6px\"\n }\n};\nconst _hoisted_9 = {\n key: 1,\n style: {\n \"color\": \"#909399\"\n }\n};\nconst _hoisted_10 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"flex-wrap\": \"wrap\",\n \"gap\": \"5px\"\n }\n};\nconst _hoisted_11 = {\n key: 1,\n style: {\n \"color\": \"#909399\"\n }\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('fileDetail.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $options.visible = $event),\n width: $options.dialogWidth\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [!$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('download')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.download')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 1,\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => _ctx.$emit('tagManagement')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.tags')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 2,\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('block')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ban\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.blacklist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 3,\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = $event => _ctx.$emit('white')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"shield-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.whitelist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 4,\n type: \"danger\",\n onClick: _cache[4] || (_cache[4] = $event => _ctx.$emit('delete')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.deleteBtn')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 5,\n type: \"warning\",\n onClick: _cache[5] || (_cache[5] = $event => $options.startEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.edit')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 6,\n type: \"info\",\n onClick: _cache[6] || (_cache[6] = $event => $options.openRenameDialog()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"i-cursor\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.rename')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 7,\n type: \"success\",\n onClick: _cache[7] || (_cache[7] = $event => $options.saveMetadata()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\",\n loading: $data.editSaving\n }, {\n default: _withCtx(() => [!$data.editSaving ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"save\",\n style: {\n \"margin-right\": \"3px\"\n }\n })) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.save')), 1)]),\n _: 1\n }, 8, [\"loading\"])) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 8,\n onClick: _cache[8] || (_cache[8] = $event => $options.cancelEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.cancel')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.activeTab = $event),\n onTabClick: $options.handleTabClick,\n style: {\n \"margin-bottom\": \"10px\"\n }\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('fileDetail.originUrl'),\n name: \"originUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.originUrl,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $props.urls.originUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: \"Markdown\",\n name: \"mdUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.mdUrl,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $props.urls.mdUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"HTML\",\n name: \"htmlUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.htmlUrl,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $props.urls.htmlUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"BBCode\",\n name: \"bbUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.bbUrl,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $props.urls.bbUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), $props.file?.metadata?.TgFileId ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 0,\n label: \"TG File ID\",\n name: \"tgId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.tgId,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $props.urls.tgId = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3Location ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 1,\n label: \"S3 Location\",\n name: \"s3Location\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3Location,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $props.urls.S3Location = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3CdnFileUrl ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 2,\n label: \"S3 CDN URL\",\n name: \"s3CdnFileUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3CdnFileUrl,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $props.urls.S3CdnFileUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"modelValue\", \"onTabClick\"]), _createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [$options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 0,\n src: $props.fileLink,\n autoplay: \"\",\n muted: \"\",\n loop: \"\",\n class: \"video-preview\",\n onClick: _cache[17] || (_cache[17] = (...args) => $options.openImageLink && $options.openImageLink(...args))\n }, null, 8, _hoisted_4)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"audio\", {\n key: 1,\n src: $props.fileLink,\n controls: \"\",\n autoplay: \"\",\n class: \"audio-preview\"\n }, null, 8, _hoisted_5)) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n src: $props.fileLink,\n \"preview-src-list\": [$props.fileLink],\n \"preview-teleported\": true,\n fit: \"contain\",\n lazy: \"\",\n class: \"image-preview\"\n }, null, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"file-icon-detail\"\n }))])]), _createVNode(_component_el_descriptions, {\n border: \"\",\n column: $options.descColumn\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileNameLabel')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileName,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.editForm.FileName = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString($props.file?.metadata?.FileName || $props.file?.name), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileType')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileType,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.editForm.FileType = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileTypePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString($props.file?.metadata?.FileType || _ctx.$t('fileDetail.unknown')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileSizeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.fileSizeDisplay), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.imageDimensions')\n }, {\n default: _withCtx(() => [$options.imageDimensions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Width) + \" × \" + _toDisplayString($props.file?.metadata?.Height), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"display\": \"inline-flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.orientationIcon), 1)]),\n _: 1\n })])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('fileDetail.noDimensions')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadTimeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.uploadTime), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.channelTypeAndName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.Channel || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.ChannelName || '-'), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.accessStatusAndReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: $options.accessTagType,\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.accessType), 1)]),\n _: 1\n }, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Label || _ctx.$t('fileDetail.noTags')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadIP')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadIP || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadAddressLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadAddress || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileTags')\n }, {\n default: _withCtx(() => [$props.file?.metadata?.Tags && $props.file?.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.file?.metadata?.Tags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1024);\n }), 128))])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('fileDetail.noTags')), 1))]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"column\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showRenameDialog,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.showRenameDialog = $event),\n title: _ctx.$t('fileDetail.renameTitle'),\n width: $options.dialogWidth,\n \"append-to-body\": \"\"\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[21] || (_cache[21] = $event => $options.closeRenameDialog())\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameCancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[22] || (_cache[22] = $event => $options.submitRename()),\n loading: $data.renameSaving,\n disabled: !$data.renameValidation.valid\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameConfirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n onSubmit: _withModifiers($options.submitRename, [\"prevent\"])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('fileDetail.renameLabel'),\n error: $data.renameValidation.error\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.renameForm.newFileId,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.renameForm.newFileId = $event),\n placeholder: _ctx.$t('fileDetail.renamePlaceholder'),\n onInput: $options.validateRenameInput,\n clearable: \"\"\n }, null, 8, [\"modelValue\", \"placeholder\", \"onInput\"])]),\n _: 1\n }, 8, [\"label\", \"error\"])]),\n _: 1\n }, 8, [\"onSubmit\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","/**\r\n * File_ID 验证器模块\r\n * 提供 File_ID 格式验证功能,用于重命名操作的前端校验\r\n * 非法字符规则复用 pathValidator 的字符集\r\n */\r\n\r\n/**\r\n * 非法字符正则表达式\r\n * 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n * 与 pathValidator.js 保持一致\r\n */\r\nconst INVALID_CHARS = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n\r\n/**\r\n * 验证 File_ID 格式\r\n * @param {string} newFileId - 新的 File_ID\r\n * @param {string} currentFileId - 当前 File_ID\r\n * @returns {{ valid: boolean, error?: string }}\r\n */\r\nexport function validateFileId(newFileId, currentFileId) {\r\n // 1. 空值/纯空白检测\r\n if (!newFileId || newFileId.trim() === '') {\r\n return {\r\n valid: false,\r\n error: '文件名不能为空'\r\n };\r\n }\r\n\r\n // 2. 与当前 File_ID 相同检测\r\n if (newFileId === currentFileId) {\r\n return {\r\n valid: false,\r\n error: '文件名未发生变化'\r\n };\r\n }\r\n\r\n // 3. 路径穿越检测\r\n if (newFileId.includes('..')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含路径穿越字符 \"..\"'\r\n };\r\n }\r\n\r\n // 3.5 单独的 . 路径段检测(仅检查 /./ 或开头 ./,不检查末尾以允许继续输入如 .123)\r\n if (/\\/\\.\\//.test(newFileId) || /^\\.\\//.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含单独的 \".\" 路径段'\r\n };\r\n }\r\n\r\n // 4. 非法字符检测(复用 pathValidator 的字符规则)\r\n if (INVALID_CHARS.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名包含非法字符,请使用合法的文件名格式'\r\n };\r\n }\r\n\r\n // 5. 连续斜杠检测\r\n if (newFileId.includes('//')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含连续的斜杠'\r\n };\r\n }\r\n\r\n return { valid: true };\r\n}\r\n","import \"core-js/modules/es.json.stringify.js\";\nimport { ElMessage } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFileId } from '@/utils/fileIdValidator';\nexport default {\n name: 'FileDetailDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n file: {\n type: Object,\n default: null\n },\n fileLink: {\n type: String,\n default: ''\n },\n urls: {\n type: Object,\n default: () => ({\n originUrl: '',\n mdUrl: '',\n htmlUrl: '',\n bbUrl: '',\n tgId: '',\n S3Location: '',\n S3CdnFileUrl: ''\n })\n }\n },\n emits: ['update:modelValue', 'download', 'tagManagement', 'block', 'white', 'delete', 'metadataUpdated', 'fileRenamed'],\n watch: {\n visible(val) {\n if (!val) {\n // 关闭弹窗时退出编辑状态\n this.isEditing = false;\n this.editSaving = false;\n }\n }\n },\n data() {\n return {\n activeTab: 'originUrl',\n isEditing: false,\n editForm: {\n FileName: '',\n FileType: ''\n },\n editSaving: false,\n showRenameDialog: false,\n renameForm: {\n newFileId: ''\n },\n renameValidation: {\n valid: true,\n error: ''\n },\n renameSaving: false\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '95%' : '900px';\n },\n descColumn() {\n return window.innerWidth < 768 ? 1 : 2;\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n uploadTime() {\n if (this.file?.metadata?.TimeStamp) {\n return new Date(this.file.metadata.TimeStamp).toLocaleString();\n }\n return this.$t('fileDetail.unknown');\n },\n accessType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return this.$t('fileDetail.accessNormalWhitelist');\n if (listType === 'Block') return this.$t('fileDetail.accessBlockedBlacklist');\n if (label === 'adult') return this.$t('fileDetail.accessBlockedReview');\n return this.$t('fileDetail.accessNormal');\n },\n accessTagType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return 'success';\n if (listType === 'Block') return 'danger';\n if (label === 'adult') return 'danger';\n return 'success';\n },\n imageDimensions() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (width && height) return true;\n return null;\n },\n orientationIcon() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (!width || !height) return '';\n const ratio = width / height;\n if (ratio > 1.1) return this.$t('fileDetail.orientationLandscape');\n if (ratio < 0.9) return this.$t('fileDetail.orientationPortrait');\n return this.$t('fileDetail.orientationSquare');\n },\n fileSizeDisplay() {\n const sizeBytes = this.file?.metadata?.FileSizeBytes;\n const sizeMB = this.file?.metadata?.FileSize;\n if (sizeBytes) {\n // 根据大小选择合适的单位\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(2)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return this.$t('fileDetail.unknown');\n }\n },\n methods: {\n handleVideoClick(e) {\n const video = e.target;\n if (video.paused) video.play();else video.pause();\n },\n handleTabClick() {},\n handleUrlClick(e) {\n const input = e.target;\n input.select();\n navigator.clipboard.writeText(input.value).then(() => {\n ElMessage.success(this.$t('fileDetail.linkCopied'));\n });\n },\n openImageLink() {\n if (this.fileLink) {\n window.open(this.fileLink, '_blank');\n }\n },\n startEdit() {\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.isEditing = true;\n },\n cancelEdit() {\n this.isEditing = false;\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.editSaving = false;\n },\n async saveMetadata() {\n this.editSaving = true;\n try {\n const fileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/metadata/${fileId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n FileName: this.editForm.FileName,\n FileType: this.editForm.FileType\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.metadataSaved'));\n this.isEditing = false;\n this.$emit('metadataUpdated', fileId, data.metadata);\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n }\n } catch (error) {\n console.error('Error saving metadata:', error);\n ElMessage.error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n } finally {\n this.editSaving = false;\n }\n },\n openRenameDialog() {\n this.renameForm.newFileId = this.file?.name || '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n this.showRenameDialog = true;\n },\n closeRenameDialog() {\n this.showRenameDialog = false;\n this.renameForm.newFileId = '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n },\n validateRenameInput() {\n const result = validateFileId(this.renameForm.newFileId, this.file?.name || '');\n this.renameValidation = {\n valid: result.valid,\n error: result.error || ''\n };\n },\n async submitRename() {\n if (this.renameSaving) return;\n\n // Validate input first\n this.validateRenameInput();\n if (!this.renameValidation.valid) {\n return;\n }\n this.renameSaving = true;\n try {\n const oldFileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/rename/${oldFileId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n newFileId: this.renameForm.newFileId\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.renameSuccess'));\n this.showRenameDialog = false;\n this.$emit('fileRenamed', oldFileId, this.renameForm.newFileId, data.metadata);\n } else if (response.status === 409) {\n // Conflict — target File_ID already exists\n this.renameValidation = {\n valid: false,\n error: this.$t('fileDetail.renameConflict')\n };\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.renameFailed'));\n }\n } catch (error) {\n console.error('Error renaming file:', error);\n ElMessage.error(error.message || this.$t('fileDetail.renameFailed'));\n } finally {\n this.renameSaving = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileDetailDialog.vue?vue&type=template&id=3f80812c&scoped=true\"\nimport script from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\nexport * from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\n\nimport \"./FileDetailDialog.vue?vue&type=style&index=0&id=3f80812c&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-3f80812c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"batch-floating-bar\"\n};\nconst _hoisted_2 = {\n class: \"batch-selection-summary\"\n};\nconst _hoisted_3 = {\n class: \"batch-selection-count\"\n};\nconst _hoisted_4 = {\n class: \"batch-floating-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"batch-toolbar\"\n }, {\n default: _withCtx(() => [$props.selectedCount > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.clearSelection'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"batch-floating-btn ghost\",\n \"aria-label\": _ctx.$t('dashboard.clearSelection'),\n onClick: $options.handleClear\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"batch-floating-icon\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: `${$props.selectedCount} ${_ctx.$t('dashboard.selectedItems')}`,\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.selectedCount), 1)])]),\n _: 1\n }, 8, [\"content\"]), _cache[0] || (_cache[0] = _createElementVNode(\"span\", {\n class: \"batch-toolbar-divider\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_4, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.actions, action => {\n return _openBlock(), _createBlock(_component_el_tooltip, {\n key: action.command,\n content: _ctx.$t(action.label),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"batch-floating-btn\", action.className]),\n \"aria-label\": _ctx.$t(action.label),\n onClick: $event => $options.handleAction(action.command)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: action.icon,\n class: \"batch-floating-icon\"\n }, null, 8, [\"icon\"])]),\n _: 2\n }, 1032, [\"class\", \"aria-label\", \"onClick\"])]),\n _: 2\n }, 1032, [\"content\"]);\n }), 128))])])) : _createCommentVNode(\"\", true)]),\n _: 1\n });\n}","export default {\n name: 'BatchActionBar',\n props: {\n selectedCount: {\n type: Number,\n required: true\n }\n },\n emits: ['action', 'clear'],\n data() {\n return {\n actions: [{\n command: 'copy',\n label: 'dashboard.copy',\n icon: 'copy',\n className: 'copy'\n }, {\n command: 'download',\n label: 'dashboard.download',\n icon: 'download',\n className: 'download'\n }, {\n command: 'move',\n label: 'dashboard.move',\n icon: 'file-export',\n className: 'move'\n }, {\n command: 'tagManagement',\n label: 'dashboard.tagManagement',\n icon: 'tags',\n className: 'tag'\n }, {\n command: 'ban',\n label: 'dashboard.addToBlacklist',\n icon: 'ban',\n className: 'ban'\n }, {\n command: 'white',\n label: 'dashboard.addToWhitelist',\n icon: 'shield-alt',\n className: 'white'\n }, {\n command: 'delete',\n label: 'dashboard.delete',\n icon: 'trash-alt',\n className: 'danger'\n }]\n };\n },\n methods: {\n handleAction(command) {\n this.$emit('action', command);\n },\n handleClear() {\n this.$emit('clear');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchActionBar.vue?vue&type=template&id=7445695a&scoped=true\"\nimport script from \"./BatchActionBar.vue?vue&type=script&lang=js\"\nexport * from \"./BatchActionBar.vue?vue&type=script&lang=js\"\n\nimport \"./BatchActionBar.vue?vue&type=style&index=0&id=7445695a&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-7445695a\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createVNode as _createVNode, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_2 = [\"src\"];\nconst _hoisted_3 = [\"src\"];\nconst _hoisted_4 = [\"title\"];\nconst _hoisted_5 = {\n class: \"filename-start\"\n};\nconst _hoisted_6 = {\n class: \"filename-end\"\n};\nconst _hoisted_7 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_8 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_9 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_10 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"channel-name-box\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_13 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_14 = {\n key: 0,\n class: \"address-box\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_16 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_17 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_18 = {\n class: \"list-col list-col-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: \"list-item\",\n onTouchstart: _cache[9] || (_cache[9] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[10] || (_cache[10] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[11] || (_cache[11] = $event => _ctx.$emit('touchmove', $event))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-checkbox\", {\n 'checked': $data.localSelected\n }]),\n onClick: _cache[0] || (_cache[0] = _withModifiers((...args) => $options.toggleSelect && $options.toggleSelect(...args), [\"stop\"]))\n }, [$data.localSelected ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"check-icon\"\n })) : _createCommentVNode(\"\", true)], 2)]), _createElementVNode(\"div\", {\n class: \"list-col list-col-preview\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [$options.isFolder ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"list-folder-icon\"\n })) : $options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: $props.fileLink,\n class: \"list-preview-img\",\n muted: \"\",\n preload: \"metadata\"\n }, null, 8, _hoisted_2)) : $options.isImage ? (_openBlock(), _createElementBlock(\"img\", {\n key: 2,\n src: $props.fileLink,\n class: \"list-preview-img\",\n loading: \"lazy\",\n decoding: \"async\"\n }, null, 8, _hoisted_3)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"list-file-icon\"\n }))]), _createElementVNode(\"div\", {\n class: \"list-col list-col-name\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [_createElementVNode(\"span\", {\n class: \"filename-ellipsis\",\n title: $options.displayName\n }, [_createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.fileNameStart), 1), _createElementVNode(\"span\", _hoisted_6, _toDisplayString($options.fileNameEnd), 1)], 8, _hoisted_4)]), _createElementVNode(\"div\", _hoisted_7, [!$options.isFolder && $props.item.metadata?.Tags && $props.item.metadata.Tags.length > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.item.metadata.Tags.slice(0, 3), (tag, tagIndex) => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: tagIndex,\n class: \"color-tag\",\n style: _normalizeStyle({\n background: $options.getTagColor(tagIndex)\n })\n }, _toDisplayString(tag), 5);\n }), 128)), $props.item.metadata.Tags.length > 3 ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: \"color-tag color-tag-more\",\n style: _normalizeStyle({\n background: $options.getTagColor(3)\n })\n }, \"+\" + _toDisplayString($props.item.metadata.Tags.length - 3), 5)) : _createCommentVNode(\"\", true)], 64)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_8, \"-\"))]), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.isFolder ? '-' : $props.item.metadata?.Channel || $props.item.channelTag || '-'), 1), _createElementVNode(\"div\", _hoisted_10, [!$options.isFolder && $props.item.metadata?.ChannelName ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString($props.item.metadata.ChannelName), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))]), _createElementVNode(\"div\", _hoisted_13, [!$options.isFolder && $props.item.metadata?.UploadIP ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, _toDisplayString($props.item.metadata.UploadIP), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_15, \"-\"))]), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.isFolder ? '-' : $options.fileSizeDisplay), 1), _createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.uploadDate), 1), _createElementVNode(\"div\", _hoisted_18, [!$options.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[3] || (_cache[3] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[6] || (_cache[6] = _withModifiers($event => _ctx.$emit('folderCopy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[7] || (_cache[7] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn list-action-danger\",\n onClick: _cache[8] || (_cache[8] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"content\"])])], 32);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FileListItem',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n default: ''\n }\n },\n emits: ['update:selected', 'enter', 'detail', 'copy', 'folderCopy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n tagColors: ['#f472b6', '#a78bfa', '#60a5fa', '#34d399']\n };\n },\n computed: {\n isFolder() {\n // 检查 isFolder 属性或名称以 / 结尾\n return this.item.isFolder || this.item.name?.endsWith('/');\n },\n isVideo() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isImage() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp');\n },\n displayName() {\n if (this.isFolder) {\n const parts = this.item.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.item.name;\n }\n return this.item.metadata?.FileName || this.getFileName(this.item.name);\n },\n fileNameStart() {\n const name = this.displayName;\n if (name.length <= 20) return name;\n return name.slice(0, -8);\n },\n fileNameEnd() {\n const name = this.displayName;\n if (name.length <= 20) return '';\n return name.slice(-8);\n },\n uploadDate() {\n if (this.item.uploaded) {\n return new Date(this.item.uploaded).toLocaleDateString();\n }\n if (this.item.metadata?.TimeStamp) {\n return new Date(this.item.metadata.TimeStamp).toLocaleDateString();\n }\n return '-';\n },\n fileSizeDisplay() {\n const sizeBytes = this.item.metadata?.FileSizeBytes;\n const sizeMB = this.item.metadata?.FileSize;\n if (sizeBytes) {\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(1)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return '-';\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n },\n methods: {\n toggleSelect() {\n this.localSelected = !this.localSelected;\n this.$emit('update:selected', this.localSelected);\n },\n handlePreviewClick() {\n if (this.isFolder) {\n this.$emit('enter');\n } else {\n this.$emit('detail');\n }\n },\n getFileName(name) {\n const parts = (name || '').split('/');\n return parts[parts.length - 1];\n },\n getTagColor(index) {\n return this.tagColors[index % this.tagColors.length];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileListItem.vue?vue&type=template&id=78d34f50&scoped=true\"\nimport script from \"./FileListItem.vue?vue&type=script&lang=js\"\nexport * from \"./FileListItem.vue?vue&type=script&lang=js\"\n\nimport \"./FileListItem.vue?vue&type=style&index=0&id=78d34f50&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-78d34f50\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment, withModifiers as _withModifiers, withCtx as _withCtx, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"file-short-info\"\n};\nconst _hoisted_2 = {\n key: 0,\n class: \"success-tag\"\n};\nconst _hoisted_3 = {\n key: 1,\n class: \"fail-tag\"\n};\nconst _hoisted_4 = {\n key: 2,\n class: \"success-tag\"\n};\nconst _hoisted_5 = {\n key: 3,\n class: \"primary-tag\"\n};\nconst _hoisted_6 = {\n key: 0,\n style: {\n \"margin-left\": \"2px\"\n }\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"skeleton-wrapper\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = {\n class: \"error-text\"\n};\nconst _hoisted_11 = {\n key: 3,\n class: \"file-preview\"\n};\nconst _hoisted_12 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_13 = {\n class: \"file-name-row\"\n};\nconst _hoisted_14 = {\n class: \"file-name\"\n};\nconst _hoisted_15 = {\n class: \"action-bar\"\n};\nconst _hoisted_16 = {\n class: \"action-bar-left\"\n};\nconst _hoisted_17 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card\",\n onTouchstart: _cache[17] || (_cache[17] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[18] || (_cache[18] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[19] || (_cache[19] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", _hoisted_1, [$props.item.metadata?.ListType === 'White' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString($options.channelTag), 1)) : $props.item.metadata?.ListType === 'Block' || $props.item.metadata?.Label === 'adult' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString($options.channelTag), 1)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString($options.channelTag), 1)), $props.item.metadata?.Tags && $props.item.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [_createVNode(_component_font_awesome_icon, {\n icon: \"tag\",\n style: {\n \"margin-right\": \"3px\",\n \"font-size\": \"12px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString($props.item.metadata.Tags[0]) + \" \", 1), $props.item.metadata.Tags.length > 1 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, \" (+\" + _toDisplayString($props.item.metadata.Tags.length - 1) + \") \", 1)) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)]), $options.isVideo ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [$data.videoLoading ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7)) : $data.videoError ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"error-wrapper\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])) : _createCommentVNode(\"\", true), _withDirectives(_createElementVNode(\"video\", {\n src: $props.fileLink,\n muted: \"\",\n loop: \"\",\n preload: \"metadata\",\n class: \"video-preview\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handleVideoClick && $options.handleVideoClick(...args)),\n onMouseenter: _cache[4] || (_cache[4] = $event => $options.handleVideoHover($event, true)),\n onMouseleave: _cache[5] || (_cache[5] = $event => $options.handleVideoHover($event, false)),\n onFullscreenchange: _cache[6] || (_cache[6] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onWebkitfullscreenchange: _cache[7] || (_cache[7] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onLoadeddata: _cache[8] || (_cache[8] = $event => $data.videoLoading = false),\n onError: _cache[9] || (_cache[9] = (...args) => $options.handleVideoError && $options.handleVideoError(...args))\n }, null, 40, _hoisted_9), [[_vShow, !$data.videoLoading && !$data.videoError]])], 64)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-preview audio-card-preview\",\n onClick: _cache[10] || (_cache[10] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"music\",\n class: \"file-icon audio-icon\"\n })])) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n \"preview-teleported\": true,\n src: $props.fileLink,\n \"preview-src-list\": $props.previewSrcList,\n fit: \"cover\",\n lazy: \"\",\n decoding: \"async\",\n class: \"image-preview\"\n }, {\n placeholder: _withCtx(() => [...(_cache[20] || (_cache[20] = [_createElementVNode(\"div\", {\n class: \"skeleton-wrapper\"\n }, null, -1)]))]),\n error: _withCtx(() => [_createElementVNode(\"div\", {\n class: \"error-wrapper\",\n onClick: _cache[11] || (_cache[11] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"image\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])]),\n _: 1\n }, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"span\", _hoisted_14, _toDisplayString($options.displayName), 1)]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.detail'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[12] || (_cache[12] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])]), _createElementVNode(\"div\", _hoisted_17, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[13] || (_cache[13] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[14] || (_cache[14] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[15] || (_cache[15] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[16] || (_cache[16] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])])]),\n _: 1\n });\n}","export default {\n name: 'FileCard',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n required: true\n },\n previewSrcList: {\n type: Array,\n default: () => []\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'detail', 'copy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n videoLoading: true,\n videoError: false\n };\n },\n computed: {\n channelTag() {\n return this.item.channelTag || '';\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n displayName() {\n const fileName = this.item.metadata?.FileName || this.item.name || '';\n const parts = fileName.split('/');\n return parts[parts.length - 1];\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n },\n fileLink() {\n // 链接变化时重置加载状态\n this.videoLoading = true;\n this.videoError = false;\n }\n },\n methods: {\n handleVideoError() {\n this.videoLoading = false;\n this.videoError = true;\n },\n handleVideoClick(e) {\n const video = e.target;\n if (video.requestFullscreen) {\n video.requestFullscreen();\n } else if (video.webkitRequestFullscreen) {\n video.webkitRequestFullscreen();\n } else if (video.mozRequestFullScreen) {\n video.mozRequestFullScreen();\n } else if (video.msRequestFullscreen) {\n video.msRequestFullscreen();\n }\n },\n handleFullscreenChange(e) {\n const video = e.target;\n const isFullscreen = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n if (isFullscreen) {\n // 进入全屏:取消静音和循环\n video.muted = false;\n video.loop = false;\n } else {\n // 退出全屏:恢复静音和循环,暂停并重置\n video.muted = true;\n video.loop = true;\n video.pause();\n video.currentTime = 0;\n }\n },\n handleVideoHover(e, isEnter) {\n const video = e.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileCard.vue?vue&type=template&id=e367e94e&scoped=true\"\nimport script from \"./FileCard.vue?vue&type=script&lang=js\"\nexport * from \"./FileCard.vue?vue&type=script&lang=js\"\n\nimport \"./FileCard.vue?vue&type=style&index=0&id=e367e94e&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-e367e94e\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_2 = {\n class: \"file-name-row\"\n};\nconst _hoisted_3 = {\n class: \"file-name\"\n};\nconst _hoisted_4 = {\n key: 0,\n class: \"action-bar\"\n};\nconst _hoisted_5 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card folder-card\",\n onTouchstart: _cache[6] || (_cache[6] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[7] || (_cache[7] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[8] || (_cache[8] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", {\n class: \"folder-icon\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('enter'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"folder-icon-svg\"\n })]), _createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($options.folderName), 1)]), $props.showActions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_cache[9] || (_cache[9] = _createElementVNode(\"div\", {\n class: \"action-bar-left\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[3] || (_cache[3] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n });\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FolderCard',\n props: {\n name: {\n type: String,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n showActions: {\n type: Boolean,\n default: true\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'enter', 'copy', 'move', 'delete', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected\n };\n },\n computed: {\n folderName() {\n const parts = this.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.name;\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FolderCard.vue?vue&type=template&id=5f22ef48&scoped=true\"\nimport script from \"./FolderCard.vue?vue&type=script&lang=js\"\nexport * from \"./FolderCard.vue?vue&type=script&lang=js\"\n\nimport \"./FolderCard.vue?vue&type=style&index=0&id=5f22ef48&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-5f22ef48\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, createStaticVNode as _createStaticVNode } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return $props.type === 'card' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 0\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'skeleton-' + i,\n class: \"skeleton-card\"\n }, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"div\", {\n class: \"skeleton-image\"\n }, null, -1), _createElementVNode(\"div\", {\n class: \"skeleton-info\"\n }, [_createElementVNode(\"div\", {\n class: \"skeleton-text\"\n })], -1)]))]);\n }), 128)) : $props.type === 'list' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 1\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'list-skeleton-' + i,\n class: \"list-item skeleton-list-item\"\n }, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"
\", 10)]))]);\n }), 128)) : _createCommentVNode(\"\", true);\n}","export default {\n name: 'SkeletonLoader',\n props: {\n type: {\n type: String,\n default: 'card',\n validator: value => ['card', 'list'].includes(value)\n },\n count: {\n type: Number,\n default: 15\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SkeletonLoader.vue?vue&type=template&id=5060702c&scoped=true\"\nimport script from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\nexport * from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\n\nimport \"./SkeletonLoader.vue?vue&type=style&index=0&id=5060702c&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-5060702c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"el-dropdown-link filter-trigger\"\n};\nconst _hoisted_2 = {\n class: \"filter-section\"\n};\nconst _hoisted_3 = {\n class: \"filter-title\"\n};\nconst _hoisted_4 = {\n class: \"filter-options\"\n};\nconst _hoisted_5 = {\n class: \"filter-section\"\n};\nconst _hoisted_6 = {\n class: \"filter-title\"\n};\nconst _hoisted_7 = {\n class: \"filter-options\"\n};\nconst _hoisted_8 = {\n class: \"filter-section\"\n};\nconst _hoisted_9 = {\n class: \"filter-title\"\n};\nconst _hoisted_10 = {\n class: \"filter-options\"\n};\nconst _hoisted_11 = {\n class: \"filter-section\"\n};\nconst _hoisted_12 = {\n class: \"filter-title\"\n};\nconst _hoisted_13 = {\n class: \"filter-options\"\n};\nconst _hoisted_14 = {\n class: \"filter-section\"\n};\nconst _hoisted_15 = {\n class: \"filter-title\"\n};\nconst _hoisted_16 = {\n class: \"filter-options\"\n};\nconst _hoisted_17 = {\n key: 0,\n class: \"filter-section\"\n};\nconst _hoisted_18 = {\n class: \"filter-title\"\n};\nconst _hoisted_19 = {\n class: \"filter-options\"\n};\nconst _hoisted_20 = {\n key: 0,\n class: \"channel-divider\"\n};\nconst _hoisted_21 = {\n class: \"channel-group-title\"\n};\nconst _hoisted_22 = {\n class: \"filter-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_badge = _resolveComponent(\"el-badge\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n return _openBlock(), _createBlock(_component_el_dropdown, {\n \"hide-on-click\": false,\n trigger: \"click\",\n class: \"filter-dropdown\",\n ref: \"dropdownRef\"\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"filter-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('filter.accessStatus')), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.accessStatus,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localFilters.accessStatus = $event),\n onChange: _cache[1] || (_cache[1] = $event => $options.handleFilterChange('accessStatus'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.accessStatusOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'accessStatus-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.$t('filter.blackWhiteList')), 1), _createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.listType,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.localFilters.listType = $event),\n onChange: _cache[3] || (_cache[3] = $event => $options.handleFilterChange('listType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.listTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'listType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('filter.reviewResult')), 1), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.label,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.localFilters.label = $event),\n onChange: _cache[5] || (_cache[5] = $event => $options.handleFilterChange('label'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.labelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'label-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, _toDisplayString(_ctx.$t('filter.fileType')), 1), _createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.fileType,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.localFilters.fileType = $event),\n onChange: _cache[7] || (_cache[7] = $event => $options.handleFilterChange('fileType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.fileTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'fileType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('filter.channelType')), 1), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channel,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.localFilters.channel = $event),\n onChange: _cache[9] || (_cache[9] = $event => $options.handleFilterChange('channel'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.channelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channel-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), $props.channelNameOptions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('filter.channelName')), 1), _createElementVNode(\"div\", _hoisted_19, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channelName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.localFilters.channelName = $event),\n onChange: _cache[11] || (_cache[11] = $event => $options.handleFilterChange('channelName'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedChannelNames, (group, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: 'group-' + group.type\n }, [index > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_21, _toDisplayString(group.typeLabel), 1), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.channels, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channelName-' + option.type + '-' + option.name,\n label: option.type + ':' + option.name\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.name), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))], 64);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_el_button, {\n size: \"small\",\n onClick: $options.clearFilters,\n disabled: $options.activeFilterCount === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('filter.clearFilters')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_1, [_createVNode(_component_el_badge, {\n value: $options.activeFilterCount,\n hidden: $options.activeFilterCount === 0,\n class: \"filter-badge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"filter\",\n class: \"header-icon\"\n })]),\n _: 1\n }, 8, [\"value\", \"hidden\"])])]),\n _: 1\n }, 512);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nexport default {\n name: 'FilterDropdown',\n props: {\n filters: {\n type: Object,\n default: () => ({\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'none'\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n })\n },\n channelNameOptions: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:filters', 'change'],\n data() {\n return {\n localFilters: {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n }\n };\n },\n computed: {\n // 访问状态选项(综合判断 ListType 和 Label)\n // 正常: ListType !== 'Block' && Label !== 'adult'\n // 已屏蔽: ListType === 'Block' || Label === 'adult'\n accessStatusOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.blocked'),\n value: 'blocked'\n }];\n },\n // 黑白名单选项(直接使用 ListType 字段值)\n listTypeOptions() {\n return [{\n label: this.$t('filter.whiteList'),\n value: 'White'\n }, {\n label: this.$t('filter.blackList'),\n value: 'Block'\n }, {\n label: this.$t('filter.notSet'),\n value: 'None'\n }];\n },\n // 审查结果选项\n labelOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.teenContent'),\n value: 'teen'\n }, {\n label: this.$t('filter.adultContent'),\n value: 'adult'\n }];\n },\n fileTypeOptions() {\n return [{\n label: this.$t('filter.image'),\n value: 'image'\n }, {\n label: this.$t('filter.video'),\n value: 'video'\n }, {\n label: this.$t('filter.audio'),\n value: 'audio'\n }, {\n label: this.$t('filter.other'),\n value: 'other'\n }];\n },\n channelOptions() {\n return [{\n label: 'Telegram',\n value: 'TelegramNew'\n }, {\n label: 'Cloudflare R2',\n value: 'CloudflareR2'\n }, {\n label: 'S3',\n value: 'S3'\n }, {\n label: 'Discord',\n value: 'Discord'\n }, {\n label: 'HuggingFace',\n value: 'HuggingFace'\n }, {\n label: 'WebDAV',\n value: 'WebDAV'\n }, {\n label: this.$t('filter.externalLink'),\n value: 'External'\n }];\n },\n activeFilterCount() {\n return Object.values(this.localFilters).reduce((count, arr) => count + arr.length, 0);\n },\n // 按类型分组渠道名称\n groupedChannelNames() {\n const groups = {};\n this.channelNameOptions.forEach(option => {\n if (!groups[option.type]) {\n groups[option.type] = {\n type: option.type,\n typeLabel: option.typeLabel,\n channels: []\n };\n }\n groups[option.type].channels.push(option);\n });\n return Object.values(groups);\n }\n },\n watch: {\n filters: {\n handler(newFilters) {\n this.localFilters = {\n accessStatus: Array.isArray(newFilters.accessStatus) ? [...newFilters.accessStatus] : [],\n listType: Array.isArray(newFilters.listType) ? [...newFilters.listType] : [],\n label: Array.isArray(newFilters.label) ? [...newFilters.label] : [],\n fileType: Array.isArray(newFilters.fileType) ? [...newFilters.fileType] : [],\n channel: Array.isArray(newFilters.channel) ? [...newFilters.channel] : [],\n channelName: Array.isArray(newFilters.channelName) ? [...newFilters.channelName] : []\n };\n },\n immediate: true,\n deep: true\n }\n },\n methods: {\n handleFilterChange(type) {\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type,\n filters: {\n ...this.localFilters\n }\n });\n },\n clearFilters() {\n this.localFilters = {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type: 'clear',\n filters: {\n ...this.localFilters\n }\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FilterDropdown.vue?vue&type=template&id=c3aeeea0&scoped=true\"\nimport script from \"./FilterDropdown.vue?vue&type=script&lang=js\"\nexport * from \"./FilterDropdown.vue?vue&type=script&lang=js\"\n\nimport \"./FilterDropdown.vue?vue&type=style&index=0&id=c3aeeea0&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-c3aeeea0\"]])\n\nexport default __exports__","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport { resolveComponent as _resolveComponent, createVNode as _createVNode, withKeys as _withKeys, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content\"\n};\nconst _hoisted_3 = {\n class: \"search-area\"\n};\nconst _hoisted_4 = {\n class: \"search-card\"\n};\nconst _hoisted_5 = {\n class: \"actions\"\n};\nconst _hoisted_6 = {\n class: \"el-dropdown-link\"\n};\nconst _hoisted_7 = {\n class: \"el-dropdown-link\"\n};\nconst _hoisted_8 = {\n class: \"breadcrumb-container\"\n};\nconst _hoisted_9 = {\n class: \"mobile-directory-path\"\n};\nconst _hoisted_10 = {\n class: \"breadcrumb desktop-only\"\n};\nconst _hoisted_11 = [\"title\"];\nconst _hoisted_12 = {\n key: 1,\n class: \"empty-state\"\n};\nconst _hoisted_13 = {\n class: \"empty-text\"\n};\nconst _hoisted_14 = {\n class: \"empty-hint\"\n};\nconst _hoisted_15 = {\n class: \"list-header\"\n};\nconst _hoisted_16 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_17 = {\n class: \"list-col list-col-preview\"\n};\nconst _hoisted_18 = {\n class: \"list-col list-col-name\"\n};\nconst _hoisted_19 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_20 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_21 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_22 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_23 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_24 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_25 = {\n class: \"list-col list-col-actions\"\n};\nconst _hoisted_26 = {\n key: 1,\n class: \"empty-state list-empty\"\n};\nconst _hoisted_27 = {\n class: \"empty-text\"\n};\nconst _hoisted_28 = {\n class: \"empty-hint\"\n};\nconst _hoisted_29 = {\n class: \"pagination-container\"\n};\nconst _hoisted_30 = {\n class: \"pagination-center\"\n};\nconst _hoisted_31 = {\n class: \"pagination-right\"\n};\nconst _hoisted_32 = {\n class: \"page-total\"\n};\nconst _hoisted_33 = {\n class: \"page-jump\"\n};\nconst _hoisted_34 = {\n class: \"dialog-section\"\n};\nconst _hoisted_35 = {\n class: \"section-header\"\n};\nconst _hoisted_36 = {\n class: \"section-title\"\n};\nconst _hoisted_37 = {\n class: \"section-content\"\n};\nconst _hoisted_38 = {\n class: \"dialog-section\"\n};\nconst _hoisted_39 = {\n class: \"section-header\"\n};\nconst _hoisted_40 = {\n class: \"section-title\"\n};\nconst _hoisted_41 = {\n class: \"section-content\"\n};\nconst _hoisted_42 = {\n class: \"setting-item\"\n};\nconst _hoisted_43 = {\n class: \"setting-label\"\n};\nconst _hoisted_44 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_45 = {\n class: \"setting-label\"\n};\nconst _hoisted_46 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_FilterDropdown = _resolveComponent(\"FilterDropdown\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_el_breadcrumb_item = _resolveComponent(\"el-breadcrumb-item\");\n const _component_el_breadcrumb = _resolveComponent(\"el-breadcrumb\");\n const _component_SkeletonLoader = _resolveComponent(\"SkeletonLoader\");\n const _component_FolderCard = _resolveComponent(\"FolderCard\");\n const _component_FileCard = _resolveComponent(\"FileCard\");\n const _component_FileListItem = _resolveComponent(\"FileListItem\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_main = _resolveComponent(\"el-main\");\n const _component_el_container = _resolveComponent(\"el-container\");\n const _component_BatchActionBar = _resolveComponent(\"BatchActionBar\");\n const _component_FileDetailDialog = _resolveComponent(\"FileDetailDialog\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_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_TagManagementDialog = _resolveComponent(\"TagManagementDialog\");\n const _component_BatchTagDialog = _resolveComponent(\"BatchTagDialog\");\n const _component_MobileActionSheet = _resolveComponent(\"MobileActionSheet\");\n const _component_MobileDirectoryDrawer = _resolveComponent(\"MobileDirectoryDrawer\");\n const _component_MoveFileDialog = _resolveComponent(\"MoveFileDialog\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_container, null, {\n default: _withCtx(() => [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"dashboard\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.tempSearch,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.tempSearch = $event),\n size: \"small\",\n placeholder: _ctx.$t('dashboard.searchPlaceholder'),\n onKeyup: _withKeys($options.handleSearch, [\"enter\"])\n }, {\n suffix: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"search\",\n class: \"search-icon\",\n onClick: $options.handleSearch\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\"])]), _createVNode(_component_FilterDropdown, {\n filters: $data.filters,\n \"onUpdate:filters\": _cache[1] || (_cache[1] = $event => $data.filters = $event),\n channelNameOptions: $data.channelNameOptions,\n onChange: $options.handleFilterChange\n }, null, 8, [\"filters\", \"channelNameOptions\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_dropdown, {\n onCommand: $options.sort,\n \"hide-on-click\": false\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"dateDesc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortByDateDesc')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"nameAsc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortByNameAsc')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: $options.sortIcon,\n class: \"header-icon\"\n }, null, 8, [\"icon\"])])]),\n _: 1\n }, 8, [\"onCommand\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.linkFormat'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"header-icon\",\n onClick: _cache[2] || (_cache[2] = $event => $data.showUrlDialog = true)\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: $data.viewMode === 'card' ? _ctx.$t('dashboard.listView') : _ctx.$t('dashboard.cardView'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'card' ? 'list' : 'th-large',\n class: \"header-icon\",\n onClick: $options.toggleViewMode\n }, null, 8, [\"icon\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_el_main, {\n class: _normalizeClass([\"main-container\", {\n 'has-batch-toolbar': $data.selectedFiles.length > 0\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"button\", {\n class: \"breadcrumb-select-button\",\n type: \"button\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handleSelectPage && $options.handleSelectPage(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.selectPageIcon,\n class: \"breadcrumb-select-icon\"\n }, null, 8, [\"icon\"])]), _createElementVNode(\"div\", {\n class: \"mobile-directory-trigger\",\n onClick: _cache[4] || (_cache[4] = $event => $data.showMobileDirectoryDrawer = true)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"mobile-directory-icon\"\n }), _createElementVNode(\"span\", _hoisted_9, _toDisplayString($data.currentPath && $data.currentPath.split('/').filter(Boolean).length > 0 ? $data.currentPath.split('/').filter(Boolean).pop() : _ctx.$t('dashboard.rootDirectory')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"mobile-directory-arrow\"\n })]), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_breadcrumb, {\n separator: \"/\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_breadcrumb_item, {\n onClick: _cache[5] || (_cache[5] = $event => $options.navigateToFolder(''))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"breadcrumb-home-icon\"\n })]),\n _: 1\n }), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentPath.split('/').filter(Boolean), (folder, index) => {\n return _openBlock(), _createBlock(_component_el_breadcrumb_item, {\n key: index,\n onClick: $event => $options.navigateToFolder($data.currentPath.split('/').filter(Boolean).slice(0, index + 1).join('/'))\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(folder), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))]),\n _: 1\n })]), _createElementVNode(\"span\", {\n class: \"stats-badge\",\n title: _ctx.$t('dashboard.totalFiles', {\n count: _ctx.$data.Number\n })\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"stats-badge-icon\"\n }), _createTextVNode(\" \" + _toDisplayString($data.Number), 1)], 8, _hoisted_11)]), $data.viewMode === 'card' ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"content\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"cardContainerRef\"\n }, [$data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"card\",\n count: 15\n })) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_13, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_14, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: index\n }, [$options.isFolder(item) ? (_openBlock(), _createBlock(_component_FolderCard, {\n key: 0,\n name: item.name,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n showActions: !$data.isSearchMode,\n disableTooltip: $options.disableTooltip,\n onEnter: $event => $options.enterFolder(item.name),\n onCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onTouchstart: $event => $options.handleFolderTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"name\", \"selected\", \"onUpdate:selected\", \"showActions\", \"disableTooltip\", \"onEnter\", \"onCopy\", \"onMove\", \"onDelete\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"])) : (_openBlock(), _createBlock(_component_FileCard, {\n key: 1,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n previewSrcList: item.previewSrcList,\n disableTooltip: $options.disableTooltip,\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"previewSrcList\", \"disableTooltip\", \"onDetail\", \"onCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]))], 64);\n }), 128))], 2)) : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"list-view\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"listContainerRef\"\n }, [_createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-checkbox\", {\n 'checked': $options.isSelectAll,\n 'indeterminate': $options.isIndeterminate\n }]),\n onClick: _cache[6] || (_cache[6] = $event => $options.handleSelectAllPage(!$options.isSelectAll))\n }, [$options.isSelectAll ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"check-icon\"\n })) : $options.isIndeterminate ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"minus\",\n class: \"check-icon\"\n })) : _createCommentVNode(\"\", true)], 2)]), _createElementVNode(\"div\", _hoisted_17, _toDisplayString(_ctx.$t('dashboard.preview')), 1), _createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('dashboard.fileName')), 1), _createElementVNode(\"div\", _hoisted_19, _toDisplayString(_ctx.$t('dashboard.tags')), 1), _createElementVNode(\"div\", _hoisted_20, _toDisplayString(_ctx.$t('dashboard.channelType')), 1), _createElementVNode(\"div\", _hoisted_21, _toDisplayString(_ctx.$t('dashboard.channelNameCol')), 1), _createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t('dashboard.uploadAddress')), 1), _createElementVNode(\"div\", _hoisted_23, _toDisplayString(_ctx.$t('dashboard.fileSize')), 1), _createElementVNode(\"div\", _hoisted_24, _toDisplayString(_ctx.$t('dashboard.uploadTime')), 1), _createElementVNode(\"div\", _hoisted_25, _toDisplayString(_ctx.$t('dashboard.actions')), 1)]), $data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"list\",\n count: 15\n })) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_27, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_28, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createBlock(_component_FileListItem, {\n key: index,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n onEnter: $event => $options.enterFolder(item.name),\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onFolderCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.isFolder(item) ? $options.handleFolderTouchStart(item, index) : $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"onEnter\", \"onDetail\", \"onCopy\", \"onFolderCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]);\n }), 128))], 2)), $setup.isDragging ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"drag-select-overlay\",\n style: _normalizeStyle({\n position: 'fixed',\n left: $setup.selectionRect.left + 'px',\n top: $setup.selectionRect.top + 'px',\n width: $setup.selectionRect.width + 'px',\n height: $setup.selectionRect.height + 'px'\n })\n }, null, 4)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_29, [_createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $options.filteredTableData.length,\n \"page-size\": $data.pageSize,\n \"current-page\": $data.currentPage,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"page-size\", \"current-page\", \"pager-count\", \"onCurrentChange\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.refreshFileList,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync\",\n class: _normalizeClass({\n 'fa-spin': $data.refreshLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"]), $data.currentPage === Math.ceil($options.filteredTableData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_31, [_createElementVNode(\"span\", _hoisted_32, _toDisplayString(_ctx.$t('dashboard.totalPages', {\n count: $options.realTotalPages\n })), 1), _createElementVNode(\"div\", _hoisted_33, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.jumpTo')), 1), _createVNode(_component_el_input, {\n modelValue: $data.jumpPage,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.jumpPage = $event),\n size: \"small\",\n class: \"jump-input\",\n onKeyup: _withKeys($options.handleJumpPage, [\"enter\"])\n }, null, 8, [\"modelValue\", \"onKeyup\"]), _createVNode(_component_el_button, {\n size: \"small\",\n type: \"primary\",\n onClick: $options.handleJumpPage,\n class: \"jump-btn\"\n }, {\n default: _withCtx(() => [...(_cache[24] || (_cache[24] = [_createTextVNode(\"GO\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"])])])])]),\n _: 1\n }, 8, [\"class\"])]),\n _: 1\n }), _createVNode(_component_BatchActionBar, {\n \"selected-count\": $data.selectedFiles.length,\n onAction: $options.handleBatchAction,\n onClear: $options.clearSelection\n }, null, 8, [\"selected-count\", \"onAction\", \"onClear\"]), _createVNode(_component_FileDetailDialog, {\n modelValue: $data.showdetailDialog,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.showdetailDialog = $event),\n file: $data.detailFile,\n fileLink: $options.getFileLink($data.detailFile?.name),\n urls: $options.allUrl,\n onDownload: _cache[9] || (_cache[9] = $event => $options.handleDownload($data.detailFile?.name)),\n onTagManagement: _cache[10] || (_cache[10] = $event => $options.handleTagManagement($data.detailFile?.name)),\n onBlock: _cache[11] || (_cache[11] = $event => $options.handleBlock($data.detailFile?.name)),\n onWhite: _cache[12] || (_cache[12] = $event => $options.handleWhite($data.detailFile?.name)),\n onDelete: _cache[13] || (_cache[13] = $event => $options.handleDetailDelete($data.detailFile?.name)),\n onMetadataUpdated: $options.handleMetadataUpdated,\n onFileRenamed: $options.handleFileRenamed\n }, null, 8, [\"modelValue\", \"file\", \"fileLink\", \"urls\", \"onMetadataUpdated\", \"onFileRenamed\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('dashboard.linkFormat'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"div\", _hoisted_35, [_createElementVNode(\"span\", _hoisted_36, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_37, [_createVNode(_component_el_radio_group, {\n modelValue: $data.defaultUrlFormat,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.defaultUrlFormat = $event),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"originUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"mdUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[25] || (_cache[25] = _createElementVNode(\"span\", null, \"Markdown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"htmlUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[26] || (_cache[26] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"bbUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[27] || (_cache[27] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"tgId\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"radio-icon\"\n }), _cache[28] || (_cache[28] = _createElementVNode(\"span\", null, \"TG File ID\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3Location\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.s3Link')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_38, [_createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"span\", _hoisted_40, _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_41, [_createElementVNode(\"div\", _hoisted_42, [_createElementVNode(\"span\", _hoisted_43, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_44, [_createElementVNode(\"span\", _hoisted_45, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_46, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[17] || (_cache[17] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_TagManagementDialog, {\n modelValue: $data.showTagDialog,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.showTagDialog = $event),\n fileId: $data.currentTagFile,\n onTagsUpdated: $options.handleTagsUpdated\n }, null, 8, [\"modelValue\", \"fileId\", \"onTagsUpdated\"]), _createVNode(_component_BatchTagDialog, {\n modelValue: $data.showBatchTagDialog,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.showBatchTagDialog = $event),\n selectedFiles: $data.selectedFiles,\n onTagsUpdated: $options.handleBatchTagsUpdated\n }, null, 8, [\"modelValue\", \"selectedFiles\", \"onTagsUpdated\"]), _createVNode(_component_MobileActionSheet, {\n modelValue: $data.showMobileActionModal,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.showMobileActionModal = $event),\n title: $data.mobileActionIsFolder ? $options.getFolderName($data.mobileActionFile?.name || '') : $data.mobileActionFile?.metadata?.FileName || $options.getFileName($data.mobileActionFile?.name || ''),\n isFolder: $data.mobileActionIsFolder,\n onAction: $options.handleMobileAction\n }, null, 8, [\"modelValue\", \"title\", \"isFolder\", \"onAction\"]), _createVNode(_component_MobileDirectoryDrawer, {\n modelValue: $data.showMobileDirectoryDrawer,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showMobileDirectoryDrawer = $event),\n currentPath: $data.currentPath,\n onNavigate: $options.navigateToFolder,\n onGoBack: $options.handleGoBack\n }, null, 8, [\"modelValue\", \"currentPath\", \"onNavigate\", \"onGoBack\"]), _createVNode(_component_MoveFileDialog, {\n modelValue: $data.showMoveDialog,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.showMoveDialog = $event),\n \"current-directory\": $data.currentPath,\n \"is-batch-move\": $data.isBatchMove,\n \"initial-path\": $data.moveTargetPath,\n onConfirm: $options.confirmMove\n }, null, 8, [\"modelValue\", \"current-directory\", \"is-batch-move\", \"initial-path\", \"onConfirm\"])]);\n}","// 文件管理器工具类\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { ElMessage } from 'element-plus';\r\nimport i18n from '@/locales';\r\n\r\nclass FileManager {\r\n constructor() {\r\n this.FILE_LIST_PATH = 'data/fileList.json';\r\n this.fileListCache = null;\r\n this.storageWarningShown = false;\r\n }\r\n\r\n // 从本地存储读取文件列表\r\n getLocalFileList() {\r\n const fileList = this.getMutableFileList();\r\n return {\r\n ...fileList,\r\n files: [...(fileList.files || [])],\r\n directories: [...(fileList.directories || [])],\r\n };\r\n }\r\n\r\n getMutableFileList() {\r\n if (this.fileListCache) {\r\n return this.fileListCache;\r\n }\r\n\r\n try {\r\n const fileList = localStorage.getItem(this.FILE_LIST_PATH);\r\n this.fileListCache = fileList ? JSON.parse(fileList) : this.createEmptyFileList();\r\n return this.fileListCache;\r\n } catch (error) {\r\n console.error('Error reading local file list:', error);\r\n this.fileListCache = this.createEmptyFileList();\r\n return this.fileListCache;\r\n }\r\n }\r\n\r\n // 更新内存缓存,并尽量持久化到 localStorage\r\n updateFileListCache(fileList) {\r\n this.fileListCache = fileList || this.createEmptyFileList();\r\n const persisted = this.persistFileListCache();\r\n\r\n return {\r\n cacheUpdated: true,\r\n persisted,\r\n };\r\n }\r\n\r\n persistFileListCache() {\r\n try {\r\n localStorage.setItem(this.FILE_LIST_PATH, JSON.stringify(this.fileListCache));\r\n return true;\r\n } catch (error) {\r\n this.handleStoragePersistError(error);\r\n return false;\r\n }\r\n }\r\n\r\n createEmptyFileList() {\r\n return { files: [], directories: [] };\r\n }\r\n\r\n handleStoragePersistError(error) {\r\n console.warn('File list is kept in memory because localStorage persistence failed:', error);\r\n\r\n try {\r\n localStorage.removeItem(this.FILE_LIST_PATH);\r\n } catch (removeError) {\r\n console.warn('Failed to remove stale file list cache:', removeError);\r\n }\r\n\r\n if (!this.storageWarningShown) {\r\n this.storageWarningShown = true;\r\n ElMessage.warning(i18n.global.t('dashboard.fileListMemoryCacheWarning'));\r\n }\r\n }\r\n\r\n // 添加新文件到列表\r\n addFile(newFile) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n fileList.files.push(newFile);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error adding file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 添加新文件夹\r\n addFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n if (!fileList.directories.includes(folderName)) {\r\n fileList.directories.push(folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n }\r\n return false; // 文件夹已存在\r\n } catch (error) {\r\n console.error('Error adding folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 移动文件或文件夹\r\n moveFile(oldPath, newPath, isFolder = false, currentPath = '') {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n \r\n if (isFolder) {\r\n // 更新目录列表\r\n const oldFolderIndex = fileList.directories.indexOf(oldPath);\r\n if (oldFolderIndex !== -1) {\r\n fileList.directories.splice(oldFolderIndex, 1);\r\n }\r\n\r\n } else {\r\n // 移动单个文件\r\n const fileIndex = fileList.files.findIndex(file => file.name === oldPath);\r\n if (fileIndex !== -1) {\r\n // 从旧位置移除\r\n fileList.files.splice(fileIndex, 1);\r\n }\r\n\r\n }\r\n\r\n // 如果新路径包含当前目录的直接子目录,则添加直接子目录\r\n if (newPath.startsWith(currentPath)) {\r\n const pathArray = newPath.substring(currentPath.length).split('/');\r\n if (pathArray.length > 1) {\r\n const newFolder = currentPath + pathArray[0];\r\n if (!fileList.directories.includes(newFolder)) {\r\n fileList.directories.push(newFolder);\r\n }\r\n }\r\n }\r\n\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error moving file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件\r\n removeFile(fileName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => file.name !== fileName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件夹(同时删除该文件夹下的所有文件)\r\n removeFolder(folderName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => !file.name.startsWith(folderName + '/'));\r\n fileList.directories = fileList.directories.filter(dir => dir !== folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 获取指定目录下的文件和子目录\r\n getFilesInFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const files = fileList.files.filter(file => file.name.startsWith(folderName + '/'));\r\n const subdirectories = fileList.directories.filter(dir => dir.startsWith(folderName + '/'));\r\n return { files, directories: subdirectories };\r\n } catch (error) {\r\n console.error('Error getting files in folder:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n\r\n // 构建筛选参数URL\r\n buildFilterParams(filters) {\r\n let params = '';\r\n // 访问状态筛选(综合判断)\r\n if (filters.accessStatus && filters.accessStatus.length > 0) {\r\n params += `&accessStatus=${encodeURIComponent(filters.accessStatus.join(','))}`;\r\n }\r\n // 黑白名单筛选(直接使用 ListType 字段)\r\n if (filters.listType && filters.listType.length > 0) {\r\n params += `&listType=${encodeURIComponent(filters.listType.join(','))}`;\r\n }\r\n if (filters.label && filters.label.length > 0) {\r\n params += `&label=${encodeURIComponent(filters.label.join(','))}`;\r\n }\r\n if (filters.fileType && filters.fileType.length > 0) {\r\n params += `&fileType=${encodeURIComponent(filters.fileType.join(','))}`;\r\n }\r\n if (filters.channel && filters.channel.length > 0) {\r\n params += `&channel=${encodeURIComponent(filters.channel.join(','))}`;\r\n }\r\n if (filters.channelName && filters.channelName.length > 0) {\r\n params += `&channelName=${encodeURIComponent(filters.channelName.join(','))}`;\r\n }\r\n return params;\r\n }\r\n\r\n // 更新文件列表\r\n async refreshFileList(dir, search = '', includeTags = '', excludeTags = '', filters = {}) {\r\n search = search.trim();\r\n try {\r\n let url = `/api/manage/list?count=60&dir=${dir}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n \r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n const newFileList = await response.json();\r\n if (!newFileList.isIndexedResponse) {\r\n ElMessage.warning(i18n.global.t('dashboard.indexingWarning'));\r\n }\r\n // 保存包含新字段的完整数据\r\n return this.updateFileListCache(newFileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error refreshing file list:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 读取更多数据\r\n async loadMoreFiles(dir, search = '', includeTags = '', excludeTags = '', count = 60, filters = {}) {\r\n search = search.trim();\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const start = fileList.files.length;\r\n\r\n let url = `/api/manage/list?dir=${dir}&start=${start}&count=${count}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n\r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n \r\n const moreFiles = await response.json();\r\n fileList.files.push(...moreFiles.files);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error loading more files:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n}\r\n\r\nexport const fileManager = new FileManager();\r\n","/**\r\n * 矩形工具函数\r\n * 用于框选(rubber-band selection)功能中的矩形计算和相交检测\r\n */\r\n\r\n/**\r\n * 判断两个矩形是否相交\r\n * @param {Object} rectA - { left, top, right, bottom }\r\n * @param {Object} rectB - { left, top, right, bottom }\r\n * @returns {boolean} 是否存在重叠区域\r\n */\r\nexport function rectIntersects(rectA, rectB) {\r\n return !(\r\n rectA.right <= rectB.left ||\r\n rectA.left >= rectB.right ||\r\n rectA.bottom <= rectB.top ||\r\n rectA.top >= rectB.bottom\r\n );\r\n}\r\n\r\n/**\r\n * 根据起始点和当前点计算选区矩形\r\n * @param {Object} start - { x, y } 起始鼠标坐标\r\n * @param {Object} current - { x, y } 当前鼠标坐标\r\n * @returns {Object} { left, top, width, height, right, bottom }\r\n */\r\nexport function calcSelectionRect(start, current) {\r\n const left = Math.min(start.x, current.x);\r\n const top = Math.min(start.y, current.y);\r\n const width = Math.abs(current.x - start.x);\r\n const height = Math.abs(current.y - start.y);\r\n return { left, top, width, height, right: left + width, bottom: top + height };\r\n}\r\n","import { ref, watch, onMounted, onBeforeUnmount, toValue } from 'vue';\r\nimport { rectIntersects, calcSelectionRect } from './rectIntersects.js';\r\n\r\n/**\r\n * Vue 3 Composable:框选(rubber-band selection)核心逻辑,支持多视图模式\r\n *\r\n * @param {Object} options\r\n * @param {Object} options.modes - Per-view-mode configuration\r\n * @param {Object} options.modes.card - Card view config\r\n * @param {import('vue').Ref} options.modes.card.containerRef\r\n * @param {string} options.modes.card.itemSelector - e.g. '.img-card'\r\n * @param {Object} options.modes.list - List view config\r\n * @param {import('vue').Ref} options.modes.list.containerRef\r\n * @param {string} options.modes.list.itemSelector - e.g. '.list-item'\r\n * @param {string} [options.mainSelector='.main-container'] - 主内容区域的 CSS 选择器,框选只能从该区域内开始\r\n * @param {import('vue').Ref} options.viewMode - 当前视图模式\r\n * @param {import('vue').Ref} options.items - 当前页的数据项(paginatedTableData)\r\n * @returns {{ isDragging: import('vue').Ref, selectionRect: import('vue').Ref }}\r\n */\r\nexport function useDragSelect(options) {\r\n const {\r\n modes,\r\n mainSelector = '.main-container',\r\n viewMode,\r\n items,\r\n } = options;\r\n\r\n // --- Reactive state ---\r\n const isDragging = ref(false);\r\n const selectionRect = ref({ left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 });\r\n\r\n // --- Internal (non-reactive) state ---\r\n let startPoint = null; // { x, y } viewport coordinates at mousedown\r\n let preSelectSnapshot = []; // boolean[] snapshot of items[i].selected before drag\r\n let isAppendMode = false; // whether Shift/Ctrl/Cmd was held at mousedown\r\n\r\n // --- Enable/disable state ---\r\n const MOBILE_BREAKPOINT = 768; // px – at or below this width, drag-select is disabled\r\n let listenerAttached = false; // tracks whether the container mousedown listener is active\r\n\r\n // --- Auto-scroll state ---\r\n const EDGE_THRESHOLD = 50; // px from viewport edge to trigger auto-scroll\r\n const SCROLL_SPEED = 10; // px per frame to scroll\r\n let autoScrollTimer = null; // requestAnimationFrame ID for auto-scroll\r\n\r\n // --- Text selection prevention state ---\r\n let savedUserSelect = ''; // saved document.body.style.userSelect before drag\r\n\r\n // ------------------------------------------------------------------\r\n // Mode resolution helper\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Returns the configuration for the current viewMode.\r\n * @returns {{ containerRef: import('vue').Ref, itemSelector: string } | undefined}\r\n */\r\n function getActiveConfig() {\r\n const mode = toValue(viewMode);\r\n return modes[mode] || undefined;\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Enable / disable helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Determine whether drag-select should be enabled.\r\n * Returns true when viewMode is 'card' or 'list' AND window width > 768px.\r\n */\r\n function shouldEnable() {\r\n const mode = toValue(viewMode);\r\n return (mode === 'card' || mode === 'list') && window.innerWidth > MOBILE_BREAKPOINT;\r\n }\r\n\r\n /**\r\n * Conditionally attach or detach the container listener based on shouldEnable().\r\n * Also cancels any active drag when detaching.\r\n */\r\n function syncListenerState() {\r\n if (shouldEnable()) {\r\n if (!listenerAttached) {\r\n attachContainerListener();\r\n }\r\n } else {\r\n if (listenerAttached) {\r\n cancelDrag();\r\n detachContainerListener();\r\n }\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * 判断 mousedown 目标是否为可启动框选的空白区域。\r\n * 必须在主内容区域内,且不在卡片、交互元素上。\r\n */\r\n function isBlankArea(event) {\r\n const target = event.target;\r\n // 必须在主内容区域(el-main)内\r\n const mainArea = target.closest(mainSelector);\r\n if (!mainArea) return false;\r\n // 排除当前模式的可选元素\r\n const config = getActiveConfig();\r\n if (config) {\r\n const itemEl = target.closest(config.itemSelector);\r\n if (itemEl) {\r\n const container = toValue(config.containerRef);\r\n if (container && container.contains(itemEl)) {\r\n return false;\r\n }\r\n }\r\n }\r\n // 排除交互元素(按钮、输入框、链接、下拉菜单、分页等)\r\n const interactive = target.closest('button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container');\r\n if (interactive) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Determine whether a modifier key for append-select is pressed.\r\n */\r\n function hasAppendModifier(event) {\r\n return event.shiftKey || event.ctrlKey || event.metaKey;\r\n }\r\n\r\n /**\r\n * Save a snapshot of the current selected state for all items.\r\n */\r\n function saveSnapshot() {\r\n const currentItems = toValue(items);\r\n preSelectSnapshot = currentItems.map((item) => !!item.selected);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Auto-scroll helpers\r\n // ------------------------------------------------------------------\r\n\r\n /** The last known clientY during a drag – updated by onMouseMove. */\r\n let lastClientY = 0;\r\n\r\n /**\r\n * Start the auto-scroll loop. On each animation frame we check whether the\r\n * mouse is within EDGE_THRESHOLD of the top or bottom of the viewport and\r\n * scroll accordingly. The selection rectangle and card hit-testing are also\r\n * updated after each scroll step so the visual feedback stays in sync.\r\n */\r\n function startAutoScroll() {\r\n if (autoScrollTimer !== null) return; // already running\r\n\r\n function scrollStep() {\r\n const viewportHeight = window.innerHeight;\r\n let scrollDelta = 0;\r\n\r\n if (lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n // Near bottom edge → scroll down\r\n scrollDelta = SCROLL_SPEED;\r\n } else if (lastClientY <= EDGE_THRESHOLD) {\r\n // Near top edge → scroll up\r\n scrollDelta = -SCROLL_SPEED;\r\n }\r\n\r\n if (scrollDelta !== 0) {\r\n window.scrollBy(0, scrollDelta);\r\n\r\n // After scrolling, the viewport-relative positions of cards change,\r\n // but the mouse hasn't moved. We need to adjust the start point so\r\n // the selection rectangle accounts for the scroll offset, then\r\n // re-run hit-testing.\r\n if (startPoint) {\r\n startPoint.y -= scrollDelta;\r\n selectionRect.value = calcSelectionRect(startPoint, { x: selectionRect.value.right >= startPoint.x ? selectionRect.value.right : selectionRect.value.left, y: lastClientY });\r\n updateSelection();\r\n }\r\n }\r\n\r\n // Continue the loop\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n /**\r\n * Stop the auto-scroll loop and clean up the timer.\r\n */\r\n function stopAutoScroll() {\r\n if (autoScrollTimer !== null) {\r\n cancelAnimationFrame(autoScrollTimer);\r\n autoScrollTimer = null;\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Text selection prevention helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Disable text selection on the document body during drag.\r\n */\r\n function disableTextSelection() {\r\n savedUserSelect = document.body.style.userSelect;\r\n document.body.style.userSelect = 'none';\r\n }\r\n\r\n /**\r\n * Restore the original text selection behavior on the document body.\r\n */\r\n function restoreTextSelection() {\r\n document.body.style.userSelect = savedUserSelect;\r\n }\r\n\r\n /**\r\n * Update the selected state of every item based on the current selection rectangle.\r\n */\r\n function updateSelection() {\r\n const config = getActiveConfig();\r\n if (!config) return;\r\n\r\n const container = toValue(config.containerRef);\r\n if (!container) return;\r\n\r\n const currentItems = toValue(items);\r\n const rect = selectionRect.value;\r\n\r\n // Build the selection rect in {left, top, right, bottom} format for intersection test\r\n const selRect = {\r\n left: rect.left,\r\n top: rect.top,\r\n right: rect.right,\r\n bottom: rect.bottom,\r\n };\r\n\r\n // Query all item DOM elements inside the container using the active mode's selector\r\n const itemElements = container.querySelectorAll(config.itemSelector);\r\n\r\n // Iterate over items and corresponding DOM elements\r\n currentItems.forEach((item, index) => {\r\n const itemEl = itemElements[index];\r\n if (!itemEl) return;\r\n\r\n const itemRect = itemEl.getBoundingClientRect();\r\n const itemBounds = {\r\n left: itemRect.left,\r\n top: itemRect.top,\r\n right: itemRect.right,\r\n bottom: itemRect.bottom,\r\n };\r\n\r\n const intersects = rectIntersects(selRect, itemBounds);\r\n\r\n if (isAppendMode) {\r\n // Append mode: keep original state, toggle on if intersects\r\n // If originally selected, stay selected regardless\r\n // If not originally selected, select if intersects\r\n if (preSelectSnapshot[index]) {\r\n item.selected = true;\r\n } else {\r\n item.selected = intersects;\r\n }\r\n } else {\r\n // Non-append mode: selected = intersects only\r\n item.selected = intersects;\r\n }\r\n });\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Mouse event handlers\r\n // ------------------------------------------------------------------\r\n\r\n function onMouseDown(event) {\r\n // 仅响应鼠标左键\r\n if (event.button !== 0) return;\r\n\r\n // 点击在卡片上时不启动框选\r\n if (!isBlankArea(event)) return;\r\n\r\n // Record start point (viewport coordinates)\r\n startPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Determine append mode from modifier keys at the moment of mousedown\r\n isAppendMode = hasAppendModifier(event);\r\n\r\n // 保存选中状态快照\r\n saveSnapshot();\r\n\r\n // 非追加模式下先清除所有选中\r\n if (!isAppendMode) {\r\n const currentItems = toValue(items);\r\n currentItems.forEach((item) => {\r\n item.selected = false;\r\n });\r\n }\r\n\r\n // Start dragging\r\n isDragging.value = true;\r\n selectionRect.value = calcSelectionRect(startPoint, startPoint);\r\n\r\n // 防止文本选中\r\n disableTextSelection();\r\n\r\n // Attach document-level listeners for move and up\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n function onMouseMove(event) {\r\n if (!isDragging.value || !startPoint) return;\r\n\r\n const currentPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Track last clientY for auto-scroll\r\n lastClientY = event.clientY;\r\n\r\n // Update selection rectangle\r\n selectionRect.value = calcSelectionRect(startPoint, currentPoint);\r\n\r\n // Update card selection based on intersection\r\n updateSelection();\r\n\r\n // Start or continue auto-scroll if near viewport edges\r\n const viewportHeight = window.innerHeight;\r\n if (lastClientY <= EDGE_THRESHOLD || lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n startAutoScroll();\r\n } else {\r\n stopAutoScroll();\r\n }\r\n }\r\n\r\n function onMouseUp(_event) {\r\n if (!isDragging.value) return;\r\n\r\n // 停止自动滚动\r\n stopAutoScroll();\r\n\r\n // 恢复文本选中\r\n restoreTextSelection();\r\n\r\n // End dragging\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n\r\n // Clean up document-level listeners\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Lifecycle: attach / detach container listener\r\n // ------------------------------------------------------------------\r\n\r\n function attachContainerListener() {\r\n if (!listenerAttached) {\r\n document.addEventListener('mousedown', onMouseDown);\r\n listenerAttached = true;\r\n }\r\n }\r\n\r\n function detachContainerListener() {\r\n if (listenerAttached) {\r\n document.removeEventListener('mousedown', onMouseDown);\r\n listenerAttached = false;\r\n }\r\n }\r\n\r\n /**\r\n * Force-stop any in-progress drag (e.g. when viewMode changes).\r\n */\r\n function cancelDrag() {\r\n if (isDragging.value) {\r\n stopAutoScroll();\r\n restoreTextSelection();\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n }\r\n\r\n // 监听 viewMode 变化,启用/禁用框选\r\n // Always cancel any in-progress drag when viewMode changes (Requirement 2.3),\r\n // then re-evaluate whether listeners should be attached for the new mode.\r\n watch(\r\n () => toValue(viewMode),\r\n () => {\r\n cancelDrag();\r\n syncListenerState();\r\n }\r\n );\r\n\r\n // --- Window resize handler ---\r\n function onWindowResize() {\r\n syncListenerState();\r\n }\r\n\r\n onMounted(() => {\r\n // 仅在满足条件时启用\r\n if (shouldEnable()) {\r\n attachContainerListener();\r\n }\r\n // Always listen for resize to dynamically enable/disable\r\n window.addEventListener('resize', onWindowResize);\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n cancelDrag();\r\n restoreTextSelection();\r\n stopAutoScroll();\r\n detachContainerListener();\r\n window.removeEventListener('resize', onWindowResize);\r\n });\r\n\r\n return {\r\n isDragging,\r\n selectionRect,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/web.url-search-params.delete.js\";\nimport \"core-js/modules/web.url-search-params.has.js\";\nimport \"core-js/modules/web.url-search-params.size.js\";\nimport { mapGetters } from 'vuex';\nimport JSZip from 'jszip';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport TagManagementDialog from '@/components/dashboard/TagManagementDialog.vue';\nimport BatchTagDialog from '@/components/dashboard/BatchTagDialog.vue';\nimport SkeletonLoader from '@/components/dashboard/SkeletonLoader.vue';\nimport FileCard from '@/components/dashboard/FileCard.vue';\nimport FolderCard from '@/components/dashboard/FolderCard.vue';\nimport MoveFileDialog from '@/components/dashboard/MoveFileDialog.vue';\nimport FileListItem from '@/components/dashboard/FileListItem.vue';\nimport FileDetailDialog from '@/components/dashboard/FileDetailDialog.vue';\nimport BatchActionBar from '@/components/dashboard/BatchActionBar.vue';\nimport MobileActionSheet from '@/components/dashboard/MobileActionSheet.vue';\nimport MobileDirectoryDrawer from '@/components/dashboard/MobileDirectoryDrawer.vue';\nimport FilterDropdown from '@/components/dashboard/FilterDropdown.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nimport { fileManager } from '@/utils/fileManager';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFolderPath } from '@/utils/pathValidator';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport { ref } from 'vue';\nimport { useDragSelect } from '@/utils/dashboard/useDragSelect.js';\nexport default {\n name: 'AdminDashBoard',\n mixins: [backgroundManager],\n data() {\n return {\n Number: 0,\n directFileCount: 0,\n // 当前目录直接子文件数量\n directFolderCount: 0,\n // 当前目录直接子文件夹数量\n showLogoutButton: false,\n tableData: [],\n tempSearch: '',\n search: '',\n searchKeywords: '',\n // Keywords only (without tag filters) for backend search\n searchIncludeTags: '',\n // 包含的标签,逗号分隔\n searchExcludeTags: '',\n // 排除的标签,逗号分隔\n isSearchMode: false,\n currentPage: 1,\n pageSize: 15,\n selectedFiles: [],\n sortOption: 'dateDesc',\n isUploading: false,\n showdetailDialog: false,\n detailFile: null,\n activeUrlTab: 'originUrl',\n defaultUrlFormat: 'originUrl',\n showUrlDialog: false,\n useCustomUrl: 'false',\n // 是否启用自定义链接\n customUrlPrefix: '',\n // 自定义链接前缀\n loading: false,\n // 加载状态\n currentPath: '',\n // 当前文件夹路径\n refreshLoading: false,\n showTagDialog: false,\n // 标签管理对话框\n showBatchTagDialog: false,\n // 批量标签管理对话框\n currentTagFile: '',\n // 当前标签管理的文件\n viewMode: 'card',\n // 视图模式:card 或 list\n showMobileActionModal: false,\n // 移动端操作模态框\n mobileActionFile: null,\n // 当前移动端操作的文件\n mobileActionIndex: -1,\n // 当前移动端操作的文件索引\n mobileActionIsFolder: false,\n // 是否为文件夹操作\n longPressTimer: null,\n // 长按计时器\n showMobileDirectoryDrawer: false,\n // 移动端目录抽屉\n jumpPage: '',\n // 跳转页码输入\n // 筛选相关状态(数组形式支持多选)\n filters: {\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'None'\n label: [],\n // 审查结果: 'normal', 'teen', 'adult'\n fileType: [],\n // 文件类型: 'image', 'video', 'audio', 'other'\n channel: [],\n // 渠道类型: 'TelegramNew', 'CloudflareR2', 'S3', 'Discord', 'HuggingFace', 'WebDAV', 'External'\n channelName: [] // 渠道名称: 动态获取\n },\n channelNameOptions: [],\n // 动态从文件列表中提取\n // 移动文件对话框相关状态\n showMoveDialog: false,\n // 移动文件对话框\n moveTargetPath: '/',\n // 移动目标路径\n moveFileKey: '',\n // 当前移动的文件key\n moveFileIndex: -1,\n // 当前移动的文件索引\n isBatchMove: false // 是否为批量移动\n };\n },\n components: {\n DashboardTabs,\n TagManagementDialog,\n BatchTagDialog,\n SkeletonLoader,\n FileCard,\n FolderCard,\n FileListItem,\n FileDetailDialog,\n BatchActionBar,\n MobileActionSheet,\n MobileDirectoryDrawer,\n FilterDropdown,\n MoveFileDialog,\n LanguageSwitcher\n },\n setup() {\n const cardContainerRef = ref(null);\n const listContainerRef = ref(null);\n const viewModeRef = ref('card');\n const itemsRef = ref([]);\n const {\n isDragging,\n selectionRect\n } = useDragSelect({\n modes: {\n card: {\n containerRef: cardContainerRef,\n itemSelector: '.img-card'\n },\n list: {\n containerRef: listContainerRef,\n itemSelector: '.list-item'\n }\n },\n viewMode: viewModeRef,\n items: itemsRef\n });\n return {\n cardContainerRef,\n listContainerRef,\n viewModeRef,\n itemsRef,\n isDragging,\n selectionRect\n };\n },\n computed: {\n ...mapGetters(['adminUrlSettings', 'userConfig']),\n filteredTableData() {\n return this.tableData;\n },\n totalPages() {\n return Math.ceil(this.filteredTableData.length / this.pageSize) || 1;\n },\n // 基于当前文件夹直接子文件和子文件夹数量计算的真实总页数\n realTotalPages() {\n const total = this.directFolderCount + this.directFileCount;\n return Math.ceil(total / this.pageSize) || 1;\n },\n // 计算当前激活的筛选条件数量(数组形式)\n activeFilterCount() {\n return Object.values(this.filters).reduce((count, arr) => count + (Array.isArray(arr) ? arr.length : 0), 0);\n },\n // 判断是否处于搜索或筛选模式\n hasSearchOrFilter() {\n return this.isSearchMode || this.activeFilterCount > 0;\n },\n paginatedTableData() {\n const sortedData = this.sortData(this.filteredTableData);\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n let data = sortedData.slice(start, end);\n // 增加previewSrcList属性,用于预览图片\n const fullList = data.filter(file => this.isImage(file)).map(file => this.getFileLink(file.name));\n data.forEach(file => {\n if (this.isImage(file)) {\n // 重新排序,索引大于等于当前索引的元素在前,否则在后\n file.previewSrcList = fullList.slice(fullList.indexOf(this.getFileLink(file.name))).concat(fullList.slice(0, fullList.indexOf(this.getFileLink(file.name))));\n }\n });\n // 增加channelTag属性,用于显示渠道信息\n data.forEach(file => {\n if (file.metadata?.Channel === 'TelegramNew' || file.metadata?.Channel === 'Telegram') {\n file.channelTag = 'TG';\n } else if (file.metadata?.Channel === 'CloudflareR2') {\n file.channelTag = 'R2';\n } else if (file.metadata?.Channel === 'S3') {\n file.channelTag = 'S3';\n } else if (file.metadata?.Channel === 'Discord') {\n file.channelTag = 'DC';\n } else if (file.metadata?.Channel === 'HuggingFace') {\n file.channelTag = 'HF';\n } else if (file.metadata?.Channel === 'WebDAV') {\n file.channelTag = 'WD';\n } else if (file.metadata?.Channel === 'External') {\n file.channelTag = this.$t('dashboard.externalTag');\n } else {\n file.channelTag = this.$t('dashboard.unknownTag');\n }\n });\n return data;\n },\n sortIcon() {\n return this.sortOption === 'dateDesc' ? 'sort-amount-down' : 'sort-alpha-up';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n detailDialogWidth() {\n return window.innerWidth > 768 ? '70%' : '90%';\n },\n accessType() {\n if (this.detailFile?.metadata?.ListType === 'White') {\n return this.$t('filter.normal');\n } else if (this.detailFile?.metadata?.ListType === 'Block' || this.detailFile?.metadata?.Label === 'adult') {\n return this.$t('filter.blocked');\n } else {\n return this.$t('filter.normal');\n }\n },\n allUrl() {\n // 外链图片均采用外链\n if (this.detailFile?.metadata?.Channel === 'External') {\n return {\n 'originUrl': `${this.detailFile?.metadata?.ExternalLink}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n } else {\n return {\n 'originUrl': `${this.rootUrl}${this.detailFile?.name}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.rootUrl}${this.detailFile?.name}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n }\n },\n tableColumnNum() {\n return window.innerWidth > 768 ? 3 : 1;\n },\n tablePreviewSpan() {\n return window.innerWidth > 768 ? 2 : 1;\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n selectPage() {\n // 如果当前页所有文件都被选中,则返回 true,否则返回 false\n return this.paginatedTableData.every(file => file.selected);\n },\n selectedPageFiles() {\n // 如果当前页有文件被选中,则返回 true,否则返回 false\n return this.paginatedTableData.some(file => file.selected);\n },\n selectPageIcon() {\n // 全选为 true 时,返回 check-square;部分选中为 minus-square;全不选为 square\n return this.selectPage ? 'check-square' : this.selectedPageFiles ? 'minus-square' : 'square';\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.userConfig?.urlPrefix || `${document.location.origin}/file/`;\n },\n isSelectAll: {\n get() {\n return this.paginatedTableData.length > 0 && this.paginatedTableData.every(file => file.selected);\n },\n set(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n }\n },\n isIndeterminate() {\n const selectedCount = this.paginatedTableData.filter(file => file.selected).length;\n return selectedCount > 0 && selectedCount < this.paginatedTableData.length;\n },\n pagerCount() {\n return window.innerWidth < 768 ? 5 : 7;\n }\n },\n watch: {\n // Sync viewMode data property to the ref used by useDragSelect\n viewMode: {\n handler(newVal) {\n this.viewModeRef = newVal;\n },\n immediate: true\n },\n // Sync paginatedTableData computed property to the ref used by useDragSelect\n paginatedTableData: {\n handler(newVal) {\n this.itemsRef = newVal;\n },\n immediate: true\n },\n tableData: {\n handler(newData) {\n // selectedFiles 增加 newData中新选中,不包含在 selectedFiles 中的文件\n this.selectedFiles = this.selectedFiles.concat(newData.filter(file => file.selected && !this.selectedFiles.includes(file)));\n // selectedFiles 删掉 newData 中已取消选中的文件\n this.selectedFiles = this.selectedFiles.filter(file => file.selected);\n // selectedFiles 删掉 tableData 中已删除的文件\n this.selectedFiles = this.selectedFiles.filter(file => newData.includes(file));\n },\n deep: true\n },\n sortOption(newOption) {\n localStorage.setItem('sortOption', newOption);\n },\n defaultUrlFormat(newFormat) {\n localStorage.setItem('defaultUrlFormat', newFormat);\n },\n showdetailDialog(newVal) {\n if (newVal) {\n this.activeUrlTab = this.defaultUrlFormat || 'originUrl';\n }\n },\n customUrlPrefix(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n currentPath(val) {\n // 页面切换时,取消选择的内容\n this.tableData.forEach(file => file.selected = false);\n }\n },\n methods: {\n // 切换视图模式\n toggleViewMode() {\n this.viewMode = this.viewMode === 'card' ? 'list' : 'card';\n localStorage.setItem('viewMode', this.viewMode);\n },\n // 列表视图全选当前页\n handleSelectAllPage(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n },\n // 移动端长按开始\n handleTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = false;\n this.showMobileActionModal = true;\n }, 500); // 500ms 长按触发\n },\n // 移动端长按结束/取消\n handleTouchEnd() {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n },\n // 文件夹长按开始\n handleFolderTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = true;\n this.showMobileActionModal = true;\n }, 500);\n },\n // 处理移动端操作\n handleMobileAction(action) {\n const file = this.mobileActionFile;\n const index = this.mobileActionIndex;\n this.showMobileActionModal = false;\n if (!file) return;\n switch (action) {\n case 'detail':\n this.openDetailDialog(index, file.name);\n break;\n case 'copy':\n this.handleCopy(index, file.name);\n break;\n case 'folderCopy':\n this.handleFolderCopy(file.name);\n break;\n case 'download':\n this.handleDownload(file.name);\n break;\n case 'move':\n this.handleMove(index, file.name);\n break;\n case 'delete':\n this.handleDelete(index, file.name);\n break;\n case 'tag':\n this.handleTagManagement(file.name);\n break;\n }\n },\n // 返回上一级目录\n handleGoBack() {\n const pathParts = this.currentPath.split('/').filter(Boolean);\n if (pathParts.length > 0) {\n pathParts.pop();\n const parentPath = pathParts.join('/');\n this.navigateToFolder(parentPath);\n }\n this.showMobileDirectoryDrawer = false;\n },\n // 获取标签颜色\n getTagColor(index) {\n const colors = ['linear-gradient(135deg, #667eea 0%, #764ba2 100%)', 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)', 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)', 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)', 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'];\n return colors[index % colors.length];\n },\n // 视频hover播放控制\n handleVideoHover(event, isEnter) {\n const video = event.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n },\n // 格式化文件大小\n formatFileSize(bytes) {\n if (!bytes || bytes === 0) return '-';\n bytes = Number(bytes);\n if (isNaN(bytes)) return '-';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n while (bytes >= 1024 && i < units.length - 1) {\n bytes /= 1024;\n i++;\n }\n return bytes.toFixed(i > 0 ? 1 : 0) + ' ' + units[i];\n },\n handleSearch() {\n this.search = this.tempSearch;\n this.isSearchMode = this.search.trim() !== '';\n this.currentPage = 1; // 重置到第一页\n\n // 解析搜索字符串,提取标签和关键字\n // 支持 #tag 表示包含标签,-#tag 表示排除标签\n if (this.search && this.search.trim()) {\n const includeTags = [];\n const excludeTags = [];\n\n // 匹配 -#tag 和 #tag\n let searchText = this.search;\n\n // 先匹配排除标签 -#tag\n const excludeTagRegex = /-#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(excludeTagRegex, (match, tag) => {\n excludeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 再匹配包含标签 #tag\n const includeTagRegex = /#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(includeTagRegex, (match, tag) => {\n includeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 清理剩余的关键字(去除多余空格)\n this.searchKeywords = searchText.replace(/\\s+/g, ' ').trim();\n\n // 构建标签查询字符串\n this.searchIncludeTags = includeTags.join(',');\n this.searchExcludeTags = excludeTags.join(',');\n console.log('Search keywords:', this.searchKeywords);\n console.log('Include tags:', this.searchIncludeTags);\n console.log('Exclude tags:', this.searchExcludeTags);\n } else {\n this.searchKeywords = '';\n this.searchIncludeTags = '';\n this.searchExcludeTags = '';\n }\n this.refreshFileList();\n },\n // 处理筛选变化(来自 FilterDropdown 组件)\n handleFilterChange({\n type,\n filters\n }) {\n this.filters = filters;\n this.currentPage = 1; // 重置到第一页\n this.refreshFileList();\n },\n // 清除所有筛选条件\n clearFilters() {\n this.filters = {\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.currentPage = 1;\n this.refreshFileList();\n },\n // 从 API 获取所有渠道名称\n async extractChannelNames() {\n try {\n const response = await fetchWithAuth('/api/channels?includeDisabled=true', {\n method: 'GET'\n });\n if (response.ok) {\n const channels = await response.json();\n const channelOptions = [];\n\n // 类型映射(显示名称)\n const typeLabels = {\n telegram: 'Telegram',\n cfr2: 'Cloudflare R2',\n s3: 'S3',\n discord: 'Discord',\n huggingface: 'HuggingFace',\n webdav: 'WebDAV'\n };\n\n // 按类型提取渠道名称,channel.type是类型内部存储名称(可能根据版本有变化),type是类型对外名称\n Object.entries(channels).forEach(([type, channelList]) => {\n if (Array.isArray(channelList) && channelList.length > 0) {\n channelList.forEach(channel => {\n if (channel.name) {\n channelOptions.push({\n name: channel.name,\n type: channel.type,\n typeLabel: typeLabels[type] || type,\n // 使用 channel.type:channel.name 作为唯一标识\n value: `${channel.type}:${channel.name}`\n });\n }\n });\n }\n });\n\n // 按类型和名称排序\n channelOptions.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type.localeCompare(b.type);\n }\n return a.name.localeCompare(b.name);\n });\n this.channelNameOptions = channelOptions;\n }\n } catch (error) {\n console.error('Failed to fetch channel names:', error);\n }\n },\n handleDownload(key) {\n const link = document.createElement('a');\n link.href = this.getFileLink(key);\n link.download = key;\n link.click();\n },\n openDetailDialog(index, key) {\n this.detailFile = this.paginatedTableData[index];\n this.showdetailDialog = true;\n },\n handleTabClick(tab) {\n this.activeUrlTab = tab.props.name;\n },\n handleUrlClick(event) {\n // 复制到剪贴板\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('dashboard.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('dashboard.copyFailed')\n });\n });\n },\n handleDetailDelete(key) {\n this.$confirm(this.$t('dashboard.deleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n this.showdetailDialog = false;\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBlock(key) {\n this.$confirm(this.$t('dashboard.blockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/block/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.blockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.blockFailed')));\n }).catch(() => console.log('Block cancelled'));\n },\n handleWhite(key) {\n this.$confirm(this.$t('dashboard.whiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/white/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.whiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.whiteFailed')));\n }).catch(() => console.log('White cancelled'));\n },\n handleDelete(index, key) {\n // 判断是否为文件夹\n const isFolder = this.tableData.find(file => file.name === key).isFolder;\n this.$confirm(isFolder ? this.$t('dashboard.deleteFolderConfirm') : this.$t('dashboard.deleteFileConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}?folder=${isFolder}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n fileManager.removeFile(key);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBatchDelete() {\n this.$confirm(this.$t('dashboard.batchDeleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/delete/${file.name}?folder=${isFolder}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n fileManager.removeFile(this.selectedFiles[index].name);\n }\n });\n this.selectedFiles = [];\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.batchDeleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchDeleteFailed')));\n }).catch(() => console.log('Batch delete cancelled'));\n },\n async handleBatchCopy() {\n // 分离文件和文件夹\n const files = this.selectedFiles.filter(item => !item.isFolder);\n const folders = this.selectedFiles.filter(item => item.isFolder);\n\n // 如果有文件夹,显示加载状态\n let loading = null;\n if (folders.length > 0) {\n loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n }\n try {\n // 收集所有文件(包括文件夹内的文件)\n let allFiles = [...files];\n\n // 递归获取所有文件夹内的文件\n for (const folder of folders) {\n try {\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folder.name)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n if (data.files && data.files.length > 0) {\n allFiles = allFiles.concat(data.files);\n }\n } catch (error) {\n console.error(`获取文件夹 ${folder.name} 内容失败:`, error);\n }\n }\n if (loading) loading.close();\n if (allFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 生成所有链接\n const links = allFiles.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.batchCopySuccess', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n }\n } catch (error) {\n if (loading) loading.close();\n console.error('Batch copy failed:', error);\n this.$message.error(this.$t('dashboard.batchCopyFailed'));\n }\n },\n copyToClipboardFallback(text) {\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n textarea.style.position = 'fixed';\n textarea.style.clip = 'rect(0 0 0 0)';\n textarea.style.top = '10px';\n textarea.value = text;\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n this.$message.success(this.$t('dashboard.batchCopyLinksSuccess'));\n },\n handleCopy(index, key) {\n let text = '';\n if (this.paginatedTableData[index].metadata?.Channel === 'External') {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = this.paginatedTableData[index].metadata?.ExternalLink;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.paginatedTableData[index].metadata?.ExternalLink})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.paginatedTableData[index].metadata?.ExternalLink}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n } else {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = `${this.rootUrl}${key}`;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.rootUrl}${key})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.rootUrl}${key}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n }\n navigator.clipboard ? navigator.clipboard.writeText(text).then(() => this.$message.success(this.$t('dashboard.copyFileLinkSuccess'))) : this.copyToClipboardFallback(text);\n },\n async loadMoreData() {\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, 60, this.filters);\n // 获取新的文件列表后\n await this.fetchFileList();\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadMoreFailed'));\n } finally {\n this.loading = false;\n }\n },\n updateStats(num, init = false) {\n if (init) {\n this.Number = num;\n } else {\n this.Number += num;\n }\n },\n sort(command) {\n this.sortOption = command;\n },\n sortData(data) {\n // 文件夹始终在前\n const folders = data.filter(file => file.isFolder);\n const files = data.filter(file => !file.isFolder);\n if (this.sortOption === 'dateDesc') {\n // 按时间降序\n folders.sort((a, b) => new Date(b.metadata?.TimeStamp) - new Date(a.metadata?.TimeStamp));\n files.sort((a, b) => new Date(b.metadata?.TimeStamp) - new Date(a.metadata?.TimeStamp));\n } else {\n // 按文件名升序\n folders.sort((a, b) => a.name.localeCompare(b.name));\n files.sort((a, b) => a.name.localeCompare(b.name));\n }\n return folders.concat(files);\n },\n handleVideoClick(event) {\n const videoElement = event.target;\n if (videoElement.requestFullscreen) {\n videoElement.requestFullscreen();\n } else if (videoElement.webkitRequestFullscreen) {\n // Safari/Old Chrome\n videoElement.webkitRequestFullscreen();\n } else if (videoElement.mozRequestFullScreen) {\n // Firefox\n videoElement.mozRequestFullScreen();\n } else if (videoElement.msRequestFullscreen) {\n // IE/Edge\n videoElement.msRequestFullscreen();\n }\n },\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n handleSelectPage() {\n if (this.selectPage) {\n this.paginatedTableData.forEach(file => file.selected = false);\n } else {\n this.paginatedTableData.forEach(file => file.selected = true);\n }\n },\n clearSelection() {\n this.tableData.forEach(file => file.selected = false);\n this.selectedFiles = [];\n },\n handleBatchAction(command) {\n if (command === 'copy') {\n this.handleBatchCopy();\n } else if (command === 'delete') {\n this.handleBatchDelete();\n } else if (command === 'download') {\n this.handleBatchDownload();\n } else if (command === 'move') {\n this.handleBatchMove();\n } else if (command === 'tagManagement') {\n this.handleBatchTagManagement();\n } else if (command === 'ban') {\n this.handleBatchBlock();\n } else if (command === 'white') {\n this.handleBatchWhite();\n }\n },\n handleMove(index, key) {\n // 打开自定义移动对话框\n this.moveFileKey = key;\n this.moveFileIndex = index;\n this.isBatchMove = false;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n handleBatchMove() {\n // 打开自定义移动对话框(批量模式)\n this.isBatchMove = true;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n // 确认移动操作\n confirmMove(targetPath) {\n const value = targetPath;\n // 使用共享验证器验证路径\n const validation = validateFolderPath(value);\n if (!validation.valid) {\n this.$message.error(validation.error);\n return;\n }\n // 去掉开头的 /,结尾若没有 /,则加上\n const newPath = value.replace(/^\\/+/, '') + (value.endsWith('/') ? '' : value === '' ? '' : '/');\n // 判断目标文件夹是否是当前文件夹\n if (newPath === this.currentPath) {\n this.$message.warning(this.$t('dashboard.moveTargetSameAsCurrent'));\n return;\n }\n\n // 关闭对话框\n this.showMoveDialog = false;\n if (this.isBatchMove) {\n // 批量移动\n this.executeBatchMove(newPath);\n } else {\n // 单个文件移动\n this.executeSingleMove(newPath);\n }\n },\n // 执行单个文件移动\n executeSingleMove(newPath) {\n const key = this.moveFileKey;\n const isFolder = this.tableData.find(file => file.name === key)?.isFolder;\n fetchWithAuth(`/api/manage/move/${key}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + key.split('/').pop();\n fileManager.moveFile(key, newKey, isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n }\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n // 执行批量移动\n executeBatchMove(newPath) {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/move/${file.name}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const file = this.selectedFiles[index];\n file.selected = false;\n const fileIndex = this.tableData.findIndex(f => f.name === file.name);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + file.name.split('/').pop();\n fileManager.moveFile(file.name, newKey, file.isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n }\n }\n });\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n handleBatchBlock() {\n this.$confirm(this.$t('dashboard.batchBlockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/block/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchBlockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchBlockFailed')));\n }).catch(() => console.log('Batch block cancelled'));\n },\n handleBatchWhite() {\n this.$confirm(this.$t('dashboard.batchWhiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/white/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchWhiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchWhiteFailed')));\n }).catch(() => console.log('Batch white cancelled'));\n },\n handleBatchDownload() {\n // 将选中文件打包成 zip 文件下载\n const zip = new JSZip();\n const folder = zip.folder('files');\n // 构造Promise数组,等待所有文件下载完成后再打包\n const fileNameCount = {}; // 用于跟踪文件名出现的次数\n\n const downloadPromises = this.selectedFiles.map(async file => {\n // 跳过文件夹\n if (file.isFolder) {\n return;\n }\n const response = await fetch(this.getFileLink(file.name));\n const blob = await response.blob();\n // 检查文件名是否已经存在\n let fileName = file.metadata?.FileName || file.name;\n if (fileNameCount[fileName]) {\n // 如果已经存在,则在文件名后加上编号\n const extension = fileName.substring(fileName.lastIndexOf('.'));\n const baseName = fileName.substring(0, fileName.lastIndexOf('.'));\n fileName = `${baseName}(${fileNameCount[fileName]})${extension}`;\n fileNameCount[file.name]++;\n } else {\n // 如果不存在,则初始化为1\n fileNameCount[fileName] = 1;\n }\n // 将文件添加到 zip 文件夹中\n folder.file(fileName, blob);\n });\n Promise.all(downloadPromises).then(() => zip.generateAsync({\n type: 'blob'\n })).then(blob => {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = 'files.zip';\n link.click();\n });\n },\n isVideo(file) {\n // 排除音频文件\n if (this.isAudio(file)) return false;\n let flag = file.metadata?.FileType?.includes('video');\n // 用文件名后缀判断是否为视频文件\n if (!flag) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'rmvb', '3gp', 'mpg', 'mpeg', 'm4v', 'f4v', 'rm', 'asf', 'dat', 'ts', 'vob', 'swf', 'divx', 'xvid', 'm2ts', 'mts', 'm2v', '3g2', '3gp2', '3gpp', '3gpp2', 'mpe', 'm1v', 'mpv', 'mpv2', 'mp2v', 'm2t', 'm2ts', 'm2v', 'm4v'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = videoExtensions.includes(extension);\n }\n return flag;\n },\n isAudio(file) {\n let flag = file.metadata?.FileType?.includes('audio');\n // 用文件名后缀判断是否为音频文件\n if (!flag) {\n const audioExtensions = ['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma', 'm4a', 'ape', 'aiff', 'alac', 'opus', 'mid', 'midi', 'm4b', 'm4p', 'm4r', 'amr', 'au', 'ra', 'ram'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = audioExtensions.includes(extension);\n }\n return flag;\n },\n isImage(file) {\n let flag = file.metadata?.FileType?.includes('image');\n // 用文件名后缀判断是否为图片文件\n if (!flag) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'psd', 'ai', 'eps', 'raw', 'cr2', 'nef', 'orf', 'sr2', 'dng', 'arw', 'rw2', 'raf', 'pef', 'x3f', 'srf', 'erf', 'mrw', 'nrw', 'kdc', 'dcr', 'mef', 'mos', 'crw', 'raf', 'rwl', 'srw', '3fr', 'fff', 'iiq', 'qtk', 'bay', 'k25', 'kdc', 'dcs', 'drf', 'dng', 'erf', 'kdc', 'mdc', 'mef', 'mos', 'mrw', 'nef', 'nrw', 'orf', 'pef', 'ptx', 'pxn', 'r3d', 'raf', 'raw', 'rwl', 'rw2', 'rwz', 'sr2', 'srf', 'x3f'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = imageExtensions.includes(extension);\n }\n return flag;\n },\n getFileLink(filename) {\n const fileLink = process.env.NODE_ENV === 'production' ? `/file/${filename}?from=admin` : `/api/file/${filename}?from=admin`;\n return fileLink;\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (this.currentPage === Math.ceil(this.tableData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n // 跳转到指定页码\n handleJumpPage() {\n const page = parseInt(this.jumpPage);\n if (isNaN(page) || page < 1) {\n this.$message.warning(this.$t('dashboard.invalidPageNumber'));\n return;\n }\n if (page > this.realTotalPages) {\n this.$message.warning(this.$t('dashboard.pageExceedsMax', {\n max: this.realTotalPages\n }));\n return;\n }\n // 如果目标页超过当前已加载的页数,需要先加载更多数据\n if (page > this.totalPages) {\n this.$message.info(this.$t('dashboard.loadingData'));\n this.loadMoreDataUntilPage(page);\n } else {\n this.currentPage = page;\n }\n this.jumpPage = '';\n },\n // 加载数据直到指定页\n async loadMoreDataUntilPage(targetPage) {\n this.loading = true;\n try {\n // 计算目标页需要的文件数量(不包含文件夹)\n // 目标页最后一个项目的索引 = targetPage * pageSize\n // 需要的文件数 = 目标索引 - 已有文件夹数量\n const targetIndex = targetPage * this.pageSize;\n const currentFolderCount = this.filteredTableData.filter(item => item.isFolder).length;\n const currentFileCount = this.filteredTableData.filter(item => !item.isFolder).length;\n\n // 需要加载的文件数量 = 目标位置需要的文件数 - 当前已加载的文件数\n const neededFileCount = Math.max(0, targetIndex - currentFolderCount - currentFileCount);\n if (neededFileCount > 0) {\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, neededFileCount, this.filters);\n await this.fetchFileList();\n }\n this.currentPage = Math.min(targetPage, this.totalPages);\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadDataFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 判断是否为文件夹\n isFolder(item) {\n // 如果是已经标记为文件夹的项目,直接返回true\n if (item.isFolder) {\n return true;\n }\n\n // 获取真实的文件路径(去除URL前缀)\n let path = item.name;\n if (path.startsWith('http')) {\n path = path.split('/file/')[1];\n }\n\n // 如果文件名包含'/',需要判断是否是当前路径下的文件\n if (path && path.includes('/')) {\n // 获取相对于当前路径的部分\n const relativePath = this.currentPath ? path.substring(this.currentPath.length) : path;\n\n // 如果在根目录,第一个斜杠前的部分就是文件夹\n if (this.currentPath === '') {\n return !path.split('/')[0].includes('.');\n }\n\n // 如果在子文件夹中,检查相对路径是否还包含其他文件夹\n return relativePath.includes('/');\n }\n return false;\n },\n // 获取文件夹名称\n getFolderName(path) {\n let folderName = '';\n // 如果是文件夹路径,只返回最后一级文件夹名\n if (path && path.includes('/')) {\n const parts = path.split('/');\n // 如果是根目录下的文件夹\n if (this.currentPath === '') {\n folderName = parts[0];\n } else {\n // 如果是子文件夹\n const relativePath = path.substring(this.currentPath.length);\n folderName = relativePath.split('/')[0];\n }\n } else {\n folderName = path;\n }\n const maxLength = 20; // Adjust max length as needed\n if (folderName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${folderName.substring(0, startLength)}...${folderName.substring(folderName.length - endLength)}`;\n }\n return folderName;\n },\n // 获取文件名称(去除路径和URL前缀)\n getFileName(path) {\n let fileName = path.split('/').pop();\n const maxLength = 20; // Adjust max length as needed, ensure it fits in one line\n if (fileName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${fileName.substring(0, startLength)}...${fileName.substring(fileName.length - endLength)}`;\n }\n return fileName;\n },\n // 获取文件名前半部分(用于中间省略效果)\n getFileNameStart(name) {\n if (!name) return '';\n // 如果文件名较短,返回全部\n if (name.length <= 30) return name;\n // 保留开头部分(约60%的长度用于显示前半部分)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回文件名主体部分\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(baseName.length, Math.floor(name.length * 0.6));\n return baseName.substring(0, keepLength);\n }\n // 无扩展名的情况\n return name.substring(0, Math.floor(name.length * 0.6));\n },\n // 获取文件名后半部分(用于中间省略效果)\n getFileNameEnd(name) {\n if (!name) return '';\n // 如果文件名较短,返回空\n if (name.length <= 30) return '';\n // 保留末尾部分(包含扩展名)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回最后几个字符 + 扩展名\n const ext = name.substring(dotIndex);\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(8, Math.floor(baseName.length * 0.2));\n return '…' + baseName.substring(baseName.length - keepLength) + ext;\n }\n // 无扩展名的情况\n const keepLength = Math.min(10, Math.floor(name.length * 0.3));\n return '…' + name.substring(name.length - keepLength);\n },\n // 进入文件夹\n enterFolder(folderPath) {\n // 确保路径末尾有 '/'\n this.currentPath = folderPath + (folderPath.endsWith('/') ? '' : '/');\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 导航到指定文件夹\n navigateToFolder(path) {\n // 确保空路径时不添加 '/'\n this.currentPath = path ? path + (path.endsWith('/') ? '' : '/') : '';\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 获取文件列表\n async fetchFileList() {\n this.loading = true;\n try {\n // 从本地存储获取数据\n const data = fileManager.getLocalFileList();\n\n // 解析返回的数据\n const folders = new Set(data.directories || []);\n const files = data.files || [];\n\n // 处理文件夹数据\n const folderItems = Array.from(folders).map(folder => ({\n name: folder,\n isFolder: true,\n selected: false,\n metadata: {\n FileName: folder.split('/').pop()\n }\n }));\n\n // 处理文件数据\n const fileItems = files.map(file => ({\n name: file.name,\n isFolder: false,\n selected: false,\n metadata: file.metadata\n }));\n\n // 更新表格数据\n this.tableData = [...folderItems, ...fileItems];\n\n // 更新统计信息\n this.updateStats(data.totalCount, true);\n\n // 更新直接文件和文件夹数量\n this.directFileCount = data.directFileCount || 0;\n this.directFolderCount = data.directFolderCount || 0;\n } catch (error) {\n console.error('Error fetching file list:', error);\n this.$message.error(this.$t('dashboard.fetchFileListFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 刷新文件列表\n async refreshFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n const success = await fileManager.refreshFileList(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, this.filters);\n if (success) {\n await this.fetchFileList();\n } else {\n throw new Error('Refresh failed');\n }\n } catch (error) {\n // 认证失败由 fetchWithAuth 统一处理跳转,不重复提示\n if (!error.message?.includes('Unauthorized') && this.$store.state.adminLoggedIn) {\n console.error('Error refreshing file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n }\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // 刷新本地文件列表\n async refreshLocalFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n await this.fetchFileList();\n } catch (error) {\n console.error('Error refreshing local file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // Tag management methods\n handleTagManagement(fileId) {\n this.currentTagFile = fileId;\n this.showTagDialog = true;\n },\n handleBatchTagManagement() {\n if (this.selectedFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.selectFilesFirst'));\n return;\n }\n this.showBatchTagDialog = true;\n },\n async handleTagsUpdated(tags) {\n // 更新本地文件数据中的标签\n const fileIndex = this.tableData.findIndex(file => file.name === this.currentTagFile);\n if (fileIndex !== -1) {\n // 更新 tableData 中的标签\n if (!this.tableData[fileIndex].metadata) {\n this.tableData[fileIndex].metadata = {};\n }\n this.tableData[fileIndex].metadata.Tags = tags;\n\n // 如果详情对话框正在显示这个文件,也更新详情数据\n if (this.showdetailDialog && this.detailFile?.name === this.currentTagFile) {\n if (!this.detailFile.metadata) {\n this.detailFile.metadata = {};\n }\n this.detailFile.metadata.Tags = tags;\n }\n }\n },\n async handleBatchTagsUpdated() {\n // 刷新文件列表以显示更新后的标签\n await this.refreshLocalFileList();\n },\n handleMetadataUpdated(fileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === fileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 如果 detailFile 正在显示该文件,同步更新 detailFile\n if (this.detailFile && this.detailFile.name === fileId) {\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n }\n },\n handleFileRenamed(oldFileId, newFileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 name(File_ID)和 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === oldFileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].name = newFileId;\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 更新 detailFile 引用并关闭/重新打开详情弹窗以刷新链接\n if (this.detailFile && this.detailFile.name === oldFileId) {\n this.detailFile.name = newFileId;\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n // 关闭详情弹窗,然后在下一个 tick 重新打开以刷新所有链接\n this.showdetailDialog = false;\n this.$nextTick(() => {\n this.showdetailDialog = true;\n });\n }\n },\n // 生成单个文件链接\n generateFileLink(key, metadata) {\n const isExternal = metadata?.Channel === 'External';\n const baseUrl = isExternal ? metadata?.ExternalLink : `${this.rootUrl}${key}`;\n const fileName = metadata?.FileName || key;\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n return baseUrl;\n case 'mdUrl':\n return `![${fileName}](${baseUrl})`;\n case 'htmlUrl':\n return `\"${fileName}\"`;\n case 'bbUrl':\n return `[img]${baseUrl}[/img]`;\n case 'tgId':\n return metadata?.TgFileId || '';\n case 's3Location':\n return metadata?.S3Location || '';\n default:\n return baseUrl;\n }\n },\n // 复制文件夹中所有文件的链接\n async handleFolderCopy(folderName) {\n // 显示加载状态\n const loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n try {\n // 调用 list API 递归获取文件夹内所有文件\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folderName)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n loading.close();\n if (!data.files || data.files.length === 0) {\n this.$message.warning(this.$t('dashboard.folderEmptyNoLinks'));\n return;\n }\n\n // 根据当前链接格式生成所有文件链接\n const links = data.files.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n }\n } catch (error) {\n loading.close();\n console.error('Copy folder links failed:', error);\n this.$message.error(this.$t('dashboard.copyFolderLinksFailed'));\n }\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.loading = true;\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n // 首次加载时刷新文件列表\n this.refreshFileList().then(() => {\n // 获取所有渠道名称\n return this.extractChannelNames();\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('dashboard.syncDataError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n\n // 读取自定义链接设置项\n this.customUrlPrefix = this.adminUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.adminUrlSettings.useCustomUrl;\n\n // 恢复视图模式偏好\n const savedViewMode = localStorage.getItem('viewMode');\n if (savedViewMode === 'card' || savedViewMode === 'list') {\n this.viewMode = savedViewMode;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminDashBoard.vue?vue&type=template&id=437b7a30&scoped=true\"\nimport script from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\nexport * from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\n\nimport \"./AdminDashBoard.vue?vue&type=style&index=0&id=437b7a30&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-437b7a30\"]])\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__","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","key","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","render","_ctx","_cache","$props","$setup","$data","$options","_component_el_input","_component_font_awesome_icon","_component_el_button","_component_DirectoryTreePicker","_component_el_dialog","_component_el_tree","_component_el_drawer","_directive_loading","isDesktop","modelValue","dialogVisible","$event","title","isBatchMove","$t","width","onClose","handleClose","footer","onClick","default","_","type","loading","handleConfirm","targetPath","placeholder","prepend","currentDirectory","source","onSelect","handleDirectorySelect","trigger","icon","direction","size","showTreePicker","text","treeError","fetchDirectoryTree","ref","data","treeData","props","treeProps","onNodeClick","handleTreeNodeClick","node","path","expanded","name","treeLoading","components","DirectoryTreePicker","Boolean","String","initialPath","emits","windowWidth","window","innerWidth","children","label","computed","get","this","set","val","$emit","watch","newVal","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","methods","response","fetchWithAuth","method","ok","status","json","tree","err","console","error","startsWith","__exports__","to","args","close","active","currentPath","navigate","pathParts","folder","index","length","style","paddingLeft","slice","join","goBack","split","filter","isFolder","handleAction","action","_component_el_tag","_component_el_tab_pane","_component_el_alert","_component_el_tabs","visible","dialogWidth","activeTab","count","fileCount","inputTag","onKeyup","handleAddInputTag","onInput","handleInputChange","clearable","append","showSuggestions","suggestions","tag","selectSuggestion","tagsToAdd","closable","removeFromToAdd","executeAddTags","disabled","commonTags","handleRemoveCommonTag","description","center","handleClearAllTags","selectedFiles","Array","required","debounceTimer","selectedFilesOnly","file","fileIds","map","loadCommonTags","resetData","newTab","tagPromises","encodeURIComponent","responses","Promise","all","allTags","push","tags","every","includes","clearTimeout","trim","setTimeout","fetchSuggestions","prefix","toLowerCase","warning","indexOf","splice","headers","body","JSON","stringify","Error","success","updated","confirm","confirmButtonText","cancelButtonText","then","executeClearTags","catch","info","_component_Loading","_component_el_icon","handleAddTag","currentTags","handleRemoveTag","popularTags","handleAddPopularTag","loadingPopularTags","Loading","fileId","loadFileTags","loadPopularTags","message","_component_el_image","_component_el_descriptions_item","_component_el_descriptions","_component_el_form_item","_component_el_form","isEditing","round","startEdit","openRenameDialog","saveMetadata","editSaving","cancelEdit","onTabClick","handleTabClick","urls","originUrl","readonly","handleUrlClick","mdUrl","htmlUrl","bbUrl","metadata","TgFileId","tgId","S3Location","S3CdnFileUrl","isVideo","src","fileLink","autoplay","muted","loop","openImageLink","isAudio","controls","isImage","fit","lazy","border","column","descColumn","editForm","FileName","FileType","fileSizeDisplay","imageDimensions","Width","Height","orientationIcon","uploadTime","Channel","ChannelName","accessTagType","accessType","Label","UploadIP","UploadAddress","Tags","showRenameDialog","closeRenameDialog","submitRename","renameSaving","renameValidation","valid","onSubmit","renameForm","newFileId","validateRenameInput","INVALID_CHARS","validateFileId","currentFileId","test","Object","fileType","endsWith","TimeStamp","Date","toLocaleString","listType","ListType","height","ratio","sizeBytes","FileSizeBytes","sizeMB","FileSize","toFixed","handleVideoClick","e","video","target","paused","play","pause","input","select","navigator","clipboard","writeText","value","open","result","oldFileId","_component_el_tooltip","selectedCount","content","placement","handleClear","actions","command","className","Number","onTouchstart","onTouchend","onTouchmove","localSelected","toggleSelect","handlePreviewClick","preload","decoding","displayName","fileNameStart","fileNameEnd","item","tagIndex","background","getTagColor","channelTag","uploadDate","selected","tagColors","parts","getFileName","uploaded","toLocaleDateString","_component_el_checkbox","_component_el_card","onChange","videoLoading","videoError","onMouseenter","handleVideoHover","onMouseleave","onFullscreenchange","handleFullscreenChange","onWebkitfullscreenchange","onLoadeddata","onError","handleVideoError","previewSrcList","disableTooltip","fileName","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","isFullscreen","document","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","currentTime","isEnter","folderName","showActions","i","validator","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_component_el_badge","_component_el_checkbox_group","_component_el_dropdown_menu","_component_el_dropdown","dropdown","localFilters","accessStatus","handleFilterChange","accessStatusOptions","option","listTypeOptions","labelOptions","fileTypeOptions","channel","channelOptions","channelNameOptions","channelName","groupedChannelNames","group","typeLabel","channels","clearFilters","activeFilterCount","hidden","filters","values","reduce","arr","groups","forEach","handler","newFilters","isArray","immediate","deep","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_component_DashboardTabs","_component_FilterDropdown","_component_el_dropdown_item","_component_el_header","_component_el_breadcrumb_item","_component_el_breadcrumb","_component_SkeletonLoader","_component_FolderCard","_component_FileCard","_component_FileListItem","_component_el_pagination","_component_el_main","_component_el_container","_component_BatchActionBar","_component_FileDetailDialog","_component_el_radio","_component_el_radio_group","_component_el_switch","_component_TagManagementDialog","_component_BatchTagDialog","_component_MobileActionSheet","_component_MobileDirectoryDrawer","_component_MoveFileDialog","tempSearch","handleSearch","suffix","onCommand","sort","sortIcon","showUrlDialog","viewMode","toggleViewMode","handleLogout","handleSelectPage","selectPageIcon","showMobileDirectoryDrawer","pop","separator","navigateToFolder","isDragging","paginatedTableData","hasSearchOrFilter","isSearchMode","onEnter","enterFolder","onCopy","handleFolderCopy","onMove","handleMove","onDelete","handleDelete","handleFolderTouchStart","handleTouchEnd","getFileLink","onDetail","openDetailDialog","handleCopy","onDownload","handleDownload","handleTouchStart","isSelectAll","isIndeterminate","handleSelectAllPage","onFolderCopy","position","left","selectionRect","top","layout","total","filteredTableData","pageSize","currentPage","pagerCount","onCurrentChange","handlePageChange","refreshFileList","refreshLoading","Math","ceil","loadMoreData","realTotalPages","jumpPage","handleJumpPage","onAction","handleBatchAction","onClear","clearSelection","showdetailDialog","detailFile","allUrl","onTagManagement","handleTagManagement","onBlock","handleBlock","onWhite","handleWhite","handleDetailDelete","onMetadataUpdated","handleMetadataUpdated","onFileRenamed","handleFileRenamed","defaultUrlFormat","useCustomUrl","customUrlPrefix","showTagDialog","currentTagFile","onTagsUpdated","handleTagsUpdated","showBatchTagDialog","handleBatchTagsUpdated","showMobileActionModal","mobileActionIsFolder","getFolderName","mobileActionFile","handleMobileAction","onNavigate","onGoBack","handleGoBack","showMoveDialog","moveTargetPath","onConfirm","confirmMove","FileManager","constructor","FILE_LIST_PATH","fileListCache","storageWarningShown","getLocalFileList","fileList","getMutableFileList","files","directories","localStorage","getItem","parse","createEmptyFileList","updateFileListCache","persisted","persistFileListCache","cacheUpdated","setItem","handleStoragePersistError","warn","removeItem","removeError","ElMessage","i18n","global","t","addFile","newFile","addFolder","moveFile","oldPath","newPath","oldFolderIndex","fileIndex","findIndex","pathArray","substring","newFolder","removeFile","removeFolder","dir","getFilesInFolder","subdirectories","buildFilterParams","params","search","includeTags","excludeTags","url","newFileList","isIndexedResponse","loadMoreFiles","start","moreFiles","fileManager","rectIntersects","rectA","rectB","right","bottom","calcSelectionRect","current","min","x","y","abs","useDragSelect","options","modes","mainSelector","items","startPoint","preSelectSnapshot","isAppendMode","MOBILE_BREAKPOINT","listenerAttached","EDGE_THRESHOLD","SCROLL_SPEED","autoScrollTimer","savedUserSelect","getActiveConfig","mode","toValue","undefined","shouldEnable","syncListenerState","attachContainerListener","cancelDrag","detachContainerListener","isBlankArea","event","mainArea","closest","config","itemEl","itemSelector","container","containerRef","contains","interactive","hasAppendModifier","shiftKey","ctrlKey","metaKey","saveSnapshot","currentItems","lastClientY","startAutoScroll","scrollStep","viewportHeight","innerHeight","scrollDelta","scrollBy","updateSelection","requestAnimationFrame","stopAutoScroll","cancelAnimationFrame","disableTextSelection","userSelect","restoreTextSelection","rect","selRect","itemElements","querySelectorAll","itemRect","getBoundingClientRect","itemBounds","intersects","onMouseDown","button","clientX","clientY","onMouseMove","onMouseUp","currentPoint","_event","onWindowResize","onMounted","onBeforeUnmount","mixins","backgroundManager","directFileCount","directFolderCount","showLogoutButton","tableData","searchKeywords","searchIncludeTags","searchExcludeTags","sortOption","isUploading","activeUrlTab","mobileActionIndex","longPressTimer","moveFileKey","moveFileIndex","DashboardTabs","TagManagementDialog","BatchTagDialog","SkeletonLoader","FileCard","FolderCard","FileListItem","FileDetailDialog","BatchActionBar","MobileActionSheet","MobileDirectoryDrawer","FilterDropdown","MoveFileDialog","LanguageSwitcher","setup","cardContainerRef","listContainerRef","viewModeRef","itemsRef","card","list","totalPages","sortedData","sortData","end","fullList","concat","detailDialogWidth","ExternalLink","rootUrl","tableColumnNum","tablePreviewSpan","selectPage","selectedPageFiles","some","userConfig","urlPrefix","location","origin","newData","newOption","newFormat","$store","commit","parentPath","colors","formatFileSize","bytes","isNaN","units","searchText","excludeTagRegex","replace","match","includeTagRegex","log","extractChannelNames","typeLabels","telegram","cfr2","s3","discord","huggingface","webdav","entries","channelList","a","b","localeCompare","link","createElement","href","download","click","tab","$message","$confirm","reject","updateStats","find","handleBatchDelete","promises","results","successNum","handleBatchCopy","folders","$loading","lock","allFiles","links","generateFileLink","copyToClipboardFallback","textarea","appendChild","clip","execCommand","removeChild","fetchFileList","num","init","videoElement","fetch","credentials","authType","finally","$router","handleBatchDownload","handleBatchMove","handleBatchTagManagement","handleBatchBlock","handleBatchWhite","validation","executeBatchMove","executeSingleMove","newKey","$nextTick","tempData","refreshLocalFileList","f","resolve","zip","fileNameCount","downloadPromises","async","blob","extension","lastIndexOf","baseName","generateAsync","URL","createObjectURL","flag","videoExtensions","audioExtensions","imageExtensions","filename","page","parseInt","max","loadMoreDataUntilPage","targetPage","targetIndex","currentFolderCount","currentFileCount","neededFileCount","relativePath","maxLength","startLength","floor","endLength","getFileNameStart","dotIndex","keepLength","getFileNameEnd","ext","folderPath","Set","folderItems","from","fileItems","totalCount","state","adminLoggedIn","updatedMetadata","isExternal","baseUrl","initializeBackground","adminUrlSettings","savedViewMode","_component_el_popover","popoverVisible","transition","reference","$slots","handleNodeClick","openDrawer","drawerVisible","$refs","treeRef","store","nodesMap","treeRefMobile","setCurrentKey","axios","withAuthCode","module","exports","s","o","h","u","r","l","n","code","call","d","c","p","encode","getTypeOf","charCodeAt","charAt","decode","substr","uint8array","Uint8Array","compressedSize","uncompressedSize","crc32","compression","compressedContent","prototype","getContentWorker","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","level","onData","pako","A","fromCharCode","O","utf8encode","I","m","g","v","w","k","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","B","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","shift","CENTRAL_DIRECTORY_END","prepareNextSource","previous","isPaused","resume","registerPrevious","generatedError","generateWorker","platform","_compressWorker","arguments","create","root","clone","loadAsync","support","defaults","version","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","load","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","allocBuffer","alloc","fill","isBuffer","toUpperCase","toString","remove","generate","generateInternalStream","mimeType","checkSupport","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","hasOwnProperty","nodestream","_internalType","_outputType","_mimeType","newBlob","apply","_worker","objectMode","array","string","arraybuffer","ArrayBuffer","nodebuffer","Blob","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","buffer","byteLength","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","FileReader","onload","onerror","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","id","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","nodeStream","MutationObserver","WebKitMutationObserver","createTextNode","observe","characterData","MessageChannel","onreadystatechange","parentNode","documentElement","port1","onmessage","port2","postMessage","TypeError","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","race","assign","chunkSize","windowBits","memLevel","strategy","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","L","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","j","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","sane","last","havedict","flags","check","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","q","J","getPrototypeOf","process","nextTick","importScripts","random","attachEvent","Function","callback","clearImmediate","validateFolderPath","strict","dotPattern","invalidChars"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/770.865557c0.js.map.gz b/frontend-dist/js/770.865557c0.js.map.gz deleted file mode 100644 index ac01ee87..00000000 Binary files a/frontend-dist/js/770.865557c0.js.map.gz and /dev/null differ diff --git a/frontend-dist/js/997.7b6c8b5a.js b/frontend-dist/js/997.7b6c8b5a.js new file mode 100644 index 00000000..29089520 --- /dev/null +++ b/frontend-dist/js/997.7b6c8b5a.js @@ -0,0 +1,2 @@ +(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[997],{4885:function(e,t,a){"use strict";a(85331)},13378:function(e,t,a){"use strict";a(85331),a(38736),a(79899)},15616:function(e,t,a){"use strict";a(85331),a(97197)},20174:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return hn}});var i=a(99114),n=(a(85331),a(30694),a(49385)),s=(a(37952),a(31802)),r=(a(13378),a(9267)),o=(a(15616),a(33892)),l=a(80047),d=(a(99648),a(39623)),c=(a(29092),a(56768)),h=a(24232);const u={class:"move-file-dialog-wrapper"},f={class:"move-dialog-content"},m={class:"move-path-input-container"},p={class:"move-dialog-hint"},g={class:"dialog-footer"},b={class:"move-drawer-content"},v={class:"move-path-section"},k={class:"move-path-label"},y={class:"move-path-input-row"},_={class:"move-dialog-hint"},w={key:0,class:"embedded-tree-section"},F={class:"tree-section-header"},C={class:"tree-section-title"},T={class:"tree-container"},$={key:0,class:"error-state"},L={class:"error-text"},S={class:"node-label"},x={class:"drawer-footer"};function D(e,t,a,D,E,A){const I=d.WK,U=(0,c.g2)("font-awesome-icon"),z=l.S2,B=o.A,W=r.kZ,P=s.qk,R=n.pw,O=i.A;return(0,c.uX)(),(0,c.CE)("div",u,[A.isDesktop?((0,c.uX)(),(0,c.Wv)(W,{key:0,modelValue:A.dialogVisible,"onUpdate:modelValue":t[1]||(t[1]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),width:"500px","show-close":!0,class:"move-dialog",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",g,[(0,c.bF)(z,{onClick:A.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(z,{type:"primary",loading:E.loading,onClick:A.handleConfirm},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",f,[(0,c.Lk)("div",m,[(0,c.bF)(I,{modelValue:E.targetPath,"onUpdate:modelValue":t[0]||(t[0]=e=>E.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},{prepend:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.targetDirectory")),1)]),_:1},8,["modelValue","placeholder"]),(0,c.bF)(B,{"current-directory":a.currentDirectory,source:"admin",onSelect:A.handleDirectorySelect},{trigger:(0,c.k6)(()=>[(0,c.bF)(z,{class:"directory-picker-trigger"},{default:(0,c.k6)(()=>[(0,c.bF)(U,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])]),(0,c.Lk)("p",p,(0,h.v_)(e.$t("moveFile.hint")),1)])]),_:1},8,["modelValue","title","onClose"])):((0,c.uX)(),(0,c.Wv)(R,{key:1,modelValue:A.dialogVisible,"onUpdate:modelValue":t[5]||(t[5]=e=>A.dialogVisible=e),title:a.isBatchMove?e.$t("moveFile.batchTitle"):e.$t("moveFile.title"),direction:"btt",size:"auto","show-close":!0,class:"move-drawer",onClose:A.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("div",x,[(0,c.bF)(z,{onClick:A.handleClose,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.cancel")),1)]),_:1},8,["onClick"]),(0,c.bF)(z,{type:"primary",loading:E.loading,onClick:A.handleConfirm,class:"footer-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.confirm")),1)]),_:1},8,["loading","onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",b,[(0,c.Lk)("div",v,[(0,c.Lk)("div",k,(0,h.v_)(e.$t("moveFile.targetDirectory")),1),(0,c.Lk)("div",y,[(0,c.bF)(I,{modelValue:E.targetPath,"onUpdate:modelValue":t[2]||(t[2]=e=>E.targetPath=e),placeholder:e.$t("moveFile.targetPlaceholder"),class:"move-path-input"},null,8,["modelValue","placeholder"]),(0,c.bF)(z,{class:"directory-picker-trigger",onClick:t[3]||(t[3]=e=>E.showTreePicker=!0)},{default:(0,c.k6)(()=>[(0,c.bF)(U,{icon:"folder-tree"})]),_:1})]),(0,c.Lk)("p",_,(0,h.v_)(e.$t("moveFile.hintMobile")),1)]),E.showTreePicker?((0,c.uX)(),(0,c.CE)("div",w,[(0,c.Lk)("div",F,[(0,c.Lk)("span",C,(0,h.v_)(e.$t("moveFile.selectDirectory")),1),(0,c.bF)(z,{text:"",onClick:t[4]||(t[4]=e=>E.showTreePicker=!1)},{default:(0,c.k6)(()=>[(0,c.bF)(U,{icon:"times"})]),_:1})]),(0,c.bo)(((0,c.uX)(),(0,c.CE)("div",T,[E.treeError?((0,c.uX)(),(0,c.CE)("div",$,[(0,c.bF)(U,{icon:"exclamation-circle",class:"error-icon"}),(0,c.Lk)("span",L,(0,h.v_)(E.treeError),1),(0,c.bF)(z,{type:"primary",size:"small",onClick:A.fetchDirectoryTree},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("moveFile.retry")),1)]),_:1},8,["onClick"])])):((0,c.uX)(),(0,c.Wv)(P,{key:1,ref:"treeRef",data:E.treeData,props:E.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:A.handleTreeNodeClick},{default:(0,c.k6)(({node:e,data:t})=>[(0,c.Lk)("span",{class:(0,h.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,c.bF)(U,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,c.Lk)("span",S,(0,h.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[O,E.treeLoading]])])):(0,c.Q3)("",!0)])]),_:1},8,["modelValue","title","onClose"]))])}var E=a(70797),A={name:"MoveFileDialog",components:{DirectoryTreePicker:o.A},props:{modelValue:{type:Boolean,default:!1},currentDirectory:{type:String,default:""},isBatchMove:{type:Boolean,default:!1},initialPath:{type:String,default:"/"}},emits:["update:modelValue","confirm","close"],data(){return{targetPath:"/",loading:!1,windowWidth:window.innerWidth,showTreePicker:!1,treeData:[],treeLoading:!1,treeError:"",treeProps:{children:"children",label:"name"}}},computed:{dialogVisible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},isDesktop(){return this.windowWidth>768}},watch:{modelValue(e){e&&(this.targetPath=this.initialPath||"/",this.showTreePicker=!1)},showTreePicker(e){e&&!this.isDesktop&&this.fetchDirectoryTree()}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},handleDirectorySelect(e){this.targetPath=e},handleConfirm(){this.$emit("confirm",this.targetPath)},handleClose(){this.$emit("update:modelValue",!1),this.$emit("close")},async fetchDirectoryTree(){this.treeLoading=!0,this.treeError="";try{const e=await(0,E.A)("/api/directoryTree",{method:"GET"});if(!e.ok)return void(401===e.status?this.treeError=this.$t("moveFile.authFailed"):this.treeError=this.$t("moveFile.serverError"));const t=await e.json();t.tree?this.treeData=[t.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),this.treeError=this.$t("moveFile.loadTreeFailed")}finally{this.treeLoading=!1}},handleTreeNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.targetPath=t,this.showTreePicker=!1}}},I=a(71241);const U=(0,I.A)(A,[["render",D],["__scopeId","data-v-7aaa437c"]]);var z=U,B=a(45130);const W={class:"mobile-drawer-header"},P={class:"mobile-drawer-title"},R={class:"mobile-drawer-content"},O=["onClick"];function N(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"drawer-slide"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-overlay",onClick:t[3]||(t[3]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"mobile-drawer",onClick:t[2]||(t[2]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",W,[(0,c.Lk)("span",P,(0,h.v_)(e.$t("mobileDirectory.title")),1),(0,c.bF)(r,{icon:"times",class:"mobile-drawer-close",onClick:s.close},null,8,["onClick"])]),(0,c.Lk)("div",R,[(0,c.Lk)("div",{class:(0,h.C4)(["mobile-drawer-item",{active:!a.currentPath}]),onClick:t[0]||(t[0]=e=>s.navigate(""))},[(0,c.bF)(r,{icon:"home",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.rootDirectory")),1)],2),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.pathParts,(e,t)=>((0,c.uX)(),(0,c.CE)("div",{key:t,class:(0,h.C4)(["mobile-drawer-item",{active:t===s.pathParts.length-1}]),style:(0,h.Tr)({paddingLeft:16*(t+1)+16+"px"}),onClick:e=>s.navigate(s.pathParts.slice(0,t+1).join("/"))},[(0,c.bF)(r,{icon:"folder",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e),1)],14,O))),128)),a.currentPath?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"mobile-drawer-back",onClick:t[1]||(t[1]=(...e)=>s.goBack&&s.goBack(...e))},[(0,c.bF)(r,{icon:"arrow-left",class:"mobile-drawer-item-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileDirectory.goBack")),1)])):(0,c.Q3)("",!0)])])])):(0,c.Q3)("",!0)]),_:1})])}a(18111),a(22489);var M={name:"MobileDirectoryDrawer",props:{modelValue:{type:Boolean,default:!1},currentPath:{type:String,default:""}},emits:["update:modelValue","navigate","goBack"],computed:{pathParts(){return this.currentPath.split("/").filter(Boolean)}},methods:{close(){this.$emit("update:modelValue",!1)},navigate(e){this.$emit("navigate",e),this.close()},goBack(){this.$emit("goBack"),this.close()}}};const V=(0,I.A)(M,[["render",N],["__scopeId","data-v-768efd1f"]]);var X=V;const j={class:"bottom-sheet-header"},K={class:"bottom-sheet-title"},Z={class:"bottom-sheet-content"};function G(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon");return(0,c.uX)(),(0,c.Wv)(c.Im,{to:"body"},[(0,c.bF)(B.eB,{name:"bottom-sheet"},{default:(0,c.k6)(()=>[a.modelValue?((0,c.uX)(),(0,c.CE)("div",{key:0,class:"bottom-sheet-overlay",onClick:t[9]||(t[9]=(...e)=>s.close&&s.close(...e))},[(0,c.Lk)("div",{class:"bottom-sheet",onClick:t[8]||(t[8]=(0,B.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",j,[t[10]||(t[10]=(0,c.Lk)("div",{class:"bottom-sheet-handle"},null,-1)),(0,c.Lk)("span",K,(0,h.v_)(a.title),1)]),(0,c.Lk)("div",Z,[a.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[5]||(t[5]=e=>s.handleAction("folderCopy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[6]||(t[6]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFolder")),1)])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[0]||(t[0]=e=>s.handleAction("detail"))},[(0,c.bF)(r,{icon:"info-circle",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.viewDetail")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[1]||(t[1]=e=>s.handleAction("copy"))},[(0,c.bF)(r,{icon:"copy",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.copyLink")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[2]||(t[2]=e=>s.handleAction("download"))},[(0,c.bF)(r,{icon:"download",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.downloadFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[3]||(t[3]=e=>s.handleAction("move"))},[(0,c.bF)(r,{icon:"file-export",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.moveFile")),1)]),(0,c.Lk)("div",{class:"bottom-sheet-item",onClick:t[4]||(t[4]=e=>s.handleAction("tag"))},[(0,c.bF)(r,{icon:"tags",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("mobileAction.tagManagement")),1)])],64)),(0,c.Lk)("div",{class:"bottom-sheet-item bottom-sheet-danger",onClick:t[7]||(t[7]=e=>s.handleAction("delete"))},[(0,c.bF)(r,{icon:"trash-alt",class:"bottom-sheet-icon"}),(0,c.Lk)("span",null,(0,h.v_)(a.isFolder?e.$t("mobileAction.deleteFolder"):e.$t("mobileAction.deleteFile")),1)])])])])):(0,c.Q3)("",!0)]),_:1})])}var H={name:"MobileActionSheet",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},isFolder:{type:Boolean,default:!1}},emits:["update:modelValue","action"],methods:{close(){this.$emit("update:modelValue",!1)},handleAction(e){this.$emit("action",e),this.close()}}};const q=(0,I.A)(H,[["render",G],["__scopeId","data-v-62bb601c"]]);var Q=q,Y=a(4275),J=a(89559),ee=a(12687);a(18785);const te={class:"batch-tag-container"},ae={class:"tab-content"},ie={class:"tab-description"},ne={class:"input-section"},se={key:0,class:"suggestions-panel"},re=["onClick"],oe={class:"tags-to-add-section"},le={key:0,class:"tags-container"},de={key:1,class:"empty-message"},ce={class:"action-buttons"},he={class:"tab-content"},ue={class:"tab-description"},fe={key:0,class:"common-tags-section"},me={class:"tags-container"},pe={key:1,class:"empty-message"},ge={class:"tab-content"},be={class:"tab-description"},ve={class:"action-buttons"};function ke(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=Y.v$,g=J.KR,b=Y.q,v=r.kZ;return(0,c.uX)(),(0,c.Wv)(v,{title:e.$t("batchTag.title"),modelValue:s.visible,"onUpdate:modelValue":t[2]||(t[2]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{default:(0,c.k6)(()=>[(0,c.Lk)("div",te,[(0,c.bF)(b,{modelValue:n.activeTab,"onUpdate:modelValue":t[1]||(t[1]=e=>n.activeTab=e),type:"border-card"},{default:(0,c.k6)(()=>[(0,c.bF)(p,{label:e.$t("batchTag.addTab"),name:"add"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ae,[(0,c.Lk)("p",ie,(0,h.v_)(e.$t("batchTag.addDescription",{count:s.fileCount})),1),(0,c.Lk)("div",ne,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("batchTag.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddInputTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddInputTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",se,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,re))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",oe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.pendingTags")),1),n.tagsToAdd.length>0?((0,c.uX)(),(0,c.CE)("div",le,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.tagsToAdd,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.removeFromToAdd(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",de,(0,h.v_)(e.$t("batchTag.noPendingTags")),1))]),(0,c.Lk)("div",ce,[(0,c.bF)(u,{type:"primary",onClick:s.executeAddTags,loading:n.loading,disabled:0===n.tagsToAdd.length},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.addToAllFiles")),1)]),_:1},8,["onClick","loading","disabled"])])])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.removeTab"),name:"remove"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",he,[(0,c.Lk)("p",ue,(0,h.v_)(e.$t("batchTag.removeDescription")),1),n.commonTags.length>0?((0,c.uX)(),(0,c.CE)("div",fe,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("batchTag.commonTags")),1),(0,c.Lk)("div",me,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.commonTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveCommonTag(e),class:"tag-item",type:"warning"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])])):((0,c.uX)(),(0,c.CE)("div",pe,(0,h.v_)(e.$t("batchTag.noCommonTags")),1))])]),_:1},8,["label"]),(0,c.bF)(p,{label:e.$t("batchTag.clearTab"),name:"clear"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ge,[(0,c.Lk)("p",be,(0,h.v_)(e.$t("batchTag.clearDescription",{count:s.fileCount})),1),(0,c.bF)(g,{title:e.$t("batchTag.clearWarningTitle"),type:"warning",description:e.$t("batchTag.clearWarningDesc"),closable:!1,style:{"margin-bottom":"20px"},center:""},null,8,["title","description"]),(0,c.Lk)("div",ve,[(0,c.bF)(u,{type:"danger",onClick:s.handleClearAllTags,loading:n.loading},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("batchTag.confirmClearAll")),1)]),_:1},8,["onClick","loading"])])])]),_:1},8,["label"])]),_:1},8,["modelValue"])])]),_:1},8,["title","modelValue","width","onClose"])}a(44114),a(61701),a(33110);var ye=a(51219),_e=a(12933),we={name:"BatchTagDialog",props:{modelValue:{type:Boolean,default:!1},selectedFiles:{type:Array,required:!0,default:()=>[]}},emits:["update:modelValue","tagsUpdated"],data(){return{activeTab:"add",inputTag:"",tagsToAdd:[],commonTags:[],suggestions:[],showSuggestions:!1,loading:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"600px"},selectedFilesOnly(){return this.selectedFiles.filter(e=>!e.isFolder)},fileCount(){return this.selectedFilesOnly.length},fileIds(){return this.selectedFilesOnly.map(e=>e.name)}},watch:{visible(e){e?this.loadCommonTags():this.resetData()},activeTab(e){"remove"===e&&this.loadCommonTags()}},methods:{resetData(){this.tagsToAdd=[],this.inputTag="",this.showSuggestions=!1,this.activeTab="add"},async loadCommonTags(){if(0!==this.selectedFilesOnly.length)try{const e=this.selectedFilesOnly.map(e=>(0,E.A)(`/api/manage/tags/${encodeURIComponent(e.name)}`,{method:"GET"})),t=await Promise.all(e),a=[];for(const i of t)if(i.ok){const e=await i.json();a.push(e.tags||[])}a.length>0?this.commonTags=a[0].filter(e=>a.every(t=>t.includes(e))):this.commonTags=[]}catch(e){console.error("Error loading common tags:",e),ye.nk.error(this.$t("batchTag.loadCommonTagsFailed"))}else this.commonTags=[]},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,E.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.tagsToAdd.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddInputTag()},handleAddInputTag(){const e=this.inputTag.trim();if(e){if(this.tagsToAdd.includes(e))return ye.nk.warning(this.$t("batchTag.tagAlreadyInList")),this.inputTag="",void(this.showSuggestions=!1);this.tagsToAdd.push(e),this.inputTag="",this.showSuggestions=!1}},removeFromToAdd(e){const t=this.tagsToAdd.indexOf(e);t>-1&&this.tagsToAdd.splice(t,1)},async executeAddTags(){if(0!==this.tagsToAdd.length){this.loading=!0;try{const e=await(0,E.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"add",tags:this.tagsToAdd})});if(!e.ok)throw new Error(this.$t("batchTag.addFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.addFailed"));ye.nk.success(this.$t("batchTag.addSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.tagsToAdd=[]}}catch(e){console.error("Error adding tags:",e),ye.nk.error(this.$t("batchTag.addFailed"))}finally{this.loading=!1}}else ye.nk.warning(this.$t("batchTag.pleaseAddTags"))},async handleRemoveCommonTag(e){this.loading=!0;try{const t=await(0,E.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("batchTag.removeFailed"));{const e=await t.json();if(!(e.success||e.updated>0))throw new Error(this.$t("batchTag.removeFailed"));ye.nk.success(this.$t("batchTag.removeSuccess",{count:e.updated})),this.$emit("tagsUpdated"),await this.loadCommonTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("batchTag.removeFailed"))}finally{this.loading=!1}},handleClearAllTags(){_e.s.confirm(this.$t("batchTag.clearConfirmMessage",{count:this.fileCount}),this.$t("batchTag.clearConfirmTitle"),{confirmButtonText:this.$t("batchTag.clearConfirmOk"),cancelButtonText:this.$t("batchTag.clearConfirmCancel"),type:"warning"}).then(()=>{this.executeClearTags()}).catch(()=>{ye.nk.info(this.$t("batchTag.clearCancelled"))})},async executeClearTags(){this.loading=!0;try{const e=await(0,E.A)("/api/manage/tags/batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileIds:this.fileIds,action:"set",tags:[]})});if(!e.ok)throw new Error(this.$t("batchTag.clearFailed"));{const t=await e.json();if(!(t.success||t.updated>0))throw new Error(this.$t("batchTag.clearFailed"));ye.nk.success(this.$t("batchTag.clearSuccess",{count:t.updated})),this.$emit("tagsUpdated"),this.commonTags=[]}}catch(e){console.error("Error clearing tags:",e),ye.nk.error(this.$t("batchTag.clearFailed"))}finally{this.loading=!1}},handleClose(){this.visible=!1}}};const Fe=(0,I.A)(we,[["render",ke],["__scopeId","data-v-ec3adcfc"]]);var Ce=Fe,Te=a(813);a(34896);const $e={class:"tag-management-container"},Le={class:"input-section"},Se={key:0,class:"suggestions-panel"},xe=["onClick"],De={class:"current-tags-section"},Ee={key:0,class:"tags-container"},Ae={key:1,class:"empty-message"},Ie={class:"popular-tags-section"},Ue={key:0,class:"tags-container"},ze={key:1,class:"empty-message"},Be={key:2,class:"empty-message"},We={class:"dialog-footer"};function Pe(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=ee.u,p=(0,c.g2)("Loading"),g=Te.tk,b=r.kZ;return(0,c.uX)(),(0,c.Wv)(b,{title:e.$t("tagManagement.title"),modelValue:s.visible,"onUpdate:modelValue":t[1]||(t[1]=e=>s.visible=e),width:s.dialogWidth,onClose:s.handleClose},{footer:(0,c.k6)(()=>[(0,c.Lk)("span",We,[(0,c.bF)(u,{onClick:s.handleClose},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("tagManagement.close")),1)]),_:1},8,["onClick"])])]),default:(0,c.k6)(()=>[(0,c.Lk)("div",$e,[(0,c.Lk)("div",Le,[(0,c.bF)(f,{modelValue:n.inputTag,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputTag=e),placeholder:e.$t("tagManagement.inputPlaceholder"),onKeyup:(0,B.jR)(s.handleAddTag,["enter"]),onInput:s.handleInputChange,clearable:""},{append:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:s.handleAddTag,type:"primary"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"plus"})]),_:1},8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup","onInput"]),n.showSuggestions&&n.suggestions.length>0?((0,c.uX)(),(0,c.CE)("div",Se,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.suggestions,e=>((0,c.uX)(),(0,c.CE)("div",{key:e,class:"suggestion-item",onClick:t=>s.selectSuggestion(e)},(0,h.v_)(e),9,xe))),128))])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",De,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.currentTags")),1),n.currentTags.length>0?((0,c.uX)(),(0,c.CE)("div",Ee,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,closable:"",onClose:t=>s.handleRemoveTag(e),class:"tag-item"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClose"]))),128))])):((0,c.uX)(),(0,c.CE)("div",Ae,(0,h.v_)(e.$t("tagManagement.noTags")),1))]),(0,c.Lk)("div",Ie,[(0,c.Lk)("h4",null,(0,h.v_)(e.$t("tagManagement.popularTags")),1),n.popularTags.length>0?((0,c.uX)(),(0,c.CE)("div",Ue,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.popularTags,e=>((0,c.uX)(),(0,c.Wv)(m,{key:e,onClick:t=>s.handleAddPopularTag(e),class:"tag-item clickable",type:"info"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))])):n.loadingPopularTags?((0,c.uX)(),(0,c.CE)("div",ze,[(0,c.bF)(g,{class:"is-loading"},{default:(0,c.k6)(()=>[(0,c.bF)(p)]),_:1}),(0,c.eW)(" "+(0,h.v_)(e.$t("tagManagement.loading")),1)])):((0,c.uX)(),(0,c.CE)("div",Be,(0,h.v_)(e.$t("tagManagement.noPopularTags")),1))])])]),_:1},8,["title","modelValue","width","onClose"])}var Re=a(57477),Oe={name:"TagManagementDialog",components:{Loading:Re.Loading},props:{modelValue:{type:Boolean,default:!1},fileId:{type:String,required:!0}},emits:["update:modelValue","tagsUpdated"],data(){return{currentTags:[],inputTag:"",suggestions:[],popularTags:[],showSuggestions:!1,loading:!1,loadingPopularTags:!1,debounceTimer:null}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"90%":"500px"}},watch:{visible(e){e&&(this.loadFileTags(),this.loadPopularTags())}},methods:{async loadFileTags(){try{const e=await(0,E.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"GET"});if(!e.ok)throw new Error("Failed to load tags");{const t=await e.json();this.currentTags=t.tags||[]}}catch(e){console.error("Error loading file tags:",e),ye.nk.error(this.$t("tagManagement.loadFailed"))}},async loadPopularTags(){this.loadingPopularTags=!0;try{const e=await(0,E.A)("/api/manage/tags/autocomplete?limit=20",{method:"GET"});if(e.ok){const t=await e.json();this.popularTags=(t.tags||[]).filter(e=>!this.currentTags.includes(e))}}catch(e){console.error("Error loading popular tags:",e)}finally{this.loadingPopularTags=!1}},handleInputChange(){clearTimeout(this.debounceTimer),this.inputTag&&0!==this.inputTag.trim().length?this.debounceTimer=setTimeout(()=>{this.fetchSuggestions()},300):this.showSuggestions=!1},async fetchSuggestions(){try{const e=this.inputTag.trim().toLowerCase(),t=await(0,E.A)(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(e)}&limit=10`,{method:"GET"});if(t.ok){const e=await t.json();this.suggestions=(e.tags||[]).filter(e=>!this.currentTags.includes(e)),this.showSuggestions=this.suggestions.length>0}}catch(e){console.error("Error fetching suggestions:",e)}},selectSuggestion(e){this.inputTag=e,this.showSuggestions=!1,this.handleAddTag()},async handleAddTag(){const e=this.inputTag.trim();if(e){if(this.currentTags.includes(e))return ye.nk.warning(this.$t("tagManagement.tagExists")),this.inputTag="",void(this.showSuggestions=!1);try{const t=await(0,E.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"add",tags:[e]})});if(!t.ok){const e=await t.json();throw new Error(e.message||this.$t("tagManagement.addFailed"))}{const e=await t.json();this.currentTags=e.tags||[],this.inputTag="",this.showSuggestions=!1,ye.nk.success(this.$t("tagManagement.addSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error adding tag:",t),ye.nk.error(t.message||this.$t("tagManagement.addFailed"))}}},async handleRemoveTag(e){try{const t=await(0,E.A)(`/api/manage/tags/${encodeURIComponent(this.fileId)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"remove",tags:[e]})});if(!t.ok)throw new Error(this.$t("tagManagement.removeFailed"));{const e=await t.json();this.currentTags=e.tags||[],ye.nk.success(this.$t("tagManagement.removeSuccess")),this.$emit("tagsUpdated",this.currentTags),this.loadPopularTags()}}catch(t){console.error("Error removing tag:",t),ye.nk.error(this.$t("tagManagement.removeFailed"))}},handleAddPopularTag(e){this.inputTag=e,this.handleAddTag()},handleClose(){this.visible=!1,this.inputTag="",this.showSuggestions=!1,this.currentTags=[],this.popularTags=[]}}};const Ne=(0,I.A)(Oe,[["render",Pe],["__scopeId","data-v-689f94e2"]]);var Me=Ne,Ve=a(55558),Xe=(a(10456),a(66810)),je=(a(34396),a(4885),a(82006)),Ke=(a(98642),a(63003),a(59869)),Ze=(a(70415),a(73565),a(57009));a(78450);const Ge={class:"detail-actions"},He={class:"preview-section"},qe={class:"preview-content"},Qe=["src"],Ye=["src"],Je={key:1},et={key:1},tt={key:0,style:{display:"flex","align-items":"center",gap:"6px"}},at={key:1,style:{color:"#909399"}},it={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"5px"}},nt={key:1,style:{color:"#909399"}};function st(e,t,a,i,n,s){const o=(0,c.g2)("font-awesome-icon"),u=l.S2,f=d.WK,m=Y.v$,p=Y.q,g=Ze.Zq,b=Ke.MF,v=ee.u,k=Ke.TS,y=je.xE,_=je.US,w=r.kZ;return(0,c.uX)(),(0,c.Wv)(w,{title:e.$t("fileDetail.title"),modelValue:s.visible,"onUpdate:modelValue":t[24]||(t[24]=e=>s.visible=e),width:s.dialogWidth},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Ge,[n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:0,type:"primary",onClick:t[0]||(t[0]=t=>e.$emit("download")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"download",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.download")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:1,type:"primary",onClick:t[1]||(t[1]=t=>e.$emit("tagManagement")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"tags",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.tags")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:2,type:"primary",onClick:t[2]||(t[2]=t=>e.$emit("block")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"ban",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.blacklist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:3,type:"primary",onClick:t[3]||(t[3]=t=>e.$emit("white")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"shield-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.whitelist")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:4,type:"danger",onClick:t[4]||(t[4]=t=>e.$emit("delete")),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"trash-alt",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.deleteBtn")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:5,type:"warning",onClick:t[5]||(t[5]=e=>s.startEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"edit",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.edit")),1)]),_:1})),n.isEditing?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(u,{key:6,type:"info",onClick:t[6]||(t[6]=e=>s.openRenameDialog()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{icon:"i-cursor",style:{"margin-right":"3px"}}),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.rename")),1)]),_:1})),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:7,type:"success",onClick:t[7]||(t[7]=e=>s.saveMetadata()),round:"",size:"small",class:"detail-action",loading:n.editSaving},{default:(0,c.k6)(()=>[n.editSaving?(0,c.Q3)("",!0):((0,c.uX)(),(0,c.Wv)(o,{key:0,icon:"save",style:{"margin-right":"3px"}})),(0,c.eW)(" "+(0,h.v_)(e.$t("fileDetail.save")),1)]),_:1},8,["loading"])):(0,c.Q3)("",!0),n.isEditing?((0,c.uX)(),(0,c.Wv)(u,{key:8,onClick:t[8]||(t[8]=e=>s.cancelEdit()),round:"",size:"small",class:"detail-action"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.cancel")),1)]),_:1})):(0,c.Q3)("",!0)]),(0,c.bF)(p,{modelValue:n.activeTab,"onUpdate:modelValue":t[16]||(t[16]=e=>n.activeTab=e),onTabClick:s.handleTabClick,style:{"margin-bottom":"10px"}},{default:(0,c.k6)(()=>[(0,c.bF)(m,{label:e.$t("fileDetail.originUrl"),name:"originUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.originUrl,"onUpdate:modelValue":t[9]||(t[9]=e=>a.urls.originUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1},8,["label"]),(0,c.bF)(m,{label:"Markdown",name:"mdUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.mdUrl,"onUpdate:modelValue":t[10]||(t[10]=e=>a.urls.mdUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"HTML",name:"htmlUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.htmlUrl,"onUpdate:modelValue":t[11]||(t[11]=e=>a.urls.htmlUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),(0,c.bF)(m,{label:"BBCode",name:"bbUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.bbUrl,"onUpdate:modelValue":t[12]||(t[12]=e=>a.urls.bbUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1}),a.file?.metadata?.TgFileId?((0,c.uX)(),(0,c.Wv)(m,{key:0,label:"TG File ID",name:"tgId"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.tgId,"onUpdate:modelValue":t[13]||(t[13]=e=>a.urls.tgId=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3Location?((0,c.uX)(),(0,c.Wv)(m,{key:1,label:"S3 Location",name:"s3Location"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3Location,"onUpdate:modelValue":t[14]||(t[14]=e=>a.urls.S3Location=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0),a.file?.metadata?.S3CdnFileUrl?((0,c.uX)(),(0,c.Wv)(m,{key:2,label:"S3 CDN URL",name:"s3CdnFileUrl"},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:a.urls.S3CdnFileUrl,"onUpdate:modelValue":t[15]||(t[15]=e=>a.urls.S3CdnFileUrl=e),readonly:"",onClick:s.handleUrlClick},null,8,["modelValue","onClick"])]),_:1})):(0,c.Q3)("",!0)]),_:1},8,["modelValue","onTabClick"]),(0,c.Lk)("div",He,[(0,c.Lk)("div",qe,[s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:0,src:a.fileLink,autoplay:"",muted:"",loop:"",class:"video-preview",onClick:t[17]||(t[17]=(...e)=>s.openImageLink&&s.openImageLink(...e))},null,8,Qe)):s.isAudio?((0,c.uX)(),(0,c.CE)("audio",{key:1,src:a.fileLink,controls:"",autoplay:"",class:"audio-preview"},null,8,Ye)):s.isImage?((0,c.uX)(),(0,c.Wv)(g,{key:2,src:a.fileLink,"preview-src-list":[a.fileLink],"preview-teleported":!0,fit:"contain",lazy:"",class:"image-preview"},null,8,["src","preview-src-list"])):((0,c.uX)(),(0,c.Wv)(o,{key:3,icon:"file",class:"file-icon-detail"}))])]),(0,c.bF)(k,{border:"",column:s.descColumn},{default:(0,c.k6)(()=>[(0,c.bF)(b,{label:e.$t("fileDetail.fileNameLabel")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileName,"onUpdate:modelValue":t[18]||(t[18]=e=>n.editForm.FileName=e),size:"small",placeholder:e.$t("fileDetail.fileNamePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",Je,(0,h.v_)(a.file?.metadata?.FileName||a.file?.name),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileType")},{default:(0,c.k6)(()=>[n.isEditing?((0,c.uX)(),(0,c.Wv)(f,{key:0,modelValue:n.editForm.FileType,"onUpdate:modelValue":t[19]||(t[19]=e=>n.editForm.FileType=e),size:"small",placeholder:e.$t("fileDetail.fileTypePlaceholder")},null,8,["modelValue","placeholder"])):((0,c.uX)(),(0,c.CE)("span",et,(0,h.v_)(a.file?.metadata?.FileType||e.$t("fileDetail.unknown")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileSizeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.fileSizeDisplay),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.imageDimensions")},{default:(0,c.k6)(()=>[s.imageDimensions?((0,c.uX)(),(0,c.CE)("div",tt,[(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Width)+" × "+(0,h.v_)(a.file?.metadata?.Height),1),(0,c.bF)(v,{size:"small",type:"info",style:{display:"inline-flex","align-items":"center","justify-content":"center"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.orientationIcon),1)]),_:1})])):((0,c.uX)(),(0,c.CE)("span",at,(0,h.v_)(e.$t("fileDetail.noDimensions")),1))]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadTimeLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.uploadTime),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.channelTypeAndName")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:"info",style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.Channel||e.$t("fileDetail.unknown")),1)]),_:1}),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.ChannelName||"-"),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.accessStatusAndReview")},{default:(0,c.k6)(()=>[(0,c.bF)(v,{size:"small",type:s.accessTagType,style:{"margin-right":"6px"}},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(s.accessType),1)]),_:1},8,["type"]),(0,c.Lk)("span",null,(0,h.v_)(a.file?.metadata?.Label||e.$t("fileDetail.noTags")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadIP")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadIP||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.uploadAddressLabel")},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(a.file?.metadata?.UploadAddress||e.$t("fileDetail.unknown")),1)]),_:1},8,["label"]),(0,c.bF)(b,{label:e.$t("fileDetail.fileTags")},{default:(0,c.k6)(()=>[a.file?.metadata?.Tags&&a.file?.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",it,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.file?.metadata?.Tags,e=>((0,c.uX)(),(0,c.Wv)(v,{key:e,size:"small"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1024))),128))])):((0,c.uX)(),(0,c.CE)("span",nt,(0,h.v_)(e.$t("fileDetail.noTags")),1))]),_:1},8,["label"])]),_:1},8,["column"]),(0,c.bF)(w,{modelValue:n.showRenameDialog,"onUpdate:modelValue":t[23]||(t[23]=e=>n.showRenameDialog=e),title:e.$t("fileDetail.renameTitle"),width:s.dialogWidth,"append-to-body":""},{footer:(0,c.k6)(()=>[(0,c.bF)(u,{onClick:t[21]||(t[21]=e=>s.closeRenameDialog())},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameCancel")),1)]),_:1}),(0,c.bF)(u,{type:"primary",onClick:t[22]||(t[22]=e=>s.submitRename()),loading:n.renameSaving,disabled:!n.renameValidation.valid},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("fileDetail.renameConfirm")),1)]),_:1},8,["loading","disabled"])]),default:(0,c.k6)(()=>[(0,c.bF)(_,{onSubmit:(0,B.D$)(s.submitRename,["prevent"])},{default:(0,c.k6)(()=>[(0,c.bF)(y,{label:e.$t("fileDetail.renameLabel"),error:n.renameValidation.error},{default:(0,c.k6)(()=>[(0,c.bF)(f,{modelValue:n.renameForm.newFileId,"onUpdate:modelValue":t[20]||(t[20]=e=>n.renameForm.newFileId=e),placeholder:e.$t("fileDetail.renamePlaceholder"),onInput:s.validateRenameInput,clearable:""},null,8,["modelValue","placeholder","onInput"])]),_:1},8,["label","error"])]),_:1},8,["onSubmit"])]),_:1},8,["modelValue","title","width"])]),_:1},8,["title","modelValue","width"])}const rt=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;function ot(e,t){return e&&""!==e.trim()?e===t?{valid:!1,error:"文件名未发生变化"}:e.includes("..")?{valid:!1,error:'文件名不能包含路径穿越字符 ".."'}:/\/\.\//.test(e)||/^\.\//.test(e)?{valid:!1,error:'文件名不能包含单独的 "." 路径段'}:rt.test(e)?{valid:!1,error:"文件名包含非法字符,请使用合法的文件名格式"}:e.includes("//")?{valid:!1,error:"文件名不能包含连续的斜杠"}:{valid:!0}:{valid:!1,error:"文件名不能为空"}}var lt={name:"FileDetailDialog",props:{modelValue:{type:Boolean,default:!1},file:{type:Object,default:null},fileLink:{type:String,default:""},urls:{type:Object,default:()=>({originUrl:"",mdUrl:"",htmlUrl:"",bbUrl:"",tgId:"",S3Location:"",S3CdnFileUrl:""})}},emits:["update:modelValue","download","tagManagement","block","white","delete","metadataUpdated","fileRenamed"],watch:{visible(e){e||(this.isEditing=!1,this.editSaving=!1)}},data(){return{activeTab:"originUrl",isEditing:!1,editForm:{FileName:"",FileType:""},editSaving:!1,showRenameDialog:!1,renameForm:{newFileId:""},renameValidation:{valid:!0,error:""},renameSaving:!1}},computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth<768?"95%":"900px"},descColumn(){return window.innerWidth<768?1:2},isVideo(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.file?.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.file?.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},uploadTime(){return this.file?.metadata?.TimeStamp?new Date(this.file.metadata.TimeStamp).toLocaleString():this.$t("fileDetail.unknown")},accessType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?this.$t("fileDetail.accessNormalWhitelist"):"Block"===e?this.$t("fileDetail.accessBlockedBlacklist"):"adult"===t?this.$t("fileDetail.accessBlockedReview"):this.$t("fileDetail.accessNormal")},accessTagType(){const e=this.file?.metadata?.ListType,t=this.file?.metadata?.Label;return"White"===e?"success":"Block"===e||"adult"===t?"danger":"success"},imageDimensions(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;return!(!e||!t)||null},orientationIcon(){const e=this.file?.metadata?.Width,t=this.file?.metadata?.Height;if(!e||!t)return"";const a=e/t;return a>1.1?this.$t("fileDetail.orientationLandscape"):a<.9?this.$t("fileDetail.orientationPortrait"):this.$t("fileDetail.orientationSquare")},fileSizeDisplay(){const e=this.file?.metadata?.FileSizeBytes,t=this.file?.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(2)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:this.$t("fileDetail.unknown")}},methods:{handleVideoClick(e){const t=e.target;t.paused?t.play():t.pause()},handleTabClick(){},handleUrlClick(e){const t=e.target;t.select(),navigator.clipboard.writeText(t.value).then(()=>{ye.nk.success(this.$t("fileDetail.linkCopied"))})},openImageLink(){this.fileLink&&window.open(this.fileLink,"_blank")},startEdit(){this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.isEditing=!0},cancelEdit(){this.isEditing=!1,this.editForm.FileName=this.file?.metadata?.FileName||"",this.editForm.FileType=this.file?.metadata?.FileType||"",this.editSaving=!1},async saveMetadata(){this.editSaving=!0;try{const e=this.file.name,t=await(0,E.A)(`/api/manage/metadata/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({FileName:this.editForm.FileName,FileType:this.editForm.FileType})});if(!t.ok){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.metadataSaveFailed"))}{const a=await t.json();ye.nk.success(this.$t("fileDetail.metadataSaved")),this.isEditing=!1,this.$emit("metadataUpdated",e,a.metadata)}}catch(e){console.error("Error saving metadata:",e),ye.nk.error(e.message||this.$t("fileDetail.metadataSaveFailed"))}finally{this.editSaving=!1}},openRenameDialog(){this.renameForm.newFileId=this.file?.name||"",this.renameValidation={valid:!0,error:""},this.showRenameDialog=!0},closeRenameDialog(){this.showRenameDialog=!1,this.renameForm.newFileId="",this.renameValidation={valid:!0,error:""}},validateRenameInput(){const e=ot(this.renameForm.newFileId,this.file?.name||"");this.renameValidation={valid:e.valid,error:e.error||""}},async submitRename(){if(!this.renameSaving&&(this.validateRenameInput(),this.renameValidation.valid)){this.renameSaving=!0;try{const e=this.file.name,t=await(0,E.A)(`/api/manage/rename/${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newFileId:this.renameForm.newFileId})});if(t.ok){const a=await t.json();ye.nk.success(this.$t("fileDetail.renameSuccess")),this.showRenameDialog=!1,this.$emit("fileRenamed",e,this.renameForm.newFileId,a.metadata)}else{if(409!==t.status){const e=await t.json().catch(()=>({}));throw new Error(e.message||this.$t("fileDetail.renameFailed"))}this.renameValidation={valid:!1,error:this.$t("fileDetail.renameConflict")}}}catch(e){console.error("Error renaming file:",e),ye.nk.error(e.message||this.$t("fileDetail.renameFailed"))}finally{this.renameSaving=!1}}}}};const dt=(0,I.A)(lt,[["render",st],["__scopeId","data-v-3f80812c"]]);var ct=dt,ht=a(78507);a(213);const ut={key:0,class:"batch-floating-bar"},ft={class:"batch-selection-summary"},mt={class:"batch-selection-count"},pt={class:"batch-floating-actions"};function gt(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=l.S2,d=ht.R7;return(0,c.uX)(),(0,c.Wv)(B.eB,{name:"batch-toolbar"},{default:(0,c.k6)(()=>[a.selectedCount>0?((0,c.uX)(),(0,c.CE)("div",ut,[(0,c.bF)(d,{disabled:s.disableTooltip,content:e.$t("dashboard.clearSelection"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:"batch-floating-btn ghost","aria-label":e.$t("dashboard.clearSelection"),onClick:s.handleClear},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"times",class:"batch-floating-icon"})]),_:1},8,["aria-label","onClick"])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:s.disableTooltip,content:`${a.selectedCount} ${e.$t("dashboard.selectedItems")}`,placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ft,[(0,c.Lk)("span",mt,(0,h.v_)(a.selectedCount),1)])]),_:1},8,["disabled","content"]),t[0]||(t[0]=(0,c.Lk)("span",{class:"batch-toolbar-divider"},null,-1)),(0,c.Lk)("div",pt,[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.actions,t=>((0,c.uX)(),(0,c.Wv)(d,{key:t.command,disabled:s.disableTooltip,content:e.$t(t.label),placement:"top"},{default:(0,c.k6)(()=>[(0,c.bF)(o,{class:(0,h.C4)(["batch-floating-btn",t.className]),"aria-label":e.$t(t.label),onClick:e=>s.handleAction(t.command)},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:t.icon,class:"batch-floating-icon"},null,8,["icon"])]),_:2},1032,["class","aria-label","onClick"])]),_:2},1032,["disabled","content"]))),128))])])):(0,c.Q3)("",!0)]),_:1})}var bt={name:"BatchActionBar",props:{selectedCount:{type:Number,required:!0}},emits:["action","clear"],data(){return{actions:[{command:"copy",label:"dashboard.copy",icon:"copy",className:"copy"},{command:"download",label:"dashboard.download",icon:"download",className:"download"},{command:"move",label:"dashboard.move",icon:"file-export",className:"move"},{command:"tagManagement",label:"dashboard.tagManagement",icon:"tags",className:"tag"},{command:"ban",label:"dashboard.addToBlacklist",icon:"ban",className:"ban"},{command:"white",label:"dashboard.addToWhitelist",icon:"shield-alt",className:"white"},{command:"delete",label:"dashboard.delete",icon:"trash-alt",className:"danger"}]}},computed:{disableTooltip(){return window.innerWidth<768}},methods:{handleAction(e){this.$emit("action",e)},handleClear(){this.$emit("clear")}}};const vt=(0,I.A)(bt,[["render",gt],["__scopeId","data-v-4937e2f0"]]);var kt=vt,yt=a(54880),_t=(a(4318),a(77815));a(72907);const wt={class:"list-col list-col-checkbox"},Ft=["src"],Ct=["src"],Tt=["title"],$t={class:"filename-start"},Lt={class:"filename-end"},St={class:"list-col list-col-tags"},xt={key:1,class:"list-empty"},Dt={class:"list-col list-col-channel"},Et={class:"list-col list-col-channel-name"},At={key:0,class:"channel-name-box"},It={key:1,class:"list-empty"},Ut={class:"list-col list-col-address"},zt={key:0,class:"address-box"},Bt={key:1,class:"list-empty"},Wt={class:"list-col list-col-size"},Pt={class:"list-col list-col-date"},Rt={class:"list-col list-col-actions"};function Ot(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=ht.R7;return(0,c.uX)(),(0,c.CE)("div",{class:"list-item",onTouchstart:t[9]||(t[9]=t=>e.$emit("touchstart",t)),onTouchend:t[10]||(t[10]=t=>e.$emit("touchend",t)),onTouchmove:t[11]||(t[11]=t=>e.$emit("touchmove",t))},[(0,c.Lk)("div",wt,[(0,c.Lk)("span",{class:(0,h.C4)(["custom-checkbox",{checked:n.localSelected}]),onClick:t[0]||(t[0]=(0,B.D$)((...e)=>s.toggleSelect&&s.toggleSelect(...e),["stop"]))},[n.localSelected?((0,c.uX)(),(0,c.Wv)(r,{key:0,icon:"check",class:"check-icon"})):(0,c.Q3)("",!0)],2)]),(0,c.Lk)("div",{class:"list-col list-col-preview",onClick:t[1]||(t[1]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[s.isFolder?((0,c.uX)(),(0,c.Wv)(r,{key:0,icon:"folder-open",class:"list-folder-icon"})):s.isVideo?((0,c.uX)(),(0,c.CE)("video",{key:1,src:a.fileLink,class:"list-preview-img",muted:"",preload:"metadata"},null,8,Ft)):s.isImage?((0,c.uX)(),(0,c.CE)("img",{key:2,src:a.fileLink,class:"list-preview-img",loading:"lazy",decoding:"async"},null,8,Ct)):((0,c.uX)(),(0,c.Wv)(r,{key:3,icon:"file",class:"list-file-icon"}))]),(0,c.Lk)("div",{class:"list-col list-col-name",onClick:t[2]||(t[2]=(...e)=>s.handlePreviewClick&&s.handlePreviewClick(...e))},[(0,c.Lk)("span",{class:"filename-ellipsis",title:s.displayName},[(0,c.Lk)("span",$t,(0,h.v_)(s.fileNameStart),1),(0,c.Lk)("span",Lt,(0,h.v_)(s.fileNameEnd),1)],8,Tt)]),(0,c.Lk)("div",St,[!s.isFolder&&a.item.metadata?.Tags&&a.item.metadata.Tags.length>0?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(a.item.metadata.Tags.slice(0,3),(e,t)=>((0,c.uX)(),(0,c.CE)("span",{key:t,class:"color-tag",style:(0,h.Tr)({background:s.getTagColor(t)})},(0,h.v_)(e),5))),128)),a.item.metadata.Tags.length>3?((0,c.uX)(),(0,c.CE)("span",{key:0,class:"color-tag color-tag-more",style:(0,h.Tr)({background:s.getTagColor(3)})},"+"+(0,h.v_)(a.item.metadata.Tags.length-3),5)):(0,c.Q3)("",!0)],64)):((0,c.uX)(),(0,c.CE)("span",xt,"-"))]),(0,c.Lk)("div",Dt,(0,h.v_)(s.isFolder?"-":a.item.metadata?.Channel||a.item.channelTag||"-"),1),(0,c.Lk)("div",Et,[!s.isFolder&&a.item.metadata?.ChannelName?((0,c.uX)(),(0,c.CE)("div",At,(0,h.v_)(a.item.metadata.ChannelName),1)):((0,c.uX)(),(0,c.CE)("span",It,"-"))]),(0,c.Lk)("div",Ut,[!s.isFolder&&a.item.metadata?.UploadIP?((0,c.uX)(),(0,c.CE)("div",zt,(0,h.v_)(a.item.metadata.UploadIP),1)):((0,c.uX)(),(0,c.CE)("span",Bt,"-"))]),(0,c.Lk)("div",Wt,(0,h.v_)(s.isFolder?"-":s.fileSizeDisplay),1),(0,c.Lk)("div",Pt,(0,h.v_)(s.uploadDate),1),(0,c.Lk)("div",Rt,[s.isFolder?((0,c.uX)(),(0,c.CE)(c.FK,{key:1},[(0,c.bF)(o,{content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[6]||(t[6]=(0,B.D$)(t=>e.$emit("folderCopy"),["stop"]))},[(0,c.bF)(r,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(o,{content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[7]||(t[7]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(r,{icon:"file-export"})])]),_:1},8,["content"])],64)):((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[(0,c.bF)(o,{content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[3]||(t[3]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(r,{icon:"copy"})])]),_:1},8,["content"]),(0,c.bF)(o,{content:e.$t("dashboard.downloadFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(r,{icon:"download"})])]),_:1},8,["content"]),(0,c.bF)(o,{content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(r,{icon:"file-export"})])]),_:1},8,["content"])],64)),(0,c.bF)(o,{content:e.$t("dashboard.delete"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"list-action-btn list-action-danger",onClick:t[8]||(t[8]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(r,{icon:"trash-alt"})])]),_:1},8,["content"])])],32)}var Nt={name:"FileListItem",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,default:""}},emits:["update:selected","enter","detail","copy","folderCopy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,tagColors:["#f472b6","#a78bfa","#60a5fa","#34d399"]}},computed:{isFolder(){return this.item.isFolder||this.item.name?.endsWith("/")},isVideo(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".mp4")||e.endsWith(".webm")||e.endsWith(".mov")||e.endsWith(".avi")},isImage(){const e=this.item.name?.toLowerCase()||"";return e.endsWith(".jpg")||e.endsWith(".jpeg")||e.endsWith(".png")||e.endsWith(".gif")||e.endsWith(".webp")||e.endsWith(".svg")||e.endsWith(".bmp")},displayName(){if(this.isFolder){const e=this.item.name.split("/").filter(Boolean);return e[e.length-1]||this.item.name}return this.item.metadata?.FileName||this.getFileName(this.item.name)},fileNameStart(){const e=this.displayName;return e.length<=20?e:e.slice(0,-8)},fileNameEnd(){const e=this.displayName;return e.length<=20?"":e.slice(-8)},uploadDate(){return this.item.uploaded?new Date(this.item.uploaded).toLocaleDateString():this.item.metadata?.TimeStamp?new Date(this.item.metadata.TimeStamp).toLocaleDateString():"-"},fileSizeDisplay(){const e=this.item.metadata?.FileSizeBytes,t=this.item.metadata?.FileSize;return e?e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`:t?`${t} MB`:"-"}},watch:{selected(e){this.localSelected=e}},methods:{toggleSelect(){this.localSelected=!this.localSelected,this.$emit("update:selected",this.localSelected)},handlePreviewClick(){this.isFolder?this.$emit("enter"):this.$emit("detail")},getFileName(e){const t=(e||"").split("/");return t[t.length-1]},getTagColor(e){return this.tagColors[e%this.tagColors.length]}}};const Mt=(0,I.A)(Nt,[["render",Ot],["__scopeId","data-v-78d34f50"]]);var Vt=Mt,Xt=a(70683),jt=(a(95385),a(98469));a(38736);const Kt={class:"file-short-info"},Zt={key:0,class:"success-tag"},Gt={key:1,class:"fail-tag"},Ht={key:2,class:"success-tag"},qt={key:3,class:"primary-tag"},Qt={key:0,style:{"margin-left":"2px"}},Yt={key:0,class:"skeleton-wrapper"},Jt={class:"error-text"},ea=["src"],ta={class:"error-text"},aa={key:3,class:"file-preview"},ia={class:"card-bottom-overlay"},na={class:"file-name-row"},sa={class:"file-name"},ra={class:"action-bar"},oa={class:"action-bar-left"},la={class:"action-bar-right"};function da(e,t,a,i,n,s){const r=jt.dI,o=(0,c.g2)("font-awesome-icon"),l=Ze.Zq,d=ht.R7,u=Xt.Ik;return(0,c.uX)(),(0,c.Wv)(u,{class:"img-card",onTouchstart:t[17]||(t[17]=t=>e.$emit("touchstart",t)),onTouchend:t[18]||(t[18]=t=>e.$emit("touchend",t)),onTouchmove:t[19]||(t[19]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",Kt,["White"===a.item.metadata?.ListType?((0,c.uX)(),(0,c.CE)("div",Zt,(0,h.v_)(s.channelTag),1)):"Block"===a.item.metadata?.ListType||"adult"===a.item.metadata?.Label?((0,c.uX)(),(0,c.CE)("div",Gt,(0,h.v_)(s.channelTag),1)):((0,c.uX)(),(0,c.CE)("div",Ht,(0,h.v_)(s.channelTag),1)),a.item.metadata?.Tags&&a.item.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",qt,[(0,c.bF)(o,{icon:"tag",style:{"margin-right":"3px","font-size":"12px"}}),(0,c.eW)(" "+(0,h.v_)(a.item.metadata.Tags[0])+" ",1),a.item.metadata.Tags.length>1?((0,c.uX)(),(0,c.CE)("span",Qt," (+"+(0,h.v_)(a.item.metadata.Tags.length-1)+") ",1)):(0,c.Q3)("",!0)])):(0,c.Q3)("",!0)]),s.isVideo?((0,c.uX)(),(0,c.CE)(c.FK,{key:0},[n.videoLoading?((0,c.uX)(),(0,c.CE)("div",Yt)):n.videoError?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"error-wrapper",onClick:t[2]||(t[2]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"exclamation-triangle",class:"error-icon"}),(0,c.Lk)("span",Jt,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])):(0,c.Q3)("",!0),(0,c.bo)((0,c.Lk)("video",{src:a.fileLink,muted:"",loop:"",preload:"metadata",class:"video-preview",onClick:t[3]||(t[3]=(...e)=>s.handleVideoClick&&s.handleVideoClick(...e)),onMouseenter:t[4]||(t[4]=e=>s.handleVideoHover(e,!0)),onMouseleave:t[5]||(t[5]=e=>s.handleVideoHover(e,!1)),onFullscreenchange:t[6]||(t[6]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onWebkitfullscreenchange:t[7]||(t[7]=(...e)=>s.handleFullscreenChange&&s.handleFullscreenChange(...e)),onLoadeddata:t[8]||(t[8]=e=>n.videoLoading=!1),onError:t[9]||(t[9]=(...e)=>s.handleVideoError&&s.handleVideoError(...e))},null,40,ea),[[B.aG,!n.videoLoading&&!n.videoError]])],64)):s.isAudio?((0,c.uX)(),(0,c.CE)("div",{key:1,class:"file-preview audio-card-preview",onClick:t[10]||(t[10]=t=>e.$emit("detail"))},[(0,c.bF)(o,{icon:"music",class:"file-icon audio-icon"})])):s.isImage?((0,c.uX)(),(0,c.Wv)(l,{key:2,"preview-teleported":!0,src:a.fileLink,"preview-src-list":a.previewSrcList,fit:"cover",lazy:"",decoding:"async",class:"image-preview"},{placeholder:(0,c.k6)(()=>[...t[20]||(t[20]=[(0,c.Lk)("div",{class:"skeleton-wrapper"},null,-1)])]),error:(0,c.k6)(()=>[(0,c.Lk)("div",{class:"error-wrapper",onClick:t[11]||(t[11]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"image",class:"error-icon"}),(0,c.Lk)("span",ta,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])]),_:1},8,["src","preview-src-list"])):((0,c.uX)(),(0,c.CE)("div",aa,[(0,c.bF)(o,{icon:"file",class:"file-icon"})])),(0,c.Lk)("div",ia,[(0,c.Lk)("div",na,[(0,c.Lk)("span",sa,(0,h.v_)(s.displayName),1)]),(0,c.Lk)("div",ra,[(0,c.Lk)("div",oa,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.detail"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[12]||(t[12]=(0,B.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"info-circle"})])]),_:1},8,["disabled","content"])]),(0,c.Lk)("div",la,[(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[13]||(t[13]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[14]||(t[14]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.downloadFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[15]||(t[15]=(0,B.D$)(t=>e.$emit("download"),["stop"]))},[(0,c.bF)(o,{icon:"download"})])]),_:1},8,["disabled","content"]),(0,c.bF)(d,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[16]||(t[16]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"])])])])]),_:1})}var ca={name:"FileCard",props:{item:{type:Object,required:!0},selected:{type:Boolean,default:!1},fileLink:{type:String,required:!0},previewSrcList:{type:Array,default:()=>[]},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","detail","copy","move","delete","download","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected,videoLoading:!0,videoError:!1}},computed:{channelTag(){return this.item.channelTag||""},isVideo(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("video"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")||t.endsWith(".avi")},isAudio(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("audio"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".mp3")||t.endsWith(".wav")||t.endsWith(".ogg")||t.endsWith(".flac")},isImage(){const e=this.item.metadata?.FileType?.toLowerCase()||"";if(e.includes("image"))return!0;const t=this.item.name?.toLowerCase()||"";return t.endsWith(".jpg")||t.endsWith(".jpeg")||t.endsWith(".png")||t.endsWith(".gif")||t.endsWith(".webp")||t.endsWith(".svg")||t.endsWith(".bmp")||t.endsWith(".avif")||t.endsWith(".heic")||t.endsWith(".heif")},displayName(){const e=this.item.metadata?.FileName||this.item.name||"",t=e.split("/");return t[t.length-1]}},watch:{selected(e){this.localSelected=e},fileLink(){this.videoLoading=!0,this.videoError=!1}},methods:{handleVideoError(){this.videoLoading=!1,this.videoError=!0},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleFullscreenChange(e){const t=e.target,a=document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement;a?(t.muted=!1,t.loop=!1):(t.muted=!0,t.loop=!0,t.pause(),t.currentTime=0)},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)}}};const ha=(0,I.A)(ca,[["render",da],["__scopeId","data-v-e367e94e"]]);var ua=ha;const fa={class:"card-bottom-overlay"},ma={class:"file-name-row"},pa={class:"file-name"},ga={key:0,class:"action-bar"},ba={class:"action-bar-right"};function va(e,t,a,i,n,s){const r=jt.dI,o=(0,c.g2)("font-awesome-icon"),l=ht.R7,d=Xt.Ik;return(0,c.uX)(),(0,c.Wv)(d,{class:"img-card folder-card",onTouchstart:t[6]||(t[6]=t=>e.$emit("touchstart",t)),onTouchend:t[7]||(t[7]=t=>e.$emit("touchend",t)),onTouchmove:t[8]||(t[8]=t=>e.$emit("touchmove",t))},{default:(0,c.k6)(()=>[(0,c.bF)(r,{modelValue:n.localSelected,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localSelected=e),onChange:t[1]||(t[1]=t=>e.$emit("update:selected",n.localSelected))},null,8,["modelValue"]),(0,c.Lk)("div",{class:"folder-icon",onClick:t[2]||(t[2]=t=>e.$emit("enter"))},[(0,c.bF)(o,{icon:"folder-open",class:"folder-icon-svg"})]),(0,c.Lk)("div",fa,[(0,c.Lk)("div",ma,[(0,c.Lk)("span",pa,(0,h.v_)(s.folderName),1)]),a.showActions?((0,c.uX)(),(0,c.CE)("div",ga,[t[9]||(t[9]=(0,c.Lk)("div",{class:"action-bar-left"},null,-1)),(0,c.Lk)("div",ba,[(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.copyLink"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[3]||(t[3]=(0,B.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.moveFile"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn",onClick:t[4]||(t[4]=(0,B.D$)(t=>e.$emit("move"),["stop"]))},[(0,c.bF)(o,{icon:"file-export"})])]),_:1},8,["disabled","content"]),(0,c.bF)(l,{disabled:a.disableTooltip,content:e.$t("dashboard.delete"),placement:"top"},{default:(0,c.k6)(()=>[(0,c.Lk)("button",{class:"action-btn action-btn-danger",onClick:t[5]||(t[5]=(0,B.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"])])])):(0,c.Q3)("",!0)])]),_:1})}var ka={name:"FolderCard",props:{name:{type:String,required:!0},selected:{type:Boolean,default:!1},showActions:{type:Boolean,default:!0},disableTooltip:{type:Boolean,default:!1}},emits:["update:selected","enter","copy","move","delete","touchstart","touchend","touchmove"],data(){return{localSelected:this.selected}},computed:{folderName(){const e=this.name.split("/").filter(Boolean);return e[e.length-1]||this.name}},watch:{selected(e){this.localSelected=e}}};const ya=(0,I.A)(ka,[["render",va],["__scopeId","data-v-5f22ef48"]]);var _a=ya;function wa(e,t,a,i,n,s){return"card"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:0},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"skeleton-"+e,class:"skeleton-card"},[...t[0]||(t[0]=[(0,c.Lk)("div",{class:"skeleton-image"},null,-1),(0,c.Lk)("div",{class:"skeleton-info"},[(0,c.Lk)("div",{class:"skeleton-text"})],-1)])]))),128)):"list"===a.type?((0,c.uX)(!0),(0,c.CE)(c.FK,{key:1},(0,c.pI)(a.count,e=>((0,c.uX)(),(0,c.CE)("div",{key:"list-skeleton-"+e,class:"list-item skeleton-list-item"},[...t[1]||(t[1]=[(0,c.Fv)('
',10)])]))),128)):(0,c.Q3)("",!0)}var Fa={name:"SkeletonLoader",props:{type:{type:String,default:"card",validator:e=>["card","list"].includes(e)},count:{type:Number,default:15}}};const Ca=(0,I.A)(Fa,[["render",wa],["__scopeId","data-v-5060702c"]]);var Ta=Ca,$a=a(81095),La=(a(77128),a(62086)),Sa=(a(40670),a(88830),a(23597),a(49187),a(77788));a(72099);const xa={class:"el-dropdown-link filter-trigger"},Da={class:"filter-section"},Ea={class:"filter-title"},Aa={class:"filter-options"},Ia={class:"filter-section"},Ua={class:"filter-title"},za={class:"filter-options"},Ba={class:"filter-section"},Wa={class:"filter-title"},Pa={class:"filter-options"},Ra={class:"filter-section"},Oa={class:"filter-title"},Na={class:"filter-options"},Ma={class:"filter-section"},Va={class:"filter-title"},Xa={class:"filter-options"},ja={key:0,class:"filter-section"},Ka={class:"filter-title"},Za={class:"filter-options"},Ga={key:0,class:"channel-divider"},Ha={class:"channel-group-title"},qa={class:"filter-actions"};function Qa(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=Sa.z_,d=jt.dI,u=jt.o5,f=l.S2,m=La.Iy,p=La.dW;return(0,c.uX)(),(0,c.Wv)(p,{"hide-on-click":!1,trigger:"click",class:"filter-dropdown",ref:"dropdownRef"},{dropdown:(0,c.k6)(()=>[(0,c.bF)(m,{class:"filter-dropdown-menu"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Da,[(0,c.Lk)("div",Ea,(0,h.v_)(e.$t("filter.accessStatus")),1),(0,c.Lk)("div",Aa,[(0,c.bF)(u,{modelValue:n.localFilters.accessStatus,"onUpdate:modelValue":t[0]||(t[0]=e=>n.localFilters.accessStatus=e),onChange:t[1]||(t[1]=e=>s.handleFilterChange("accessStatus"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.accessStatusOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"accessStatus-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ia,[(0,c.Lk)("div",Ua,(0,h.v_)(e.$t("filter.blackWhiteList")),1),(0,c.Lk)("div",za,[(0,c.bF)(u,{modelValue:n.localFilters.listType,"onUpdate:modelValue":t[2]||(t[2]=e=>n.localFilters.listType=e),onChange:t[3]||(t[3]=e=>s.handleFilterChange("listType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.listTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"listType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ba,[(0,c.Lk)("div",Wa,(0,h.v_)(e.$t("filter.reviewResult")),1),(0,c.Lk)("div",Pa,[(0,c.bF)(u,{modelValue:n.localFilters.label,"onUpdate:modelValue":t[4]||(t[4]=e=>n.localFilters.label=e),onChange:t[5]||(t[5]=e=>s.handleFilterChange("label"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.labelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"label-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ra,[(0,c.Lk)("div",Oa,(0,h.v_)(e.$t("filter.fileType")),1),(0,c.Lk)("div",Na,[(0,c.bF)(u,{modelValue:n.localFilters.fileType,"onUpdate:modelValue":t[6]||(t[6]=e=>n.localFilters.fileType=e),onChange:t[7]||(t[7]=e=>s.handleFilterChange("fileType"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.fileTypeOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"fileType-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ma,[(0,c.Lk)("div",Va,(0,h.v_)(e.$t("filter.channelType")),1),(0,c.Lk)("div",Xa,[(0,c.bF)(u,{modelValue:n.localFilters.channel,"onUpdate:modelValue":t[8]||(t[8]=e=>n.localFilters.channel=e),onChange:t[9]||(t[9]=e=>s.handleFilterChange("channel"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.channelOptions,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channel-"+e.value,label:e.value},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])])]),a.channelNameOptions.length>0?((0,c.uX)(),(0,c.CE)("div",ja,[(0,c.Lk)("div",Ka,(0,h.v_)(e.$t("filter.channelName")),1),(0,c.Lk)("div",Za,[(0,c.bF)(u,{modelValue:n.localFilters.channelName,"onUpdate:modelValue":t[10]||(t[10]=e=>n.localFilters.channelName=e),onChange:t[11]||(t[11]=e=>s.handleFilterChange("channelName"))},{default:(0,c.k6)(()=>[((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(s.groupedChannelNames,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:"group-"+e.type},[t>0?((0,c.uX)(),(0,c.CE)("div",Ga)):(0,c.Q3)("",!0),(0,c.Lk)("div",Ha,(0,h.v_)(e.typeLabel),1),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(e.channels,e=>((0,c.uX)(),(0,c.Wv)(d,{key:"channelName-"+e.type+"-"+e.name,label:e.type+":"+e.name},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.name),1)]),_:2},1032,["label"]))),128))],64))),128))]),_:1},8,["modelValue"])])])):(0,c.Q3)("",!0),(0,c.Lk)("div",qa,[(0,c.bF)(f,{size:"small",onClick:s.clearFilters,disabled:0===s.activeFilterCount},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("filter.clearFilters")),1)]),_:1},8,["onClick","disabled"])])]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("span",xa,[(0,c.bF)(o,{value:s.activeFilterCount,hidden:0===s.activeFilterCount,class:"filter-badge"},{default:(0,c.k6)(()=>[(0,c.bF)(r,{icon:"filter",class:"header-icon"})]),_:1},8,["value","hidden"])])]),_:1},512)}a(7588),a(18237);var Ya={name:"FilterDropdown",props:{filters:{type:Object,default:()=>({accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]})},channelNameOptions:{type:Array,default:()=>[]}},emits:["update:filters","change"],data(){return{localFilters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]}}},computed:{accessStatusOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.blocked"),value:"blocked"}]},listTypeOptions(){return[{label:this.$t("filter.whiteList"),value:"White"},{label:this.$t("filter.blackList"),value:"Block"},{label:this.$t("filter.notSet"),value:"None"}]},labelOptions(){return[{label:this.$t("filter.normal"),value:"normal"},{label:this.$t("filter.teenContent"),value:"teen"},{label:this.$t("filter.adultContent"),value:"adult"}]},fileTypeOptions(){return[{label:this.$t("filter.image"),value:"image"},{label:this.$t("filter.video"),value:"video"},{label:this.$t("filter.audio"),value:"audio"},{label:this.$t("filter.other"),value:"other"}]},channelOptions(){return[{label:"Telegram",value:"TelegramNew"},{label:"Cloudflare R2",value:"CloudflareR2"},{label:"S3",value:"S3"},{label:"Discord",value:"Discord"},{label:"HuggingFace",value:"HuggingFace"},{label:"WebDAV",value:"WebDAV"},{label:this.$t("filter.externalLink"),value:"External"}]},activeFilterCount(){return Object.values(this.localFilters).reduce((e,t)=>e+t.length,0)},groupedChannelNames(){const e={};return this.channelNameOptions.forEach(t=>{e[t.type]||(e[t.type]={type:t.type,typeLabel:t.typeLabel,channels:[]}),e[t.type].channels.push(t)}),Object.values(e)}},watch:{filters:{handler(e){this.localFilters={accessStatus:Array.isArray(e.accessStatus)?[...e.accessStatus]:[],listType:Array.isArray(e.listType)?[...e.listType]:[],label:Array.isArray(e.label)?[...e.label]:[],fileType:Array.isArray(e.fileType)?[...e.fileType]:[],channel:Array.isArray(e.channel)?[...e.channel]:[],channelName:Array.isArray(e.channelName)?[...e.channelName]:[]}},immediate:!0,deep:!0}},methods:{handleFilterChange(e){this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:e,filters:{...this.localFilters}})},clearFilters(){this.localFilters={accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},this.$emit("update:filters",{...this.localFilters}),this.$emit("change",{type:"clear",filters:{...this.localFilters}})}}};const Ja=(0,I.A)(Ya,[["render",Qa],["__scopeId","data-v-c3aeeea0"]]);var ei=Ja,ti=a(36600);const ai={class:"container"},ii={class:"header-content"},ni={class:"search-area"},si={class:"search-card"},ri={class:"actions"},oi={class:"el-dropdown-link"},li={class:"el-dropdown-link"},di={class:"breadcrumb-container"},ci={class:"mobile-directory-path"},hi={class:"breadcrumb desktop-only"},ui=["title"],fi={key:1,class:"empty-state"},mi={class:"empty-text"},pi={class:"empty-hint"},gi={class:"list-header"},bi={class:"list-col list-col-checkbox"},vi={class:"list-col list-col-preview"},ki={class:"list-col list-col-name"},yi={class:"list-col list-col-tags"},_i={class:"list-col list-col-channel"},wi={class:"list-col list-col-channel-name"},Fi={class:"list-col list-col-address"},Ci={class:"list-col list-col-size"},Ti={class:"list-col list-col-date"},$i={class:"list-col list-col-actions"},Li={key:1,class:"empty-state list-empty"},Si={class:"empty-text"},xi={class:"empty-hint"},Di={class:"pagination-container"},Ei={class:"pagination-center"},Ai={class:"pagination-right"},Ii={class:"page-total"},Ui={class:"page-jump"},zi={class:"dialog-section"},Bi={class:"section-header"},Wi={class:"section-title"},Pi={class:"section-content"},Ri={class:"dialog-section"},Oi={class:"section-header"},Ni={class:"section-title"},Mi={class:"section-content"},Vi={class:"setting-item"},Xi={class:"setting-label"},ji={key:0,class:"setting-item"},Ki={class:"setting-label"},Zi={class:"dialog-action"};function Gi(e,t,a,i,n,s){const o=ti.A,u=(0,c.g2)("font-awesome-icon"),f=d.WK,m=ei,p=La.c6,g=La.Iy,b=La.dW,v=ht.R7,k=yt.bZ,y=$a.WZ,_=$a.vp,w=Ta,F=_a,C=ua,T=Vt,$=_t.aQ,L=l.S2,S=yt.ZO,x=yt.lX,D=kt,E=ct,A=Xe.ll,I=Xe.MQ,U=Ve.qi,W=r.kZ,P=Me,R=Ce,O=Q,N=X,M=z;return(0,c.uX)(),(0,c.CE)("div",ai,[(0,c.bF)(x,null,{default:(0,c.k6)(()=>[(0,c.bF)(k,null,{default:(0,c.k6)(()=>[(0,c.Lk)("div",ii,[(0,c.bF)(o,{activeTab:"dashboard"}),(0,c.Lk)("div",ni,[(0,c.Lk)("div",si,[(0,c.bF)(f,{modelValue:n.tempSearch,"onUpdate:modelValue":t[0]||(t[0]=e=>n.tempSearch=e),size:"small",placeholder:e.$t("dashboard.searchPlaceholder"),onKeyup:(0,B.jR)(s.handleSearch,["enter"])},{suffix:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"search",class:"search-icon",onClick:s.handleSearch},null,8,["onClick"])]),_:1},8,["modelValue","placeholder","onKeyup"])]),(0,c.bF)(m,{filters:n.filters,"onUpdate:filters":t[1]||(t[1]=e=>n.filters=e),channelNameOptions:n.channelNameOptions,onChange:s.handleFilterChange},null,8,["filters","channelNameOptions","onChange"])]),(0,c.Lk)("div",ri,[(0,c.bF)(b,{onCommand:s.sort,"hide-on-click":!1},{dropdown:(0,c.k6)(()=>[(0,c.bF)(g,null,{default:(0,c.k6)(()=>[(0,c.bF)(p,{command:"dateDesc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortByDateDesc")),1)]),_:1}),(0,c.bF)(p,{command:"nameAsc"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.sortByNameAsc")),1)]),_:1})]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("span",oi,[(0,c.bF)(u,{icon:s.sortIcon,class:"header-icon"},null,8,["icon"])])]),_:1},8,["onCommand"]),(0,c.bF)(v,{disabled:s.disableTooltip,content:e.$t("dashboard.linkFormat"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.Lk)("span",li,[(0,c.bF)(u,{icon:"link",class:"header-icon",onClick:t[2]||(t[2]=e=>n.showUrlDialog=!0)})])]),_:1},8,["disabled","content"]),(0,c.bF)(v,{disabled:s.disableTooltip,content:"card"===n.viewMode?e.$t("dashboard.listView"):e.$t("dashboard.cardView"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"card"===n.viewMode?"list":"th-large",class:"header-icon",onClick:s.toggleViewMode},null,8,["icon","onClick"])]),_:1},8,["disabled","content"]),(0,c.bF)(v,{disabled:s.disableTooltip,content:e.$t("dashboard.logout"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sign-out-alt",class:"header-icon",onClick:s.handleLogout},null,8,["onClick"])]),_:1},8,["disabled","content"])])])]),_:1}),(0,c.bF)(S,{class:(0,h.C4)(["main-container",{"has-batch-toolbar":n.selectedFiles.length>0}])},{default:(0,c.k6)(()=>[(0,c.Lk)("div",di,[(0,c.Lk)("button",{class:"breadcrumb-select-button",type:"button",onClick:t[3]||(t[3]=(...e)=>s.handleSelectPage&&s.handleSelectPage(...e))},[(0,c.bF)(u,{icon:s.selectPageIcon,class:"breadcrumb-select-icon"},null,8,["icon"])]),(0,c.Lk)("div",{class:"mobile-directory-trigger",onClick:t[4]||(t[4]=e=>n.showMobileDirectoryDrawer=!0)},[(0,c.bF)(u,{icon:"folder-open",class:"mobile-directory-icon"}),(0,c.Lk)("span",ci,(0,h.v_)(n.currentPath&&n.currentPath.split("/").filter(Boolean).length>0?n.currentPath.split("/").filter(Boolean).pop():e.$t("dashboard.rootDirectory")),1),(0,c.bF)(u,{icon:"chevron-down",class:"mobile-directory-arrow"})]),(0,c.Lk)("div",hi,[(0,c.bF)(_,{separator:"/"},{default:(0,c.k6)(()=>[(0,c.bF)(y,{onClick:t[5]||(t[5]=e=>s.navigateToFolder(""))},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"home",class:"breadcrumb-home-icon"})]),_:1}),((0,c.uX)(!0),(0,c.CE)(c.FK,null,(0,c.pI)(n.currentPath.split("/").filter(Boolean),(e,t)=>((0,c.uX)(),(0,c.Wv)(y,{key:t,onClick:e=>s.navigateToFolder(n.currentPath.split("/").filter(Boolean).slice(0,t+1).join("/"))},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e),1)]),_:2},1032,["onClick"]))),128))]),_:1})]),(0,c.Lk)("span",{class:"stats-badge",title:e.$t("dashboard.totalFiles",{count:e.$data.Number})},[(0,c.bF)(u,{icon:"database",class:"stats-badge-icon"}),(0,c.eW)(" "+(0,h.v_)(n.Number),1)],8,ui)]),"card"===n.viewMode?((0,c.uX)(),(0,c.CE)("div",{key:0,class:(0,h.C4)(["content",{"is-drag-selecting":i.isDragging}]),ref:"cardContainerRef"},[n.loading?((0,c.uX)(),(0,c.Wv)(w,{key:0,type:"card",count:15})):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",fi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",mi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",pi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:t},[s.isFolder(e)?((0,c.uX)(),(0,c.Wv)(F,{key:0,name:e.name,selected:e.selected,"onUpdate:selected":t=>e.selected=t,showActions:!n.isSearchMode,disableTooltip:s.disableTooltip,onEnter:t=>s.enterFolder(e.name),onCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onTouchstart:a=>s.handleFolderTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["name","selected","onUpdate:selected","showActions","disableTooltip","onEnter","onCopy","onMove","onDelete","onTouchstart","onTouchend","onTouchmove"])):((0,c.uX)(),(0,c.Wv)(C,{key:1,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),previewSrcList:e.previewSrcList,disableTooltip:s.disableTooltip,onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","previewSrcList","disableTooltip","onDetail","onCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))],64))),128))],2)):((0,c.uX)(),(0,c.CE)("div",{key:1,class:(0,h.C4)(["list-view",{"is-drag-selecting":i.isDragging}]),ref:"listContainerRef"},[(0,c.Lk)("div",gi,[(0,c.Lk)("div",bi,[(0,c.Lk)("span",{class:(0,h.C4)(["custom-checkbox",{checked:s.isSelectAll,indeterminate:s.isIndeterminate}]),onClick:t[6]||(t[6]=e=>s.handleSelectAllPage(!s.isSelectAll))},[s.isSelectAll?((0,c.uX)(),(0,c.Wv)(u,{key:0,icon:"check",class:"check-icon"})):s.isIndeterminate?((0,c.uX)(),(0,c.Wv)(u,{key:1,icon:"minus",class:"check-icon"})):(0,c.Q3)("",!0)],2)]),(0,c.Lk)("div",vi,(0,h.v_)(e.$t("dashboard.preview")),1),(0,c.Lk)("div",ki,(0,h.v_)(e.$t("dashboard.fileName")),1),(0,c.Lk)("div",yi,(0,h.v_)(e.$t("dashboard.tags")),1),(0,c.Lk)("div",_i,(0,h.v_)(e.$t("dashboard.channelType")),1),(0,c.Lk)("div",wi,(0,h.v_)(e.$t("dashboard.channelNameCol")),1),(0,c.Lk)("div",Fi,(0,h.v_)(e.$t("dashboard.uploadAddress")),1),(0,c.Lk)("div",Ci,(0,h.v_)(e.$t("dashboard.fileSize")),1),(0,c.Lk)("div",Ti,(0,h.v_)(e.$t("dashboard.uploadTime")),1),(0,c.Lk)("div",$i,(0,h.v_)(e.$t("dashboard.actions")),1)]),n.loading?((0,c.uX)(),(0,c.Wv)(w,{key:0,type:"list",count:15})):0===s.paginatedTableData.length?((0,c.uX)(),(0,c.CE)("div",Li,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",Si,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",xi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.Wv)(T,{key:t,item:e,selected:e.selected,"onUpdate:selected":t=>e.selected=t,fileLink:s.getFileLink(e.name),onEnter:t=>s.enterFolder(e.name),onDetail:a=>s.openDetailDialog(t,e.name),onCopy:a=>s.handleCopy(t,e.name),onFolderCopy:t=>s.handleFolderCopy(e.name),onMove:a=>s.handleMove(t,e.name),onDelete:a=>s.handleDelete(t,e.name),onDownload:t=>s.handleDownload(e.name),onTouchstart:a=>s.isFolder(e)?s.handleFolderTouchStart(e,t):s.handleTouchStart(e,t),onTouchend:s.handleTouchEnd,onTouchmove:s.handleTouchEnd},null,8,["item","selected","onUpdate:selected","fileLink","onEnter","onDetail","onCopy","onFolderCopy","onMove","onDelete","onDownload","onTouchstart","onTouchend","onTouchmove"]))),128))],2)),i.isDragging?((0,c.uX)(),(0,c.CE)("div",{key:2,class:"drag-select-overlay",style:(0,h.Tr)({position:"fixed",left:i.selectionRect.left+"px",top:i.selectionRect.top+"px",width:i.selectionRect.width+"px",height:i.selectionRect.height+"px"})},null,4)):(0,c.Q3)("",!0),(0,c.Lk)("div",Di,[(0,c.Lk)("div",Ei,[(0,c.bF)($,{background:"",layout:"prev, pager, next",total:s.filteredTableData.length,"page-size":n.pageSize,"current-page":n.currentPage,"pager-count":s.pagerCount,onCurrentChange:s.handlePageChange},null,8,["total","page-size","current-page","pager-count","onCurrentChange"]),(0,c.bF)(L,{type:"primary",onClick:s.refreshFileList,class:"refresh-btn"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"sync",class:(0,h.C4)({"fa-spin":n.refreshLoading})},null,8,["class"])]),_:1},8,["onClick"]),n.currentPage===Math.ceil(s.filteredTableData.length/n.pageSize)?((0,c.uX)(),(0,c.Wv)(L,{key:0,type:"primary",onClick:s.loadMoreData,loading:n.loading,class:"load-more"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("dashboard.loadMore")),1)]),_:1},8,["onClick","loading"])):(0,c.Q3)("",!0)]),(0,c.Lk)("div",Ai,[(0,c.Lk)("span",Ii,(0,h.v_)(e.$t("dashboard.totalPages",{count:s.realTotalPages})),1),(0,c.Lk)("div",Ui,[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.jumpTo")),1),(0,c.bF)(f,{modelValue:n.jumpPage,"onUpdate:modelValue":t[7]||(t[7]=e=>n.jumpPage=e),size:"small",class:"jump-input",onKeyup:(0,B.jR)(s.handleJumpPage,["enter"])},null,8,["modelValue","onKeyup"]),(0,c.bF)(L,{size:"small",type:"primary",onClick:s.handleJumpPage,class:"jump-btn"},{default:(0,c.k6)(()=>[...t[24]||(t[24]=[(0,c.eW)("GO",-1)])]),_:1},8,["onClick"])])])])]),_:1},8,["class"])]),_:1}),(0,c.bF)(D,{"selected-count":n.selectedFiles.length,onAction:s.handleBatchAction,onClear:s.clearSelection},null,8,["selected-count","onAction","onClear"]),(0,c.bF)(E,{modelValue:n.showdetailDialog,"onUpdate:modelValue":t[8]||(t[8]=e=>n.showdetailDialog=e),file:n.detailFile,fileLink:s.getFileLink(n.detailFile?.name),urls:s.allUrl,onDownload:t[9]||(t[9]=e=>s.handleDownload(n.detailFile?.name)),onTagManagement:t[10]||(t[10]=e=>s.handleTagManagement(n.detailFile?.name)),onBlock:t[11]||(t[11]=e=>s.handleBlock(n.detailFile?.name)),onWhite:t[12]||(t[12]=e=>s.handleWhite(n.detailFile?.name)),onDelete:t[13]||(t[13]=e=>s.handleDetailDelete(n.detailFile?.name)),onMetadataUpdated:s.handleMetadataUpdated,onFileRenamed:s.handleFileRenamed},null,8,["modelValue","file","fileLink","urls","onMetadataUpdated","onFileRenamed"]),(0,c.bF)(W,{title:e.$t("dashboard.linkFormat"),modelValue:n.showUrlDialog,"onUpdate:modelValue":t[18]||(t[18]=e=>n.showUrlDialog=e),width:s.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",zi,[(0,c.Lk)("div",Bi,[(0,c.Lk)("span",Wi,(0,h.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,c.Lk)("div",Pi,[(0,c.bF)(I,{modelValue:n.defaultUrlFormat,"onUpdate:modelValue":t[14]||(t[14]=e=>n.defaultUrlFormat=e),class:"radio-card-group grid-2x2"},{default:(0,c.k6)(()=>[(0,c.bF)(A,{label:"originUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"link",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,c.bF)(A,{label:"mdUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,c.Lk)("span",null,"Markdown",-1))]),_:1}),(0,c.bF)(A,{label:"htmlUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,c.Lk)("span",null,"HTML",-1))]),_:1}),(0,c.bF)(A,{label:"bbUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,c.Lk)("span",null,"BBCode",-1))]),_:1}),(0,c.bF)(A,{label:"tgId",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"paper-plane",class:"radio-icon"}),t[28]||(t[28]=(0,c.Lk)("span",null,"TG File ID",-1))]),_:1}),(0,c.bF)(A,{label:"s3Location",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"cloud",class:"radio-icon"}),(0,c.Lk)("span",null,(0,h.v_)(e.$t("settings.s3Link")),1)]),_:1})]),_:1},8,["modelValue"])])]),(0,c.Lk)("div",Ri,[(0,c.Lk)("div",Oi,[(0,c.Lk)("span",Ni,(0,h.v_)(e.$t("settings.customLink")),1),(0,c.bF)(v,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,c.Lk)("div",Mi,[(0,c.Lk)("div",Vi,[(0,c.Lk)("span",Xi,(0,h.v_)(e.$t("settings.enableCustom")),1),(0,c.bF)(U,{modelValue:n.useCustomUrl,"onUpdate:modelValue":t[15]||(t[15]=e=>n.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===n.useCustomUrl?((0,c.uX)(),(0,c.CE)("div",ji,[(0,c.Lk)("span",Ki,(0,h.v_)(e.$t("settings.customPrefix")),1),(0,c.bF)(f,{modelValue:n.customUrlPrefix,"onUpdate:modelValue":t[16]||(t[16]=e=>n.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,c.Q3)("",!0)])]),(0,c.Lk)("div",Zi,[(0,c.bF)(L,{type:"primary",onClick:t[17]||(t[17]=e=>n.showUrlDialog=!1),class:"confirm-btn"},{default:(0,c.k6)(()=>[(0,c.eW)((0,h.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,c.bF)(P,{modelValue:n.showTagDialog,"onUpdate:modelValue":t[19]||(t[19]=e=>n.showTagDialog=e),fileId:n.currentTagFile,onTagsUpdated:s.handleTagsUpdated},null,8,["modelValue","fileId","onTagsUpdated"]),(0,c.bF)(R,{modelValue:n.showBatchTagDialog,"onUpdate:modelValue":t[20]||(t[20]=e=>n.showBatchTagDialog=e),selectedFiles:n.selectedFiles,onTagsUpdated:s.handleBatchTagsUpdated},null,8,["modelValue","selectedFiles","onTagsUpdated"]),(0,c.bF)(O,{modelValue:n.showMobileActionModal,"onUpdate:modelValue":t[21]||(t[21]=e=>n.showMobileActionModal=e),title:n.mobileActionIsFolder?s.getFolderName(n.mobileActionFile?.name||""):n.mobileActionFile?.metadata?.FileName||s.getFileName(n.mobileActionFile?.name||""),isFolder:n.mobileActionIsFolder,onAction:s.handleMobileAction},null,8,["modelValue","title","isFolder","onAction"]),(0,c.bF)(N,{modelValue:n.showMobileDirectoryDrawer,"onUpdate:modelValue":t[22]||(t[22]=e=>n.showMobileDirectoryDrawer=e),currentPath:n.currentPath,onNavigate:s.navigateToFolder,onGoBack:s.handleGoBack},null,8,["modelValue","currentPath","onNavigate","onGoBack"]),(0,c.bF)(M,{modelValue:n.showMoveDialog,"onUpdate:modelValue":t[23]||(t[23]=e=>n.showMoveDialog=e),"current-directory":n.currentPath,"is-batch-move":n.isBatchMove,"initial-path":n.moveTargetPath,onConfirm:s.confirmMove},null,8,["modelValue","current-directory","is-batch-move","initial-path","onConfirm"])])}a(81148),a(20116),a(13579),a(17642),a(58004),a(33853),a(45876),a(32475),a(15024),a(31698),a(14603),a(47566),a(98721);var Hi=a(60782),qi=a(44813),Qi=a.n(qi),Yi=a(54047),Ji=(a(58335),a(46638));class en{constructor(){this.FILE_LIST_PATH="data/fileList.json",this.fileListCache=null,this.storageWarningShown=!1}getLocalFileList(){const e=this.getMutableFileList();return{...e,files:[...e.files||[]],directories:[...e.directories||[]]}}getMutableFileList(){if(this.fileListCache)return this.fileListCache;try{const e=localStorage.getItem(this.FILE_LIST_PATH);return this.fileListCache=e?JSON.parse(e):this.createEmptyFileList(),this.fileListCache}catch(e){return console.error("Error reading local file list:",e),this.fileListCache=this.createEmptyFileList(),this.fileListCache}}updateFileListCache(e){this.fileListCache=e||this.createEmptyFileList();const t=this.persistFileListCache();return{cacheUpdated:!0,persisted:t}}persistFileListCache(){try{return localStorage.setItem(this.FILE_LIST_PATH,JSON.stringify(this.fileListCache)),!0}catch(e){return this.handleStoragePersistError(e),!1}}createEmptyFileList(){return{files:[],directories:[]}}handleStoragePersistError(e){console.warn("File list is kept in memory because localStorage persistence failed:",e);try{localStorage.removeItem(this.FILE_LIST_PATH)}catch(t){console.warn("Failed to remove stale file list cache:",t)}this.storageWarningShown||(this.storageWarningShown=!0,ye.nk.warning(Ji.Ay.global.t("dashboard.fileListMemoryCacheWarning")))}addFile(e){try{const t=this.getMutableFileList();return t.files.push(e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error adding file:",t),!1}}addFolder(e){try{const t=this.getMutableFileList();return!t.directories.includes(e)&&(t.directories.push(e),this.updateFileListCache(t).cacheUpdated)}catch(t){return console.error("Error adding folder:",t),!1}}moveFile(e,t,a=!1,i=""){try{let n=this.getMutableFileList();if(a){const t=n.directories.indexOf(e);-1!==t&&n.directories.splice(t,1)}else{const t=n.files.findIndex(t=>t.name===e);-1!==t&&n.files.splice(t,1)}if(t.startsWith(i)){const e=t.substring(i.length).split("/");if(e.length>1){const t=i+e[0];n.directories.includes(t)||n.directories.push(t)}}return this.updateFileListCache(n).cacheUpdated}catch(n){return console.error("Error moving file:",n),!1}}removeFile(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>t.name!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing file:",t),!1}}removeFolder(e){try{let t=this.getMutableFileList();return t.files=t.files.filter(t=>!t.name.startsWith(e+"/")),t.directories=t.directories.filter(t=>t!==e),this.updateFileListCache(t).cacheUpdated}catch(t){return console.error("Error removing folder:",t),!1}}getFilesInFolder(e){try{const t=this.getMutableFileList(),a=t.files.filter(t=>t.name.startsWith(e+"/")),i=t.directories.filter(t=>t.startsWith(e+"/"));return{files:a,directories:i}}catch(t){return console.error("Error getting files in folder:",t),{files:[],directories:[]}}}buildFilterParams(e){let t="";return e.accessStatus&&e.accessStatus.length>0&&(t+=`&accessStatus=${encodeURIComponent(e.accessStatus.join(","))}`),e.listType&&e.listType.length>0&&(t+=`&listType=${encodeURIComponent(e.listType.join(","))}`),e.label&&e.label.length>0&&(t+=`&label=${encodeURIComponent(e.label.join(","))}`),e.fileType&&e.fileType.length>0&&(t+=`&fileType=${encodeURIComponent(e.fileType.join(","))}`),e.channel&&e.channel.length>0&&(t+=`&channel=${encodeURIComponent(e.channel.join(","))}`),e.channelName&&e.channelName.length>0&&(t+=`&channelName=${encodeURIComponent(e.channelName.join(","))}`),t}async refreshFileList(e,t="",a="",i="",n={}){t=t.trim();try{let s=`/api/manage/list?count=60&dir=${e}&search=${encodeURIComponent(t)}`;a&&(s+=`&includeTags=${encodeURIComponent(a)}`),i&&(s+=`&excludeTags=${encodeURIComponent(i)}`),s+=this.buildFilterParams(n);const r=await(0,E.A)(s,{method:"GET"}),o=await r.json();return o.isIndexedResponse||ye.nk.warning(Ji.Ay.global.t("dashboard.indexingWarning")),this.updateFileListCache(o).cacheUpdated}catch(s){return console.error("Error refreshing file list:",s),!1}}async loadMoreFiles(e,t="",a="",i="",n=60,s={}){t=t.trim();try{const r=this.getMutableFileList(),o=r.files.length;let l=`/api/manage/list?dir=${e}&start=${o}&count=${n}&search=${encodeURIComponent(t)}`;a&&(l+=`&includeTags=${encodeURIComponent(a)}`),i&&(l+=`&excludeTags=${encodeURIComponent(i)}`),l+=this.buildFilterParams(s);const d=await(0,E.A)(l,{method:"GET"}),c=await d.json();return r.files.push(...c.files),this.updateFileListCache(r).cacheUpdated}catch(r){return console.error("Error loading more files:",r),{files:[],directories:[]}}}}const tn=new en;var an=a(62388),nn=a(48903),sn=a(90144);function rn(e,t){return!(e.right<=t.left||e.left>=t.right||e.bottom<=t.top||e.top>=t.bottom)}function on(e,t){const a=Math.min(e.x,t.x),i=Math.min(e.y,t.y),n=Math.abs(t.x-e.x),s=Math.abs(t.y-e.y);return{left:a,top:i,width:n,height:s,right:a+n,bottom:i+s}}function ln(e){const{modes:t,mainSelector:a=".main-container",viewMode:i,items:n}=e,s=(0,sn.KR)(!1),r=(0,sn.KR)({left:0,top:0,width:0,height:0,right:0,bottom:0});let o=null,l=[],d=!1;const h=768;let u=!1;const f=50,m=10;let p=null,g="";function b(){const e=(0,sn.BA)(i);return t[e]||void 0}function v(){const e=(0,sn.BA)(i);return("card"===e||"list"===e)&&window.innerWidth>h}function k(){v()?u||A():u&&(U(),I())}function y(e){const t=e.target,i=t.closest(a);if(!i)return!1;const n=b();if(n){const e=t.closest(n.itemSelector);if(e){const t=(0,sn.BA)(n.containerRef);if(t&&t.contains(e))return!1}}const s=t.closest("button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container");return!s}function _(e){return e.shiftKey||e.ctrlKey||e.metaKey}function w(){const e=(0,sn.BA)(n);l=e.map(e=>!!e.selected)}let F=0;function C(){function e(){const t=window.innerHeight;let a=0;F>=t-f?a=m:F<=f&&(a=-m),0!==a&&(window.scrollBy(0,a),o&&(o.y-=a,r.value=on(o,{x:r.value.right>=o.x?r.value.right:r.value.left,y:F}),S())),p=requestAnimationFrame(e)}null===p&&(p=requestAnimationFrame(e))}function T(){null!==p&&(cancelAnimationFrame(p),p=null)}function $(){g=document.body.style.userSelect,document.body.style.userSelect="none"}function L(){document.body.style.userSelect=g}function S(){const e=b();if(!e)return;const t=(0,sn.BA)(e.containerRef);if(!t)return;const a=(0,sn.BA)(n),i=r.value,s={left:i.left,top:i.top,right:i.right,bottom:i.bottom},o=t.querySelectorAll(e.itemSelector);a.forEach((e,t)=>{const a=o[t];if(!a)return;const i=a.getBoundingClientRect(),n={left:i.left,top:i.top,right:i.right,bottom:i.bottom},r=rn(s,n);d&&l[t]?e.selected=!0:e.selected=r})}function x(e){if(0===e.button&&y(e)){if(o={x:e.clientX,y:e.clientY},d=_(e),w(),!d){const e=(0,sn.BA)(n);e.forEach(e=>{e.selected=!1})}s.value=!0,r.value=on(o,o),$(),document.addEventListener("mousemove",D),document.addEventListener("mouseup",E)}}function D(e){if(!s.value||!o)return;const t={x:e.clientX,y:e.clientY};F=e.clientY,r.value=on(o,t),S();const a=window.innerHeight;F<=f||F>=a-f?C():T()}function E(e){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",E))}function A(){u||(document.addEventListener("mousedown",x),u=!0)}function I(){u&&(document.removeEventListener("mousedown",x),u=!1)}function U(){s.value&&(T(),L(),s.value=!1,r.value={left:0,top:0,width:0,height:0,right:0,bottom:0},o=null,document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",E))}function z(){k()}return(0,c.wB)(()=>(0,sn.BA)(i),()=>{U(),k()}),(0,c.sV)(()=>{v()&&A(),window.addEventListener("resize",z)}),(0,c.xo)(()=>{U(),L(),T(),I(),window.removeEventListener("resize",z)}),{isDragging:s,selectionRect:r}}var dn={name:"AdminDashBoard",mixins:[nn.A],data(){return{Number:0,directFileCount:0,directFolderCount:0,showLogoutButton:!1,tableData:[],tempSearch:"",search:"",searchKeywords:"",searchIncludeTags:"",searchExcludeTags:"",isSearchMode:!1,currentPage:1,pageSize:15,selectedFiles:[],sortOption:"dateDesc",isUploading:!1,showdetailDialog:!1,detailFile:null,activeUrlTab:"originUrl",defaultUrlFormat:"originUrl",showUrlDialog:!1,useCustomUrl:"false",customUrlPrefix:"",loading:!1,currentPath:"",refreshLoading:!1,showTagDialog:!1,showBatchTagDialog:!1,currentTagFile:"",viewMode:"card",showMobileActionModal:!1,mobileActionFile:null,mobileActionIndex:-1,mobileActionIsFolder:!1,longPressTimer:null,showMobileDirectoryDrawer:!1,jumpPage:"",filters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},channelNameOptions:[],showMoveDialog:!1,moveTargetPath:"/",moveFileKey:"",moveFileIndex:-1,isBatchMove:!1}},components:{DashboardTabs:ti.A,TagManagementDialog:Me,BatchTagDialog:Ce,SkeletonLoader:Ta,FileCard:ua,FolderCard:_a,FileListItem:Vt,FileDetailDialog:ct,BatchActionBar:kt,MobileActionSheet:Q,MobileDirectoryDrawer:X,FilterDropdown:ei,MoveFileDialog:z,LanguageSwitcher:Yi.A},setup(){const e=(0,sn.KR)(null),t=(0,sn.KR)(null),a=(0,sn.KR)("card"),i=(0,sn.KR)([]),{isDragging:n,selectionRect:s}=ln({modes:{card:{containerRef:e,itemSelector:".img-card"},list:{containerRef:t,itemSelector:".list-item"}},viewMode:a,items:i});return{cardContainerRef:e,listContainerRef:t,viewModeRef:a,itemsRef:i,isDragging:n,selectionRect:s}},computed:{...(0,Hi.L8)(["adminUrlSettings","userConfig"]),filteredTableData(){return this.tableData},totalPages(){return Math.ceil(this.filteredTableData.length/this.pageSize)||1},realTotalPages(){const e=this.directFolderCount+this.directFileCount;return Math.ceil(e/this.pageSize)||1},activeFilterCount(){return Object.values(this.filters).reduce((e,t)=>e+(Array.isArray(t)?t.length:0),0)},hasSearchOrFilter(){return this.isSearchMode||this.activeFilterCount>0},paginatedTableData(){const e=this.sortData(this.filteredTableData),t=(this.currentPage-1)*this.pageSize,a=t+this.pageSize;let i=e.slice(t,a);const n=i.filter(e=>this.isImage(e)).map(e=>this.getFileLink(e.name));return i.forEach(e=>{this.isImage(e)&&(e.previewSrcList=n.slice(n.indexOf(this.getFileLink(e.name))).concat(n.slice(0,n.indexOf(this.getFileLink(e.name)))))}),i.forEach(e=>{"TelegramNew"===e.metadata?.Channel||"Telegram"===e.metadata?.Channel?e.channelTag="TG":"CloudflareR2"===e.metadata?.Channel?e.channelTag="R2":"S3"===e.metadata?.Channel?e.channelTag="S3":"Discord"===e.metadata?.Channel?e.channelTag="DC":"HuggingFace"===e.metadata?.Channel?e.channelTag="HF":"WebDAV"===e.metadata?.Channel?e.channelTag="WD":"External"===e.metadata?.Channel?e.channelTag=this.$t("dashboard.externalTag"):e.channelTag=this.$t("dashboard.unknownTag")}),i},sortIcon(){return"dateDesc"===this.sortOption?"sort-amount-down":"sort-alpha-up"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},detailDialogWidth(){return window.innerWidth>768?"70%":"90%"},accessType(){return"White"===this.detailFile?.metadata?.ListType?this.$t("filter.normal"):"Block"===this.detailFile?.metadata?.ListType||"adult"===this.detailFile?.metadata?.Label?this.$t("filter.blocked"):this.$t("filter.normal")},allUrl(){return"External"===this.detailFile?.metadata?.Channel?{originUrl:`${this.detailFile?.metadata?.ExternalLink}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}:{originUrl:`${this.rootUrl}${this.detailFile?.name}`,mdUrl:`![${this.detailFile?.metadata?.FileName||this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,htmlUrl:`${this.detailFile?.metadata?.FileName||this.detailFile?.name}`,bbUrl:`[img]${this.rootUrl}${this.detailFile?.name}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||this.$t("fileDetail.unknown"),S3Location:this.detailFile?.metadata?.S3Location||this.$t("fileDetail.unknown"),S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||this.$t("fileDetail.unknown")}},tableColumnNum(){return window.innerWidth>768?3:1},tablePreviewSpan(){return window.innerWidth>768?2:1},disableTooltip(){return window.innerWidth<768},selectPage(){return this.paginatedTableData.every(e=>e.selected)},selectedPageFiles(){return this.paginatedTableData.some(e=>e.selected)},selectPageIcon(){return this.selectPage?"check-square":this.selectedPageFiles?"minus-square":"square"},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.userConfig?.urlPrefix||`${document.location.origin}/file/`},isSelectAll:{get(){return this.paginatedTableData.length>0&&this.paginatedTableData.every(e=>e.selected)},set(e){this.paginatedTableData.forEach(t=>t.selected=e)}},isIndeterminate(){const e=this.paginatedTableData.filter(e=>e.selected).length;return e>0&&ee.selected&&!this.selectedFiles.includes(e))),this.selectedFiles=this.selectedFiles.filter(e=>e.selected),this.selectedFiles=this.selectedFiles.filter(t=>e.includes(t))},deep:!0},sortOption(e){localStorage.setItem("sortOption",e)},defaultUrlFormat(e){localStorage.setItem("defaultUrlFormat",e)},showdetailDialog(e){e&&(this.activeUrlTab=this.defaultUrlFormat||"originUrl")},customUrlPrefix(e){this.$store.commit("setAdminUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setAdminUrlSettings",{key:"useCustomUrl",value:e})},currentPath(e){this.tableData.forEach(e=>e.selected=!1)}},methods:{toggleViewMode(){this.viewMode="card"===this.viewMode?"list":"card",localStorage.setItem("viewMode",this.viewMode)},handleSelectAllPage(e){this.paginatedTableData.forEach(t=>t.selected=e)},handleTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!1,this.showMobileActionModal=!0},500)},handleTouchEnd(){this.longPressTimer&&(clearTimeout(this.longPressTimer),this.longPressTimer=null)},handleFolderTouchStart(e,t){this.longPressTimer=setTimeout(()=>{this.mobileActionFile=e,this.mobileActionIndex=t,this.mobileActionIsFolder=!0,this.showMobileActionModal=!0},500)},handleMobileAction(e){const t=this.mobileActionFile,a=this.mobileActionIndex;if(this.showMobileActionModal=!1,t)switch(e){case"detail":this.openDetailDialog(a,t.name);break;case"copy":this.handleCopy(a,t.name);break;case"folderCopy":this.handleFolderCopy(t.name);break;case"download":this.handleDownload(t.name);break;case"move":this.handleMove(a,t.name);break;case"delete":this.handleDelete(a,t.name);break;case"tag":this.handleTagManagement(t.name);break}},handleGoBack(){const e=this.currentPath.split("/").filter(Boolean);if(e.length>0){e.pop();const t=e.join("/");this.navigateToFolder(t)}this.showMobileDirectoryDrawer=!1},getTagColor(e){const t=["linear-gradient(135deg, #667eea 0%, #764ba2 100%)","linear-gradient(135deg, #f093fb 0%, #f5576c 100%)","linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)","linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)","linear-gradient(135deg, #fa709a 0%, #fee140 100%)","linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)"];return t[e%t.length]},handleVideoHover(e,t){const a=e.target;t?a.play().catch(()=>{}):(a.pause(),a.currentTime=0)},formatFileSize(e){if(!e||0===e)return"-";if(e=Number(e),isNaN(e))return"-";const t=["B","KB","MB","GB","TB"];let a=0;while(e>=1024&&a0?1:0)+" "+t[a]},handleSearch(){if(this.search=this.tempSearch,this.isSearchMode=""!==this.search.trim(),this.currentPage=1,this.search&&this.search.trim()){const e=[],t=[];let a=this.search;const i=/-#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(i,(e,a)=>(t.push(a.toLowerCase())," "));const n=/#([\w\u4e00-\u9fa5\u3040-\u309f\u30a0-\u30ff\uac00-\ud7af\.\+\-]+)/g;a=a.replace(n,(t,a)=>(e.push(a.toLowerCase())," ")),this.searchKeywords=a.replace(/\s+/g," ").trim(),this.searchIncludeTags=e.join(","),this.searchExcludeTags=t.join(","),console.log("Search keywords:",this.searchKeywords),console.log("Include tags:",this.searchIncludeTags),console.log("Exclude tags:",this.searchExcludeTags)}else this.searchKeywords="",this.searchIncludeTags="",this.searchExcludeTags="";this.refreshFileList()},handleFilterChange({type:e,filters:t}){this.filters=t,this.currentPage=1,this.refreshFileList()},clearFilters(){this.filters={listType:[],label:[],fileType:[],channel:[],channelName:[]},this.currentPage=1,this.refreshFileList()},async extractChannelNames(){try{const e=await(0,E.A)("/api/channels?includeDisabled=true",{method:"GET"});if(e.ok){const t=await e.json(),a=[],i={telegram:"Telegram",cfr2:"Cloudflare R2",s3:"S3",discord:"Discord",huggingface:"HuggingFace",webdav:"WebDAV"};Object.entries(t).forEach(([e,t])=>{Array.isArray(t)&&t.length>0&&t.forEach(t=>{t.name&&a.push({name:t.name,type:t.type,typeLabel:i[e]||e,value:`${t.type}:${t.name}`})})}),a.sort((e,t)=>e.type!==t.type?e.type.localeCompare(t.type):e.name.localeCompare(t.name)),this.channelNameOptions=a}}catch(e){console.error("Failed to fetch channel names:",e)}},handleDownload(e){const t=document.createElement("a");t.href=this.getFileLink(e),t.download=e,t.click()},openDetailDialog(e,t){this.detailFile=this.paginatedTableData[e],this.showdetailDialog=!0},handleTabClick(e){this.activeUrlTab=e.props.name},handleUrlClick(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("dashboard.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("dashboard.copyFailed")})})},handleDetailDelete(e){this.$confirm(this.$t("dashboard.deleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/delete/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&this.tableData.splice(t,1)}}).then(()=>{this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.deleteSuccess")),this.showdetailDialog=!1}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBlock(e){this.$confirm(this.$t("dashboard.blockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/block/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="Block")}}).then(()=>{this.$message.success(this.$t("dashboard.blockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.blockFailed")))}).catch(()=>console.log("Block cancelled"))},handleWhite(e){this.$confirm(this.$t("dashboard.whiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/white/${e}`,{method:"GET"}).then(t=>{if(!t.ok)return Promise.reject("Request failed");{const t=this.tableData.findIndex(t=>t.name===e);-1!==t&&(this.tableData[t].metadata.ListType="White")}}).then(()=>{this.$message.success(this.$t("dashboard.whiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.whiteFailed")))}).catch(()=>console.log("White cancelled"))},handleDelete(e,t){const a=this.tableData.find(e=>e.name===t).isFolder;this.$confirm(a?this.$t("dashboard.deleteFolderConfirm"):this.$t("dashboard.deleteFileConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{(0,E.A)(`/api/manage/delete/${t}?folder=${a}`,{method:"GET"}).then(e=>{if(!e.ok)return Promise.reject("Request failed");{const e=this.tableData.findIndex(e=>e.name===t);-1!==e&&this.tableData.splice(e,1)}}).then(()=>{this.updateStats(-1,!1),tn.removeFile(t),this.$message.success(this.$t("dashboard.deleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.deleteFailed")))}).catch(()=>console.log("Delete cancelled"))},handleBatchDelete(){this.$confirm(this.$t("dashboard.batchDeleteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>{const t=e.isFolder;return(0,E.A)(`/api/manage/delete/${e.name}?folder=${t}`,{method:"GET"})});Promise.all(e).then(e=>{let t=0;e.forEach((e,a)=>{if(e.ok){t++;const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[a].name);-1!==e&&this.tableData.splice(e,1),tn.removeFile(this.selectedFiles[a].name)}}),this.selectedFiles=[],this.updateStats(-t,!1),this.$message.success(this.$t("dashboard.batchDeleteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchDeleteFailed")))}).catch(()=>console.log("Batch delete cancelled"))},async handleBatchCopy(){const e=this.selectedFiles.filter(e=>!e.isFolder),t=this.selectedFiles.filter(e=>e.isFolder);let a=null;t.length>0&&(a=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")}));try{let n=[...e];for(const e of t)try{const t=await(0,E.A)(`/api/manage/list?dir=${encodeURIComponent(e.name)}&recursive=true&count=-1`,{method:"GET"}),a=await t.json();a.files&&a.files.length>0&&(n=n.concat(a.files))}catch(i){console.error(`获取文件夹 ${e.name} 内容失败:`,i)}if(a&&a.close(),0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===s.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const r=s.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(r),this.$message.success(this.$t("dashboard.batchCopySuccess",{count:s.length}))):this.copyToClipboardFallback(r)}catch(i){a&&a.close(),console.error("Batch copy failed:",i),this.$message.error(this.$t("dashboard.batchCopyFailed"))}},copyToClipboardFallback(e){const t=document.createElement("textarea");document.body.appendChild(t),t.style.position="fixed",t.style.clip="rect(0 0 0 0)",t.style.top="10px",t.value=e,t.select(),document.execCommand("copy"),document.body.removeChild(t),this.$message.success(this.$t("dashboard.batchCopyLinksSuccess"))},handleCopy(e,t){let a="";if("External"===this.paginatedTableData[e].metadata?.Channel)switch(this.defaultUrlFormat){case"originUrl":a=this.paginatedTableData[e].metadata?.ExternalLink;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.paginatedTableData[e].metadata?.ExternalLink})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.paginatedTableData[e].metadata?.ExternalLink}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}else switch(this.defaultUrlFormat){case"originUrl":a=`${this.rootUrl}${t}`;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.rootUrl}${t})`;break;case"htmlUrl":a=`${this.paginatedTableData[e].metadata?.FileName||t}`;break;case"bbUrl":a=`[img]${this.rootUrl}${t}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}navigator.clipboard?navigator.clipboard.writeText(a).then(()=>this.$message.success(this.$t("dashboard.copyFileLinkSuccess"))):this.copyToClipboardFallback(a)},async loadMoreData(){this.loading=!0;try{await tn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,60,this.filters),await this.fetchFileList()}catch(e){this.$message.error(this.$t("dashboard.loadMoreFailed"))}finally{this.loading=!1}},updateStats(e,t=!1){t?this.Number=e:this.Number+=e},sort(e){this.sortOption=e},sortData(e){const t=e.filter(e=>e.isFolder),a=e.filter(e=>!e.isFolder);return"dateDesc"===this.sortOption?(t.sort((e,t)=>new Date(t.metadata?.TimeStamp)-new Date(e.metadata?.TimeStamp)),a.sort((e,t)=>new Date(t.metadata?.TimeStamp)-new Date(e.metadata?.TimeStamp))):(t.sort((e,t)=>e.name.localeCompare(t.name)),a.sort((e,t)=>e.name.localeCompare(t.name))),t.concat(a)},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleLogout(){const e="/api/auth/logout";fetch(e,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({authType:"admin"})}).finally(()=>{this.$store.commit("setAdminLoggedIn",!1),this.$router.push("/adminLogin")})},handleSelectPage(){this.selectPage?this.paginatedTableData.forEach(e=>e.selected=!1):this.paginatedTableData.forEach(e=>e.selected=!0)},clearSelection(){this.tableData.forEach(e=>e.selected=!1),this.selectedFiles=[]},handleBatchAction(e){"copy"===e?this.handleBatchCopy():"delete"===e?this.handleBatchDelete():"download"===e?this.handleBatchDownload():"move"===e?this.handleBatchMove():"tagManagement"===e?this.handleBatchTagManagement():"ban"===e?this.handleBatchBlock():"white"===e&&this.handleBatchWhite()},handleMove(e,t){this.moveFileKey=t,this.moveFileIndex=e,this.isBatchMove=!1,this.moveTargetPath="/",this.showMoveDialog=!0},handleBatchMove(){this.isBatchMove=!0,this.moveTargetPath="/",this.showMoveDialog=!0},confirmMove(e){const t=e,a=(0,an.G)(t);if(!a.valid)return void this.$message.error(a.error);const i=t.replace(/^\/+/,"")+(t.endsWith("/")||""===t?"":"/");i!==this.currentPath?(this.showMoveDialog=!1,this.isBatchMove?this.executeBatchMove(i):this.executeSingleMove(i)):this.$message.warning(this.$t("dashboard.moveTargetSameAsCurrent"))},executeSingleMove(e){const t=this.moveFileKey,a=this.tableData.find(e=>e.name===t)?.isFolder;(0,E.A)(`/api/manage/move/${t}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"}).then(i=>{if(!i.ok)return Promise.reject("Request failed");{const i=this.tableData.findIndex(e=>e.name===t);if(-1!==i){const n=e+t.split("/").pop();tn.moveFile(t,n,a,this.currentPath),this.tableData.splice(i,1),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})})}this.updateStats(-1,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},executeBatchMove(e){const t=this.selectedFiles.map(t=>{const a=t.isFolder;return(0,E.A)(`/api/manage/move/${t.name}?folder=${a}&dist=${encodeURIComponent(e)}`,{method:"GET"})});Promise.all(t).then(t=>{let a=0;t.forEach((t,i)=>{if(t.ok){a++;const t=this.selectedFiles[i];t.selected=!1;const n=this.tableData.findIndex(e=>e.name===t.name);if(-1!==n){const a=e+t.name.split("/").pop();tn.moveFile(t.name,a,t.isFolder,this.currentPath),this.tableData.splice(n,1)}}}),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})}),this.updateStats(-a,!1),this.$message.success(this.$t("dashboard.moveSuccess"))}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error(this.$t("dashboard.moveFailed")))},handleBatchBlock(){this.$confirm(this.$t("dashboard.batchBlockConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,E.A)(`/api/manage/block/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="Block")}}),this.$message.success(this.$t("dashboard.batchBlockSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchBlockFailed")))}).catch(()=>console.log("Batch block cancelled"))},handleBatchWhite(){this.$confirm(this.$t("dashboard.batchWhiteConfirm"),this.$t("dashboard.deleteConfirmTitle"),{confirmButtonText:this.$t("dashboard.deleteConfirmOk"),cancelButtonText:this.$t("dashboard.deleteConfirmCancel"),type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,E.A)(`/api/manage/white/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="White")}}),this.$message.success(this.$t("dashboard.batchWhiteSuccess"))}).catch(()=>this.$message.error(this.$t("dashboard.batchWhiteFailed")))}).catch(()=>console.log("Batch white cancelled"))},handleBatchDownload(){const e=new(Qi()),t=e.folder("files"),a={},i=this.selectedFiles.map(async e=>{if(e.isFolder)return;const i=await fetch(this.getFileLink(e.name)),n=await i.blob();let s=e.metadata?.FileName||e.name;if(a[s]){const t=s.substring(s.lastIndexOf(".")),i=s.substring(0,s.lastIndexOf("."));s=`${i}(${a[s]})${t}`,a[e.name]++}else a[s]=1;t.file(s,n)});Promise.all(i).then(()=>e.generateAsync({type:"blob"})).then(e=>{const t=document.createElement("a");t.href=URL.createObjectURL(e),t.download="files.zip",t.click()})},isVideo(e){if(this.isAudio(e))return!1;let t=e.metadata?.FileType?.includes("video");if(!t){const a=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","rmvb","3gp","mpg","mpeg","m4v","f4v","rm","asf","dat","ts","vob","swf","divx","xvid","m2ts","mts","m2v","3g2","3gp2","3gpp","3gpp2","mpe","m1v","mpv","mpv2","mp2v","m2t","m2ts","m2v","m4v"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isAudio(e){let t=e.metadata?.FileType?.includes("audio");if(!t){const a=["mp3","wav","flac","aac","ogg","wma","m4a","ape","aiff","alac","opus","mid","midi","m4b","m4p","m4r","amr","au","ra","ram"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isImage(e){let t=e.metadata?.FileType?.includes("image");if(!t){const a=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","psd","ai","eps","raw","cr2","nef","orf","sr2","dng","arw","rw2","raf","pef","x3f","srf","erf","mrw","nrw","kdc","dcr","mef","mos","crw","raf","rwl","srw","3fr","fff","iiq","qtk","bay","k25","kdc","dcs","drf","dng","erf","kdc","mdc","mef","mos","mrw","nef","nrw","orf","pef","ptx","pxn","r3d","raf","raw","rwl","rw2","rwz","sr2","srf","x3f"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},getFileLink(e){const t=`/file/${e}?from=admin`;return t},handlePageChange(e){this.currentPage=e,this.currentPage===Math.ceil(this.tableData.length/this.pageSize)&&this.loadMoreData()},handleJumpPage(){const e=parseInt(this.jumpPage);isNaN(e)||e<1?this.$message.warning(this.$t("dashboard.invalidPageNumber")):e>this.realTotalPages?this.$message.warning(this.$t("dashboard.pageExceedsMax",{max:this.realTotalPages})):(e>this.totalPages?(this.$message.info(this.$t("dashboard.loadingData")),this.loadMoreDataUntilPage(e)):this.currentPage=e,this.jumpPage="")},async loadMoreDataUntilPage(e){this.loading=!0;try{const t=e*this.pageSize,a=this.filteredTableData.filter(e=>e.isFolder).length,i=this.filteredTableData.filter(e=>!e.isFolder).length,n=Math.max(0,t-a-i);n>0&&(await tn.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,n,this.filters),await this.fetchFileList()),this.currentPage=Math.min(e,this.totalPages)}catch(t){this.$message.error(this.$t("dashboard.loadDataFailed"))}finally{this.loading=!1}},isFolder(e){if(e.isFolder)return!0;let t=e.name;if(t.startsWith("http")&&(t=t.split("/file/")[1]),t&&t.includes("/")){const e=this.currentPath?t.substring(this.currentPath.length):t;return""===this.currentPath?!t.split("/")[0].includes("."):e.includes("/")}return!1},getFolderName(e){let t="";if(e&&e.includes("/")){const a=e.split("/");if(""===this.currentPath)t=a[0];else{const a=e.substring(this.currentPath.length);t=a.split("/")[0]}}else t=e;const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileName(e){let t=e.split("/").pop();const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileNameStart(e){if(!e)return"";if(e.length<=30)return e;const t=e.lastIndexOf(".");if(t>0){const a=e.substring(0,t),i=Math.min(a.length,Math.floor(.6*e.length));return a.substring(0,i)}return e.substring(0,Math.floor(.6*e.length))},getFileNameEnd(e){if(!e)return"";if(e.length<=30)return"";const t=e.lastIndexOf(".");if(t>0){const a=e.substring(t),i=e.substring(0,t),n=Math.min(8,Math.floor(.2*i.length));return"…"+i.substring(i.length-n)+a}const a=Math.min(10,Math.floor(.3*e.length));return"…"+e.substring(e.length-a)},enterFolder(e){this.currentPath=e+(e.endsWith("/")?"":"/"),this.refreshFileList()},navigateToFolder(e){this.currentPath=e?e+(e.endsWith("/")?"":"/"):"",this.refreshFileList()},async fetchFileList(){this.loading=!0;try{const e=tn.getLocalFileList(),t=new Set(e.directories||[]),a=e.files||[],i=Array.from(t).map(e=>({name:e,isFolder:!0,selected:!1,metadata:{FileName:e.split("/").pop()}})),n=a.map(e=>({name:e.name,isFolder:!1,selected:!1,metadata:e.metadata}));this.tableData=[...i,...n],this.updateStats(e.totalCount,!0),this.directFileCount=e.directFileCount||0,this.directFolderCount=e.directFolderCount||0}catch(e){console.error("Error fetching file list:",e),this.$message.error(this.$t("dashboard.fetchFileListFailed"))}finally{this.loading=!1}},async refreshFileList(){this.refreshLoading=!0,this.loading=!0;try{const e=await tn.refreshFileList(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,this.filters);if(!e)throw new Error("Refresh failed");await this.fetchFileList()}catch(e){!e.message?.includes("Unauthorized")&&this.$store.state.adminLoggedIn&&(console.error("Error refreshing file list:",e),this.$message.error(this.$t("dashboard.refreshFailed")))}finally{this.refreshLoading=!1,this.loading=!1}},async refreshLocalFileList(){this.refreshLoading=!0,this.loading=!0;try{await this.fetchFileList()}catch(e){console.error("Error refreshing local file list:",e),this.$message.error(this.$t("dashboard.refreshFailed"))}finally{this.refreshLoading=!1,this.loading=!1}},handleTagManagement(e){this.currentTagFile=e,this.showTagDialog=!0},handleBatchTagManagement(){0!==this.selectedFiles.length?this.showBatchTagDialog=!0:this.$message.warning(this.$t("dashboard.selectFilesFirst"))},async handleTagsUpdated(e){const t=this.tableData.findIndex(e=>e.name===this.currentTagFile);-1!==t&&(this.tableData[t].metadata||(this.tableData[t].metadata={}),this.tableData[t].metadata.Tags=e,this.showdetailDialog&&this.detailFile?.name===this.currentTagFile&&(this.detailFile.metadata||(this.detailFile.metadata={}),this.detailFile.metadata.Tags=e))},async handleBatchTagsUpdated(){await this.refreshLocalFileList()},handleMetadataUpdated(e,t){const a=this.tableData.findIndex(t=>t.name===e);-1!==a&&(this.tableData[a].metadata={...this.tableData[a].metadata,...t}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.metadata={...this.detailFile.metadata,...t})},handleFileRenamed(e,t,a){const i=this.tableData.findIndex(t=>t.name===e);-1!==i&&(this.tableData[i].name=t,this.tableData[i].metadata={...this.tableData[i].metadata,...a}),this.detailFile&&this.detailFile.name===e&&(this.detailFile.name=t,this.detailFile.metadata={...this.detailFile.metadata,...a},this.showdetailDialog=!1,this.$nextTick(()=>{this.showdetailDialog=!0}))},generateFileLink(e,t){const a="External"===t?.Channel,i=a?t?.ExternalLink:`${this.rootUrl}${e}`,n=t?.FileName||e;switch(this.defaultUrlFormat){case"originUrl":return i;case"mdUrl":return`![${n}](${i})`;case"htmlUrl":return`${n}`;case"bbUrl":return`[img]${i}[/img]`;case"tgId":return t?.TgFileId||"";case"s3Location":return t?.S3Location||"";default:return i}},async handleFolderCopy(e){const t=this.$loading({lock:!0,text:this.$t("dashboard.fetchingFileList")});try{const a=await(0,E.A)(`/api/manage/list?dir=${encodeURIComponent(e)}&recursive=true&count=-1`,{method:"GET"}),i=await a.json();if(t.close(),!i.files||0===i.files.length)return void this.$message.warning(this.$t("dashboard.folderEmptyNoLinks"));const n=i.files.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===n.length)return void this.$message.warning(this.$t("dashboard.noLinksAvailable"));const s=n.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length}))):(this.copyToClipboardFallback(s),this.$message.success(this.$t("dashboard.copiedFileLinks",{count:n.length})))}catch(a){t.close(),console.error("Copy folder links failed:",a),this.$message.error(this.$t("dashboard.copyFolderLinksFailed"))}}},mounted(){this.initializeBackground("adminBkImg",".container",!1,!0),this.loading=!0,this.showLogoutButton=this.$store.state.adminLoggedIn,this.refreshFileList().then(()=>this.extractChannelNames()).catch(e=>{"Unauthorized"!==e.message&&this.$message.error(this.$t("dashboard.syncDataError"))}).finally(()=>{this.loading=!1}),this.customUrlPrefix=this.adminUrlSettings.customUrlPrefix,this.useCustomUrl=this.adminUrlSettings.useCustomUrl;const e=localStorage.getItem("viewMode");"card"!==e&&"list"!==e||(this.viewMode=e)}};const cn=(0,I.A)(dn,[["render",Gi],["__scopeId","data-v-437b7a30"]]);var hn=cn},23597:function(e,t,a){"use strict";a(85331)},33892:function(e,t,a){"use strict";a.d(t,{A:function(){return $}});var i=a(99114),n=(a(85331),a(30694),a(49385)),s=(a(37952),a(30650)),r=(a(19104),a(31802)),o=(a(13378),a(80047)),l=(a(99648),a(56768)),d=a(45130),c=a(24232);const h={class:"directory-tree-picker"},u={class:"tree-container"},f={key:0,class:"error-state"},m={class:"error-text"},p={class:"node-label"},g={class:"tree-container"},b={key:0,class:"error-state"},v={class:"error-text"},k={class:"node-label"};function y(e,t,a,y,_,w){const F=(0,l.g2)("font-awesome-icon"),C=o.S2,T=r.qk,$=s.Vc,L=n.pw,S=i.A;return(0,l.uX)(),(0,l.CE)("div",h,[w.isDesktop?((0,l.uX)(),(0,l.Wv)($,{key:0,visible:_.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>_.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,l.k6)(()=>[(0,l.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",u,[_.error?((0,l.uX)(),(0,l.CE)("div",f,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",m,(0,c.v_)(_.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRef",data:_.treeData,props:_.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",p,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[S,_.loading]])]),_:3},8,["visible"])):((0,l.uX)(),(0,l.CE)(l.FK,{key:1},[(0,l.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,l.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,l.bF)(L,{modelValue:_.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>_.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,l.k6)(()=>[(0,l.bo)(((0,l.uX)(),(0,l.CE)("div",g,[_.error?((0,l.uX)(),(0,l.CE)("div",b,[(0,l.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,l.Lk)("span",v,(0,c.v_)(_.error),1),(0,l.bF)(C,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,l.k6)(()=>[(0,l.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,l.uX)(),(0,l.Wv)(T,{key:1,ref:"treeRefMobile",data:_.treeData,props:_.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":a.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,l.k6)(({node:e,data:t})=>[(0,l.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===a.currentDirectory}])},[(0,l.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,l.Lk)("span",k,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[S,_.loading]])]),_:1},8,["modelValue","title"])],64))])}var _=a(457),w=a(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,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 _.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},C=a(71241);const T=(0,C.A)(F,[["render",y],["__scopeId","data-v-62eab69a"]]);var $=T},34396:function(e,t,a){"use strict";a(85331),a(4885)},34896:function(e,t,a){"use strict";a(85331)},37952:function(e,t,a){"use strict";a(85331),a(97197)},40670:function(e,t,a){"use strict";a(85331),a(99648),a(19104),a(85970)},44813:function(e,t,a){a(44114),a(16573),a(78100),a(77936),a(18111),a(22489),a(7588),a(79577),a(41549),a(49797),a(49631),a(35623),a(59848),function(t){e.exports=t()}(function(){return function e(t,a,i){function n(r,o){if(!a[r]){if(!t[r]){var l=void 0;if(!o&&l)return require(r,!0);if(s)return s(r,!0);var d=new Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}var c=a[r]={exports:{}};t[r][0].call(c.exports,function(e){var a=t[r][1][e];return n(a||e)},c,c.exports,e,t,a,i)}return a[r].exports}for(var s=void 0,r=0;r>2,o=(3&t)<<4|a>>4,l=1>6:64,d=2>4,a=(15&r)<<4|(o=s.indexOf(e.charAt(d++)))>>2,i=(3&o)<<6|(l=s.indexOf(e.charAt(d++))),u[c++]=t,64!==o&&(u[c++]=a),64!==l&&(u[c++]=i);return u}},{"./support":30,"./utils":32}],2:[function(e,t,a){"use strict";var i=e("./external"),n=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),r=e("./stream/DataLengthProbe");function o(e,t,a,i,n){this.compressedSize=e,this.uncompressedSize=t,this.crc32=a,this.compression=i,this.compressedContent=n}o.prototype={getContentWorker:function(){var e=new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new r("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,a){return e.pipe(new s).pipe(new r("uncompressedSize")).pipe(t.compressWorker(a)).pipe(new r("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,a){"use strict";var i=e("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new i("STORE compression")},uncompressWorker:function(){return new i("STORE decompression")}},a.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,a){"use strict";var i=e("./utils"),n=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var i=0;i<8;i++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==i.getTypeOf(e)?function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t[o])];return-1^e}(0|t,e,e.length,0):function(e,t,a,i){var s=n,r=i+a;e^=-1;for(var o=i;o>>8^s[255&(e^t.charCodeAt(o))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,a){"use strict";a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(e,t,a){"use strict";var i=null;i="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:i}},{lie:37}],7:[function(e,t,a){"use strict";var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,n=e("pako"),s=e("./utils"),r=e("./stream/GenericWorker"),o=i?"uint8array":"array";function l(e,t){r.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}a.magic="\b\0",s.inherits(l,r),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},l.prototype.flush=function(){r.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){r.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new n[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},a.compressWorker=function(e){return new l("Deflate",e)},a.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,a){"use strict";function i(e,t){var a,i="";for(a=0;a>>=8;return i}function n(e,t,a,n,r,c){var h,u,f=e.file,m=e.compression,p=c!==o.utf8encode,g=s.transformTo("string",c(f.name)),b=s.transformTo("string",o.utf8encode(f.name)),v=f.comment,k=s.transformTo("string",c(v)),y=s.transformTo("string",o.utf8encode(v)),_=b.length!==f.name.length,w=y.length!==v.length,F="",C="",T="",$=f.dir,L=f.date,S={crc32:0,compressedSize:0,uncompressedSize:0};t&&!a||(S.crc32=e.crc32,S.compressedSize=e.compressedSize,S.uncompressedSize=e.uncompressedSize);var x=0;t&&(x|=8),p||!_&&!w||(x|=2048);var D=0,E=0;$&&(D|=16),"UNIX"===r?(E=798,D|=function(e,t){var a=e;return e||(a=t?16893:33204),(65535&a)<<16}(f.unixPermissions,$)):(E=20,D|=function(e){return 63&(e||0)}(f.dosPermissions)),h=L.getUTCHours(),h<<=6,h|=L.getUTCMinutes(),h<<=5,h|=L.getUTCSeconds()/2,u=L.getUTCFullYear()-1980,u<<=4,u|=L.getUTCMonth()+1,u<<=5,u|=L.getUTCDate(),_&&(C=i(1,1)+i(l(g),4)+b,F+="up"+i(C.length,2)+C),w&&(T=i(1,1)+i(l(k),4)+y,F+="uc"+i(T.length,2)+T);var A="";return A+="\n\0",A+=i(x,2),A+=m.magic,A+=i(h,2),A+=i(u,2),A+=i(S.crc32,4),A+=i(S.compressedSize,4),A+=i(S.uncompressedSize,4),A+=i(g.length,2),A+=i(F.length,2),{fileRecord:d.LOCAL_FILE_HEADER+A+g+F,dirRecord:d.CENTRAL_FILE_HEADER+i(E,2)+A+i(k.length,2)+"\0\0\0\0"+i(D,4)+i(n,4)+g+F+k}}var s=e("../utils"),r=e("../stream/GenericWorker"),o=e("../utf8"),l=e("../crc32"),d=e("../signature");function c(e,t,a,i){r.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=a,this.encodeFileName=i,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}s.inherits(c,r),c.prototype.push=function(e){var t=e.meta.percent||0,a=this.entriesCount,i=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,r.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:a?(t+100*(a-i-1))/a:100}}))},c.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var a=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:a.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,a=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(a.dirRecord),t)this.push({data:function(e){return d.DATA_DESCRIPTOR+i(e.crc32,4)+i(e.compressedSize,4)+i(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:a.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)a=(a<<8)+this.byteAt(t);return this.index+=e,a},readString:function(e){return i.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=n},{"../utils":32}],19:[function(e,t,a){"use strict";var i=e("./Uint8ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,a){"use strict";var i=e("./DataReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},n.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},n.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},n.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./DataReader":18}],21:[function(e,t,a){"use strict";var i=e("./ArrayReader");function n(e){i.call(this,e)}e("../utils").inherits(n,i),n.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=n},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,a){"use strict";var i=e("../utils"),n=e("../support"),s=e("./ArrayReader"),r=e("./StringReader"),o=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=i.getTypeOf(e);return i.checkSupport(t),"string"!==t||n.uint8array?"nodebuffer"===t?new o(e):n.uint8array?new l(i.transformTo("uint8array",e)):new s(i.transformTo("array",e)):new r(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,a){"use strict";a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../utils");function s(e){i.call(this,"ConvertWorker to "+e),this.destType=e}n.inherits(s,i),s.prototype.processChunk=function(e){this.push({data:n.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,a){"use strict";var i=e("./GenericWorker"),n=e("../crc32");function s(){i.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,i),s.prototype.processChunk=function(e){this.streamInfo.crc32=n(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}i.inherits(s,n),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}n.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./GenericWorker");function s(e){n.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=i.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}i.inherits(s,n),s.prototype.cleanUp=function(){n.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!n.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,a){"use strict";function i(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}i.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var a=0;a "+e:e}},t.exports=i},{}],29:[function(e,t,a){"use strict";var i=e("../utils"),n=e("./ConvertWorker"),s=e("./GenericWorker"),r=e("../base64"),o=e("../support"),l=e("../external"),d=null;if(o.nodestream)try{d=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function c(e,t){return new l.Promise(function(a,n){var s=[],o=e._internalType,l=e._outputType,d=e._mimeType;e.on("data",function(e,a){s.push(e),t&&t(a)}).on("error",function(e){s=[],n(e)}).on("end",function(){try{var e=function(e,t,a){switch(e){case"blob":return i.newBlob(i.transformTo("arraybuffer",t),a);case"base64":return r.encode(t);default:return i.transformTo(e,t)}}(l,function(e,t){var a,i=0,n=null,s=0;for(a=0;a>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t}(e)},a.utf8decode=function(e){return n.nodebuffer?i.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,a,n,s,r=e.length,l=new Array(2*r);for(t=a=0;t>10&1023,l[a++]=56320|1023&n)}return l.length!==a&&(l.subarray?l=l.subarray(0,a):l.length=a),i.applyFromCharCode(l)}(e=i.transformTo(n.uint8array?"uint8array":"array",e))},i.inherits(d,r),d.prototype.processChunk=function(e){var t=i.transformTo(n.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(n.uint8array){var s=t;(t=new Uint8Array(s.length+this.leftOver.length)).set(this.leftOver,0),t.set(s,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var r=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+o[e[a]]>t?a:t}(t),l=t;r!==t.length&&(n.uint8array?(l=t.subarray(0,r),this.leftOver=t.subarray(r,t.length)):(l=t.slice(0,r),this.leftOver=t.slice(r,t.length))),this.push({data:a.utf8decode(l),meta:e.meta})},d.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=d,i.inherits(c,r),c.prototype.processChunk=function(e){this.push({data:a.utf8encode(e.data),meta:e.meta})},a.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var i=e("./support"),n=e("./base64"),s=e("./nodejsUtils"),r=e("./external");function o(e){return e}function l(e,t){for(var a=0;a>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===n.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===n.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===n.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===n.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,a,i,n=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(a<65536?t[r++]=224|a>>>12:(t[r++]=240|a>>>18,t[r++]=128|a>>>12&63),t[r++]=128|a>>>6&63),t[r++]=128|63&a);return t},a.buf2binstring=function(e){return l(e,e.length)},a.binstring2buf=function(e){for(var t=new i.Buf8(e.length),a=0,n=t.length;a>10&1023,d[i++]=56320|1023&n)}return l(d,i)},a.utf8border=function(e,t){var a;for((t=t||e.length)>e.length&&(t=e.length),a=t-1;0<=a&&128==(192&e[a]);)a--;return a<0||0===a?t:a+r[e[a]]>t?a:t}},{"./common":41}],43:[function(e,t,a){"use strict";t.exports=function(e,t,a,i){for(var n=65535&e,s=e>>>16&65535,r=0;0!==a;){for(a-=r=2e3>>1:e>>>1;t[a]=e}return t}();t.exports=function(e,t,a,n){var s=i,r=n+a;e^=-1;for(var o=n;o>>8^s[255&(e^t[o])];return-1^e}},{}],46:[function(e,t,a){"use strict";var i,n=e("../utils/common"),s=e("./trees"),r=e("./adler32"),o=e("./crc32"),l=e("./messages"),d=0,c=4,h=0,u=-2,f=-1,m=4,p=2,g=8,b=9,v=286,k=30,y=19,_=2*v+1,w=15,F=3,C=258,T=C+F+1,$=42,L=113,S=1,x=2,D=3,E=4;function A(e,t){return e.msg=l[t],t}function I(e){return(e<<1)-(4e.avail_out&&(a=e.avail_out),0!==a&&(n.arraySet(e.output,t.pending_buf,t.pending_out,a,e.next_out),e.next_out+=a,t.pending_out+=a,e.total_out+=a,e.avail_out-=a,t.pending-=a,0===t.pending&&(t.pending_out=0))}function B(e,t){s._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,z(e.strm)}function W(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function R(e,t){var a,i,n=e.max_chain_length,s=e.strstart,r=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-T?e.strstart-(e.w_size-T):0,d=e.window,c=e.w_mask,h=e.prev,u=e.strstart+C,f=d[s+r-1],m=d[s+r];e.prev_length>=e.good_match&&(n>>=2),o>e.lookahead&&(o=e.lookahead);do{if(d[(a=t)+r]===m&&d[a+r-1]===f&&d[a]===d[s]&&d[++a]===d[s+1]){s+=2,a++;do{}while(d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&d[++s]===d[++a]&&sl&&0!=--n);return r<=e.lookahead?r:e.lookahead}function O(e){var t,a,i,s,l,d,c,h,u,f,m=e.w_size;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-T)){for(n.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=a=e.hash_size;i=e.head[--t],e.head[t]=m<=i?i-m:0,--a;);for(t=a=m;i=e.prev[--t],e.prev[t]=m<=i?i-m:0,--a;);s+=m}if(0===e.strm.avail_in)break;if(d=e.strm,c=e.window,h=e.strstart+e.lookahead,u=s,f=void 0,f=d.avail_in,u=F)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F)if(i=s._tr_tally(e,e.strstart-e.match_start,e.match_length-F),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=F){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=F&&(e.ins_h=(e.ins_h<=F&&e.match_length<=e.prev_length){for(n=e.strstart+e.lookahead-F,i=s._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-F),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=n&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(a=e.pending_buf_size-5);;){if(e.lookahead<=1){if(O(e),0===e.lookahead&&t===d)return S;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var i=e.block_start+a;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,B(e,!1),0===e.strm.avail_out))return S;if(e.strstart-e.block_start>=e.w_size-T&&(B(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?D:E):(e.strstart>e.block_start&&(B(e,!1),e.strm.avail_out),S)}),new V(4,4,8,4,N),new V(4,5,16,8,N),new V(4,6,32,32,N),new V(4,4,16,16,M),new V(8,16,32,32,M),new V(8,16,128,128,M),new V(8,32,128,256,M),new V(32,128,258,1024,M),new V(32,258,258,4096,M)],a.deflateInit=function(e,t){return Z(e,t,g,15,8,0)},a.deflateInit2=Z,a.deflateReset=K,a.deflateResetKeep=j,a.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?u:(e.state.gzhead=t,h):u},a.deflate=function(e,t){var a,n,r,l;if(!e||!e.state||5>8&255),W(n,n.gzhead.time>>16&255),W(n,n.gzhead.time>>24&255),W(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),W(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(W(n,255&n.gzhead.extra.length),W(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=o(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(W(n,0),W(n,0),W(n,0),W(n,0),W(n,0),W(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),W(n,3),n.status=L);else{var f=g+(n.w_bits-8<<4)<<8;f|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(f|=32),f+=31-f%31,n.status=L,P(n,f),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(r=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),z(e),r=n.pending,n.pending!==n.pending_buf_size));)W(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),z(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),z(e),r=n.pending,n.pending===n.pending_buf_size)){l=1;break}l=n.gzindexr&&(e.adler=o(e.adler,n.pending_buf,n.pending-r,r)),0===l&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&z(e),n.pending+2<=n.pending_buf_size&&(W(n,255&e.adler),W(n,e.adler>>8&255),e.adler=0,n.status=L)):n.status=L),0!==n.pending){if(z(e),0===e.avail_out)return n.last_flush=-1,h}else if(0===e.avail_in&&I(t)<=I(a)&&t!==c)return A(e,-5);if(666===n.status&&0!==e.avail_in)return A(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==d&&666!==n.status){var m=2===n.strategy?function(e,t){for(var a;;){if(0===e.lookahead&&(O(e),0===e.lookahead)){if(t===d)return S;break}if(e.match_length=0,a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,a&&(B(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?D:E):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?S:x}(n,t):3===n.strategy?function(e,t){for(var a,i,n,r,o=e.window;;){if(e.lookahead<=C){if(O(e),e.lookahead<=C&&t===d)return S;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=F&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=F?(a=s._tr_tally(e,1,e.match_length-F),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(a=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),a&&(B(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(B(e,!0),0===e.strm.avail_out?D:E):e.last_lit&&(B(e,!1),0===e.strm.avail_out)?S:x}(n,t):i[n.level].func(n,t);if(m!==D&&m!==E||(n.status=666),m===S||m===D)return 0===e.avail_out&&(n.last_flush=-1),h;if(m===x&&(1===t?s._tr_align(n):5!==t&&(s._tr_stored_block(n,0,0,!1),3===t&&(U(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),z(e),0===e.avail_out))return n.last_flush=-1,h}return t!==c?h:n.wrap<=0?1:(2===n.wrap?(W(n,255&e.adler),W(n,e.adler>>8&255),W(n,e.adler>>16&255),W(n,e.adler>>24&255),W(n,255&e.total_in),W(n,e.total_in>>8&255),W(n,e.total_in>>16&255),W(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),z(e),0=a.w_size&&(0===o&&(U(a.head),a.strstart=0,a.block_start=0,a.insert=0),f=new n.Buf8(a.w_size),n.arraySet(f,t,m-a.w_size,a.w_size,0),t=f,m=a.w_size),l=e.avail_in,d=e.next_in,c=e.input,e.avail_in=m,e.next_in=0,e.input=t,O(a);a.lookahead>=F;){for(i=a.strstart,s=a.lookahead-(F-1);a.ins_h=(a.ins_h<>>=y=k>>>24,m-=y,0===(y=k>>>16&255))$[s++]=65535&k;else{if(!(16&y)){if(0==(64&y)){k=p[(65535&k)+(f&(1<>>=y,m-=y),m<15&&(f+=T[i++]<>>=y=k>>>24,m-=y,!(16&(y=k>>>16&255))){if(0==(64&y)){k=g[(65535&k)+(f&(1<>>=y,m-=y,(y=s-r)>3,f&=(1<<(m-=_<<3))-1,e.next_in=i,e.next_out=s,e.avail_in=i>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new i.Buf16(320),this.work=new i.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function b(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=u,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new i.Buf32(f),t.distcode=t.distdyn=new i.Buf32(m),t.sane=1,t.back=-1,c):h}function v(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,b(e)):h}function k(e,t){var a,i;return e&&e.state?(i=e.state,t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=r.wsize?(i.arraySet(r.window,t,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):(n<(s=r.wsize-r.wnext)&&(s=n),i.arraySet(r.window,t,a-n,s,r.wnext),(n-=s)?(i.arraySet(r.window,t,a-n,n,0),r.wnext=n,r.whave=r.wsize):(r.wnext+=s,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,a.check=s(a.check,O,2,0),_=y=0,a.mode=2;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&y)<<8)+(y>>8))%31){e.msg="incorrect header check",a.mode=30;break}if(8!=(15&y)){e.msg="unknown compression method",a.mode=30;break}if(_-=4,z=8+(15&(y>>>=4)),0===a.wbits)a.wbits=z;else if(z>a.wbits){e.msg="invalid window size",a.mode=30;break}a.dmax=1<>8&1),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,a.check=s(a.check,O,2,0)),_=y=0,a.mode=3;case 3:for(;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}a.head&&(a.head.time=y),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,O[2]=y>>>16&255,O[3]=y>>>24&255,a.check=s(a.check,O,4,0)),_=y=0,a.mode=4;case 4:for(;_<16;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}a.head&&(a.head.xflags=255&y,a.head.os=y>>8),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,a.check=s(a.check,O,2,0)),_=y=0,a.mode=5;case 5:if(1024&a.flags){for(;_<16;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}a.length=y,a.head&&(a.head.extra_len=y),512&a.flags&&(O[0]=255&y,O[1]=y>>>8&255,a.check=s(a.check,O,2,0)),_=y=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(1024&a.flags&&(v<($=a.length)&&($=v),$&&(a.head&&(z=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),i.arraySet(a.head.extra,f,g,$,z)),512&a.flags&&(a.check=s(a.check,f,$,g)),v-=$,g+=$,a.length-=$),a.length))break e;a.length=0,a.mode=7;case 7:if(2048&a.flags){if(0===v)break e;for($=0;z=f[g+$++],a.head&&z&&a.length<65536&&(a.head.name+=String.fromCharCode(z)),z&&$>9&1,a.head.done=!0),e.adler=a.check=0,a.mode=12;break;case 10:for(;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}e.adler=a.check=p(y),_=y=0,a.mode=11;case 11:if(0===a.havedict)return e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=_,2;e.adler=a.check=1,a.mode=12;case 12:if(5===t||6===t)break e;case 13:if(a.last){y>>>=7&_,_-=7&_,a.mode=27;break}for(;_<3;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}switch(a.last=1&y,_-=1,3&(y>>>=1)){case 0:a.mode=14;break;case 1:if(C(a),a.mode=20,6!==t)break;y>>>=2,_-=2;break e;case 2:a.mode=17;break;case 3:e.msg="invalid block type",a.mode=30}y>>>=2,_-=2;break;case 14:for(y>>>=7&_,_-=7&_;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if((65535&y)!=(y>>>16^65535)){e.msg="invalid stored block lengths",a.mode=30;break}if(a.length=65535&y,_=y=0,a.mode=15,6===t)break e;case 15:a.mode=16;case 16:if($=a.length){if(v<$&&($=v),k<$&&($=k),0===$)break e;i.arraySet(m,f,g,$,b),v-=$,g+=$,k-=$,b+=$,a.length-=$;break}a.mode=12;break;case 17:for(;_<14;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(a.nlen=257+(31&y),y>>>=5,_-=5,a.ndist=1+(31&y),y>>>=5,_-=5,a.ncode=4+(15&y),y>>>=4,_-=4,286>>=3,_-=3}for(;a.have<19;)a.lens[N[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,W={bits:a.lenbits},B=o(0,a.lens,0,19,a.lencode,0,a.work,W),a.lenbits=W.bits,B){e.msg="invalid code lengths set",a.mode=30;break}a.have=0,a.mode=19;case 19:for(;a.have>>16&255,E=65535&R,!((x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(E<16)y>>>=x,_-=x,a.lens[a.have++]=E;else{if(16===E){for(P=x+2;_>>=x,_-=x,0===a.have){e.msg="invalid bit length repeat",a.mode=30;break}z=a.lens[a.have-1],$=3+(3&y),y>>>=2,_-=2}else if(17===E){for(P=x+3;_>>=x)),y>>>=3,_-=3}else{for(P=x+7;_>>=x)),y>>>=7,_-=7}if(a.have+$>a.nlen+a.ndist){e.msg="invalid bit length repeat",a.mode=30;break}for(;$--;)a.lens[a.have++]=z}}if(30===a.mode)break;if(0===a.lens[256]){e.msg="invalid code -- missing end-of-block",a.mode=30;break}if(a.lenbits=9,W={bits:a.lenbits},B=o(l,a.lens,0,a.nlen,a.lencode,0,a.work,W),a.lenbits=W.bits,B){e.msg="invalid literal/lengths set",a.mode=30;break}if(a.distbits=6,a.distcode=a.distdyn,W={bits:a.distbits},B=o(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,W),a.distbits=W.bits,B){e.msg="invalid distances set",a.mode=30;break}if(a.mode=20,6===t)break e;case 20:a.mode=21;case 21:if(6<=v&&258<=k){e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=_,r(e,F),b=e.next_out,m=e.output,k=e.avail_out,g=e.next_in,f=e.input,v=e.avail_in,y=a.hold,_=a.bits,12===a.mode&&(a.back=-1);break}for(a.back=0;D=(R=a.lencode[y&(1<>>16&255,E=65535&R,!((x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(D&&0==(240&D)){for(A=x,I=D,U=E;D=(R=a.lencode[U+((y&(1<>A)])>>>16&255,E=65535&R,!(A+(x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}y>>>=A,_-=A,a.back+=A}if(y>>>=x,_-=x,a.back+=x,a.length=E,0===D){a.mode=26;break}if(32&D){a.back=-1,a.mode=12;break}if(64&D){e.msg="invalid literal/length code",a.mode=30;break}a.extra=15&D,a.mode=22;case 22:if(a.extra){for(P=a.extra;_>>=a.extra,_-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=23;case 23:for(;D=(R=a.distcode[y&(1<>>16&255,E=65535&R,!((x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(0==(240&D)){for(A=x,I=D,U=E;D=(R=a.distcode[U+((y&(1<>A)])>>>16&255,E=65535&R,!(A+(x=R>>>24)<=_);){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}y>>>=A,_-=A,a.back+=A}if(y>>>=x,_-=x,a.back+=x,64&D){e.msg="invalid distance code",a.mode=30;break}a.offset=E,a.extra=15&D,a.mode=24;case 24:if(a.extra){for(P=a.extra;_>>=a.extra,_-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){e.msg="invalid distance too far back",a.mode=30;break}a.mode=25;case 25:if(0===k)break e;if($=F-k,a.offset>$){if(($=a.offset-$)>a.whave&&a.sane){e.msg="invalid distance too far back",a.mode=30;break}L=$>a.wnext?($-=a.wnext,a.wsize-$):a.wnext-$,$>a.length&&($=a.length),S=a.window}else S=m,L=b-a.offset,$=a.length;for(k<$&&($=k),k-=$,a.length-=$;m[b++]=S[L++],--$;);0===a.length&&(a.mode=21);break;case 26:if(0===k)break e;m[b++]=a.length,k--,a.mode=21;break;case 27:if(a.wrap){for(;_<32;){if(0===v)break e;v--,y|=f[g++]<<_,_+=8}if(F-=k,e.total_out+=F,a.total+=F,F&&(e.adler=a.check=a.flags?s(a.check,m,F,b-F):n(a.check,m,F,b-F)),F=k,(a.flags?y:p(y))!==a.check){e.msg="incorrect data check",a.mode=30;break}_=y=0}a.mode=28;case 28:if(a.wrap&&a.flags){for(;_<32;){if(0===v)break e;v--,y+=f[g++]<<_,_+=8}if(y!==(4294967295&a.total)){e.msg="incorrect length check",a.mode=30;break}_=y=0}a.mode=29;case 29:B=1;break e;case 30:B=-3;break e;case 31:return-4;case 32:default:return h}return e.next_out=b,e.avail_out=k,e.next_in=g,e.avail_in=v,a.hold=y,a.bits=_,(a.wsize||F!==e.avail_out&&a.mode<30&&(a.mode<27||4!==t))&&T(e,e.output,e.next_out,F-e.avail_out)?(a.mode=31,-4):(w-=e.avail_in,F-=e.avail_out,e.total_in+=w,e.total_out+=F,a.total+=F,a.wrap&&F&&(e.adler=a.check=a.flags?s(a.check,m,F,e.next_out-F):n(a.check,m,F,e.next_out-F)),e.data_type=a.bits+(a.last?64:0)+(12===a.mode?128:0)+(20===a.mode||15===a.mode?256:0),(0==w&&0===F||4===t)&&B===c&&(B=-5),B)},a.inflateEnd=function(e){if(!e||!e.state)return h;var t=e.state;return t.window&&(t.window=null),e.state=null,c},a.inflateGetHeader=function(e,t){var a;return e&&e.state?0==(2&(a=e.state).wrap)?h:((a.head=t).done=!1,c):h},a.inflateSetDictionary=function(e,t){var a,i=t.length;return e&&e.state?0!==(a=e.state).wrap&&11!==a.mode?h:11===a.mode&&n(1,t,i,0)!==a.check?-3:T(e,t,i,i)?(a.mode=31,-4):(a.havedict=1,c):h},a.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(e,t,a){"use strict";var i=e("../utils/common"),n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],s=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],r=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],o=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,a,l,d,c,h,u){var f,m,p,g,b,v,k,y,_,w=u.bits,F=0,C=0,T=0,$=0,L=0,S=0,x=0,D=0,E=0,A=0,I=null,U=0,z=new i.Buf16(16),B=new i.Buf16(16),W=null,P=0;for(F=0;F<=15;F++)z[F]=0;for(C=0;Cv?(y=W[P+h[C]],I[U+h[C]]):(y=96,0),f=1<>x)+(m-=f)]=k<<24|y<<16|_,0!==m;);for(f=1<>=1;if(0!==f?(A&=f-1,A+=f):A=0,C++,0==--z[F]){if(F===$)break;F=t[a+h[C]]}if(L>>7)]}function W(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,a){e.bi_valid>p-a?(e.bi_buf|=t<>p-e.bi_valid,e.bi_valid+=a-p):(e.bi_buf|=t<>>=1,a<<=1,0<--t;);return a>>>1}function N(e,t,a){var i,n,s=new Array(m+1),r=0;for(i=1;i<=m;i++)s[i]=r=r+a[i-1]<<1;for(n=0;n<=t;n++){var o=e[2*n+1];0!==o&&(e[2*n]=O(s[o]++,o))}}function M(e){var t;for(t=0;t>1;1<=a;a--)j(e,s,a);for(n=l;a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],j(e,s,1),i=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=i,s[2*n]=s[2*a]+s[2*i],e.depth[n]=(e.depth[a]>=e.depth[i]?e.depth[a]:e.depth[i])+1,s[2*a+1]=s[2*i+1]=n,e.heap[1]=n++,j(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var a,i,n,s,r,o,l=t.dyn_tree,d=t.max_code,c=t.stat_desc.static_tree,h=t.stat_desc.has_stree,u=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,g=t.stat_desc.max_length,b=0;for(s=0;s<=m;s++)e.bl_count[s]=0;for(l[2*e.heap[e.heap_max]+1]=0,a=e.heap_max+1;a>=7;i>>=1)if(1&a&&0!==e.dyn_ltree[2*t])return n;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return s;for(t=32;t>>3,(o=e.static_len+3+7>>>3)<=r&&(r=o)):r=o=a+5,a+4<=r&&-1!==t?Q(e,t,a,i):4===e.strategy||o===r?(P(e,2+(i?1:0),3),K(e,T,$)):(P(e,4+(i?1:0),3),function(e,t,a,i){var n;for(P(e,t-257,5),P(e,a-1,5),P(e,i-4,4),n=0;n>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&a,e.last_lit++,0===t?e.dyn_ltree[2*a]++:(e.matches++,t--,e.dyn_ltree[2*(S[a]+d+1)]++,e.dyn_dtree[2*B(t)]++),e.last_lit===e.lit_bufsize-1},a._tr_align=function(e){P(e,2,3),R(e,b,T),function(e){16===e.bi_valid?(W(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,a){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,i){(function(e){!function(e,t){"use strict";if(!e.setImmediate){var a,i,n,s,r=1,o={},l=!1,d=e.document,c=Object.getPrototypeOf&&Object.getPrototypeOf(e);c=c&&c.setTimeout?c:e,a="[object process]"==={}.toString.call(e.process)?function(e){process.nextTick(function(){u(e)})}:function(){if(e.postMessage&&!e.importScripts){var t=!0,a=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=a,t}}()?(s="setImmediate$"+Math.random()+"$",e.addEventListener?e.addEventListener("message",f,!1):e.attachEvent("onmessage",f),function(t){e.postMessage(s+t,"*")}):e.MessageChannel?((n=new MessageChannel).port1.onmessage=function(e){u(e.data)},function(e){n.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(i=d.documentElement,function(e){var t=d.createElement("script");t.onreadystatechange=function(){u(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):function(e){setTimeout(u,0,e)},c.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),i=0;i\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return n.test(e)?{valid:!1,error:i.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},63003:function(e,t,a){"use strict";a(85331)},70415:function(e,t,a){"use strict";a(85331),a(73565)},72907:function(e,t,a){"use strict";a(85331),a(96808),a(29092)},73565:function(e,t,a){"use strict";a(85331)},79899:function(e,t,a){"use strict";a(85331)},88830:function(e,t,a){"use strict";a(85331)},95385:function(e,t,a){"use strict";a(85331)},98642:function(e,t,a){"use strict";a(85331)}}]); +//# sourceMappingURL=997.7b6c8b5a.js.map \ No newline at end of file diff --git a/frontend-dist/js/997.7b6c8b5a.js.gz b/frontend-dist/js/997.7b6c8b5a.js.gz new file mode 100644 index 00000000..02f30f61 Binary files /dev/null and b/frontend-dist/js/997.7b6c8b5a.js.gz differ diff --git a/frontend-dist/js/997.7b6c8b5a.js.map b/frontend-dist/js/997.7b6c8b5a.js.map new file mode 100644 index 00000000..5bcae8cd --- /dev/null +++ b/frontend-dist/js/997.7b6c8b5a.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/997.7b6c8b5a.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cb6d","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cba1","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue?99b2","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue?256e","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue?5420","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue","webpack://sanyue_imghub/./src/components/dashboard/MobileActionSheet.vue?f2e3","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue?ffce","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/BatchTagDialog.vue?9ca8","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue?e1c6","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/TagManagementDialog.vue?e3f8","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue?25b5","webpack://sanyue_imghub/./src/utils/fileIdValidator.js","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/FileDetailDialog.vue?8cda","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue?5ea1","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue","webpack://sanyue_imghub/./src/components/dashboard/BatchActionBar.vue?ed70","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue?9d79","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue","webpack://sanyue_imghub/./src/components/dashboard/FileListItem.vue?6ed7","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue?f89c","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue","webpack://sanyue_imghub/./src/components/dashboard/FileCard.vue?8969","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue?1c31","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue","webpack://sanyue_imghub/./src/components/dashboard/FolderCard.vue?a03e","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue?136f","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue","webpack://sanyue_imghub/./src/components/dashboard/SkeletonLoader.vue?4854","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue?bd3a","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue","webpack://sanyue_imghub/./src/components/dashboard/FilterDropdown.vue?09c8","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue?0ec3","webpack://sanyue_imghub/./src/utils/fileManager.js","webpack://sanyue_imghub/./src/utils/dashboard/rectIntersects.js","webpack://sanyue_imghub/./src/utils/dashboard/useDragSelect.js","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue?40d2","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./node_modules/jszip/dist/jszip.min.js","webpack://sanyue_imghub/./src/utils/pathValidator.js"],"sourcesContent":["import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"move-file-dialog-wrapper\"\n};\nconst _hoisted_2 = {\n class: \"move-dialog-content\"\n};\nconst _hoisted_3 = {\n class: \"move-path-input-container\"\n};\nconst _hoisted_4 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_5 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_6 = {\n class: \"move-drawer-content\"\n};\nconst _hoisted_7 = {\n class: \"move-path-section\"\n};\nconst _hoisted_8 = {\n class: \"move-path-label\"\n};\nconst _hoisted_9 = {\n class: \"move-path-input-row\"\n};\nconst _hoisted_10 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"embedded-tree-section\"\n};\nconst _hoisted_12 = {\n class: \"tree-section-header\"\n};\nconst _hoisted_13 = {\n class: \"tree-section-title\"\n};\nconst _hoisted_14 = {\n class: \"tree-container\"\n};\nconst _hoisted_15 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_16 = {\n class: \"error-text\"\n};\nconst _hoisted_17 = {\n class: \"node-label\"\n};\nconst _hoisted_18 = {\n class: \"drawer-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_dialog, {\n key: 0,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n width: \"500px\",\n \"show-close\": true,\n class: \"move-dialog\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_5, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, {\n prepend: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_DirectoryTreePicker, {\n \"current-directory\": $props.currentDirectory,\n source: \"admin\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-picker-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])]), _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t('moveFile.hint')), 1)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"])) : (_openBlock(), _createBlock(_component_el_drawer, {\n key: 1,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n direction: \"btt\",\n size: \"auto\",\n \"show-close\": true,\n class: \"move-drawer\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n onClick: $options.handleClose,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n class: \"directory-picker-trigger\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showTreePicker = true)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]), _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t('moveFile.hintMobile')), 1)]), $data.showTreePicker ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('moveFile.selectDirectory')), 1), _createVNode(_component_el_button, {\n text: \"\",\n onClick: _cache[4] || (_cache[4] = $event => $data.showTreePicker = false)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })]), _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_14, [$data.treeError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_16, _toDisplayString($data.treeError), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleTreeNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_17, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.treeLoading]])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"]))]);\n}","import DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'MoveFileDialog',\n components: {\n DirectoryTreePicker\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentDirectory: {\n type: String,\n default: ''\n },\n isBatchMove: {\n type: Boolean,\n default: false\n },\n initialPath: {\n type: String,\n default: '/'\n }\n },\n emits: ['update:modelValue', 'confirm', 'close'],\n data() {\n return {\n targetPath: '/',\n loading: false,\n windowWidth: window.innerWidth,\n // 移动端内嵌树相关\n showTreePicker: false,\n treeData: [],\n treeLoading: false,\n treeError: '',\n treeProps: {\n children: 'children',\n label: 'name'\n }\n };\n },\n computed: {\n dialogVisible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n isDesktop() {\n return this.windowWidth > 768;\n }\n },\n watch: {\n modelValue(newVal) {\n if (newVal) {\n this.targetPath = this.initialPath || '/';\n this.showTreePicker = false;\n }\n },\n showTreePicker(newVal) {\n if (newVal && !this.isDesktop) {\n this.fetchDirectoryTree();\n }\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n handleDirectorySelect(path) {\n this.targetPath = path;\n },\n handleConfirm() {\n this.$emit('confirm', this.targetPath);\n },\n handleClose() {\n this.$emit('update:modelValue', false);\n this.$emit('close');\n },\n // 移动端内嵌树相关方法\n async fetchDirectoryTree() {\n this.treeLoading = true;\n this.treeError = '';\n try {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.treeError = this.$t('moveFile.authFailed');\n } else {\n this.treeError = this.$t('moveFile.serverError');\n }\n return;\n }\n const data = await response.json();\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n this.treeError = this.$t('moveFile.loadTreeFailed');\n } finally {\n this.treeLoading = false;\n }\n },\n handleTreeNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.targetPath = path;\n this.showTreePicker = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MoveFileDialog.vue?vue&type=template&id=7aaa437c&scoped=true\"\nimport script from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\nexport * from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\n\nimport \"./MoveFileDialog.vue?vue&type=style&index=0&id=7aaa437c&scoped=true&lang=css\"\nimport \"./MoveFileDialog.vue?vue&type=style&index=1&id=7aaa437c&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7aaa437c\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"mobile-drawer-header\"\n};\nconst _hoisted_2 = {\n class: \"mobile-drawer-title\"\n};\nconst _hoisted_3 = {\n class: \"mobile-drawer-content\"\n};\nconst _hoisted_4 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"drawer-slide\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-overlay\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"mobile-drawer\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t('mobileDirectory.title')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"mobile-drawer-close\",\n onClick: $options.close\n }, null, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: !$props.currentPath\n }]),\n onClick: _cache[0] || (_cache[0] = $event => $options.navigate(''))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.rootDirectory')), 1)], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.pathParts, (folder, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: index === $options.pathParts.length - 1\n }]),\n style: _normalizeStyle({\n paddingLeft: (index + 1) * 16 + 16 + 'px'\n }),\n onClick: $event => $options.navigate($options.pathParts.slice(0, index + 1).join('/'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(folder), 1)], 14, _hoisted_4);\n }), 128)), $props.currentPath ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-back\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.goBack && $options.goBack(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.goBack')), 1)])) : _createCommentVNode(\"\", true)])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'MobileDirectoryDrawer',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentPath: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'navigate', 'goBack'],\n computed: {\n pathParts() {\n return this.currentPath.split('/').filter(Boolean);\n }\n },\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n navigate(path) {\n this.$emit('navigate', path);\n this.close();\n },\n goBack() {\n this.$emit('goBack');\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileDirectoryDrawer.vue?vue&type=template&id=768efd1f&scoped=true\"\nimport script from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\nexport * from \"./MobileDirectoryDrawer.vue?vue&type=script&lang=js\"\n\nimport \"./MobileDirectoryDrawer.vue?vue&type=style&index=0&id=768efd1f&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-768efd1f\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"bottom-sheet-header\"\n};\nconst _hoisted_2 = {\n class: \"bottom-sheet-title\"\n};\nconst _hoisted_3 = {\n class: \"bottom-sheet-content\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"bottom-sheet\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"bottom-sheet-overlay\",\n onClick: _cache[9] || (_cache[9] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet\",\n onClick: _cache[8] || (_cache[8] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_cache[10] || (_cache[10] = _createElementVNode(\"div\", {\n class: \"bottom-sheet-handle\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.title), 1)]), _createElementVNode(\"div\", _hoisted_3, [!$props.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[0] || (_cache[0] = $event => $options.handleAction('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.viewDetail')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[1] || (_cache[1] = $event => $options.handleAction('copy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleAction('download'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.downloadFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFile')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleAction('tag'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.tagManagement')), 1)])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[5] || (_cache[5] = $event => $options.handleAction('folderCopy'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.copyLink')), 1)]), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item\",\n onClick: _cache[6] || (_cache[6] = $event => $options.handleAction('move'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileAction.moveFolder')), 1)])], 64)), _createElementVNode(\"div\", {\n class: \"bottom-sheet-item bottom-sheet-danger\",\n onClick: _cache[7] || (_cache[7] = $event => $options.handleAction('delete'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n class: \"bottom-sheet-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString($props.isFolder ? _ctx.$t('mobileAction.deleteFolder') : _ctx.$t('mobileAction.deleteFile')), 1)])])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","export default {\n name: 'MobileActionSheet',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n title: {\n type: String,\n default: ''\n },\n isFolder: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:modelValue', 'action'],\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n handleAction(action) {\n this.$emit('action', action);\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileActionSheet.vue?vue&type=template&id=62bb601c&scoped=true\"\nimport script from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\nexport * from \"./MobileActionSheet.vue?vue&type=script&lang=js\"\n\nimport \"./MobileActionSheet.vue?vue&type=style&index=0&id=62bb601c&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-62bb601c\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"batch-tag-container\"\n};\nconst _hoisted_2 = {\n class: \"tab-content\"\n};\nconst _hoisted_3 = {\n class: \"tab-description\"\n};\nconst _hoisted_4 = {\n class: \"input-section\"\n};\nconst _hoisted_5 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_6 = [\"onClick\"];\nconst _hoisted_7 = {\n class: \"tags-to-add-section\"\n};\nconst _hoisted_8 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_9 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_10 = {\n class: \"action-buttons\"\n};\nconst _hoisted_11 = {\n class: \"tab-content\"\n};\nconst _hoisted_12 = {\n class: \"tab-description\"\n};\nconst _hoisted_13 = {\n key: 0,\n class: \"common-tags-section\"\n};\nconst _hoisted_14 = {\n class: \"tags-container\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_16 = {\n class: \"tab-content\"\n};\nconst _hoisted_17 = {\n class: \"tab-description\"\n};\nconst _hoisted_18 = {\n class: \"action-buttons\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_alert = _resolveComponent(\"el-alert\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('batchTag.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.activeTab = $event),\n type: \"border-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.addTab'),\n name: \"add\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.$t('batchTag.addDescription', {\n count: $options.fileCount\n })), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('batchTag.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddInputTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddInputTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_6);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.pendingTags')), 1), $data.tagsToAdd.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.tagsToAdd, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.removeFromToAdd(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('batchTag.noPendingTags')), 1))]), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.executeAddTags,\n loading: $data.loading,\n disabled: $data.tagsToAdd.length === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.addToAllFiles')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\", \"disabled\"])])])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.removeTab'),\n name: \"remove\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"p\", _hoisted_12, _toDisplayString(_ctx.$t('batchTag.removeDescription')), 1), $data.commonTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('batchTag.commonTags')), 1), _createElementVNode(\"div\", _hoisted_14, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.commonTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveCommonTag(tag),\n class: \"tag-item\",\n type: \"warning\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('batchTag.noCommonTags')), 1))])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: _ctx.$t('batchTag.clearTab'),\n name: \"clear\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"p\", _hoisted_17, _toDisplayString(_ctx.$t('batchTag.clearDescription', {\n count: $options.fileCount\n })), 1), _createVNode(_component_el_alert, {\n title: _ctx.$t('batchTag.clearWarningTitle'),\n type: \"warning\",\n description: _ctx.$t('batchTag.clearWarningDesc'),\n closable: false,\n style: {\n \"margin-bottom\": \"20px\"\n },\n center: \"\"\n }, null, 8, [\"title\", \"description\"]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n type: \"danger\",\n onClick: $options.handleClearAllTags,\n loading: $data.loading\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('batchTag.confirmClearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])])])]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"modelValue\"])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport { ElMessage, ElMessageBox } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'BatchTagDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n selectedFiles: {\n type: Array,\n required: true,\n default: () => []\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n activeTab: 'add',\n inputTag: '',\n tagsToAdd: [],\n commonTags: [],\n suggestions: [],\n showSuggestions: false,\n loading: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '600px';\n },\n selectedFilesOnly() {\n // 排除文件夹,只保留文件\n return this.selectedFiles.filter(file => !file.isFolder);\n },\n fileCount() {\n return this.selectedFilesOnly.length;\n },\n fileIds() {\n return this.selectedFilesOnly.map(file => file.name);\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadCommonTags();\n } else {\n this.resetData();\n }\n },\n activeTab(newTab) {\n if (newTab === 'remove') {\n this.loadCommonTags();\n }\n }\n },\n methods: {\n resetData() {\n this.tagsToAdd = [];\n this.inputTag = '';\n this.showSuggestions = false;\n this.activeTab = 'add';\n },\n async loadCommonTags() {\n if (this.selectedFilesOnly.length === 0) {\n this.commonTags = [];\n return;\n }\n try {\n // 获取所有文件的标签\n const tagPromises = this.selectedFilesOnly.map(file => fetchWithAuth(`/api/manage/tags/${encodeURIComponent(file.name)}`, {\n method: 'GET'\n }));\n const responses = await Promise.all(tagPromises);\n const allTags = [];\n for (const response of responses) {\n if (response.ok) {\n const data = await response.json();\n allTags.push(data.tags || []);\n }\n }\n\n // 找出共有标签\n if (allTags.length > 0) {\n this.commonTags = allTags[0].filter(tag => allTags.every(tags => tags.includes(tag)));\n } else {\n this.commonTags = [];\n }\n } catch (error) {\n console.error('Error loading common tags:', error);\n ElMessage.error(this.$t('batchTag.loadCommonTagsFailed'));\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.tagsToAdd.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddInputTag();\n },\n handleAddInputTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.tagsToAdd.includes(tag)) {\n ElMessage.warning(this.$t('batchTag.tagAlreadyInList'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n this.tagsToAdd.push(tag);\n this.inputTag = '';\n this.showSuggestions = false;\n },\n removeFromToAdd(tag) {\n const index = this.tagsToAdd.indexOf(tag);\n if (index > -1) {\n this.tagsToAdd.splice(index, 1);\n }\n },\n async executeAddTags() {\n if (this.tagsToAdd.length === 0) {\n ElMessage.warning(this.$t('batchTag.pleaseAddTags'));\n return;\n }\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'add',\n tags: this.tagsToAdd\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.addSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.tagsToAdd = [];\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tags:', error);\n ElMessage.error(this.$t('batchTag.addFailed'));\n } finally {\n this.loading = false;\n }\n },\n async handleRemoveCommonTag(tag) {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.removeSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n await this.loadCommonTags();\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('batchTag.removeFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClearAllTags() {\n ElMessageBox.confirm(this.$t('batchTag.clearConfirmMessage', {\n count: this.fileCount\n }), this.$t('batchTag.clearConfirmTitle'), {\n confirmButtonText: this.$t('batchTag.clearConfirmOk'),\n cancelButtonText: this.$t('batchTag.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.executeClearTags();\n }).catch(() => {\n ElMessage.info(this.$t('batchTag.clearCancelled'));\n });\n },\n async executeClearTags() {\n this.loading = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/batch', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n fileIds: this.fileIds,\n action: 'set',\n tags: []\n })\n });\n if (response.ok) {\n const data = await response.json();\n if (data.success || data.updated > 0) {\n ElMessage.success(this.$t('batchTag.clearSuccess', {\n count: data.updated\n }));\n this.$emit('tagsUpdated');\n this.commonTags = [];\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } else {\n throw new Error(this.$t('batchTag.clearFailed'));\n }\n } catch (error) {\n console.error('Error clearing tags:', error);\n ElMessage.error(this.$t('batchTag.clearFailed'));\n } finally {\n this.loading = false;\n }\n },\n handleClose() {\n this.visible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchTagDialog.vue?vue&type=template&id=ec3adcfc&scoped=true\"\nimport script from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\nexport * from \"./BatchTagDialog.vue?vue&type=script&lang=js\"\n\nimport \"./BatchTagDialog.vue?vue&type=style&index=0&id=ec3adcfc&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-ec3adcfc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, withKeys as _withKeys, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"tag-management-container\"\n};\nconst _hoisted_2 = {\n class: \"input-section\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"suggestions-panel\"\n};\nconst _hoisted_4 = [\"onClick\"];\nconst _hoisted_5 = {\n class: \"current-tags-section\"\n};\nconst _hoisted_6 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_7 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_8 = {\n class: \"popular-tags-section\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"tags-container\"\n};\nconst _hoisted_10 = {\n key: 1,\n class: \"empty-message\"\n};\nconst _hoisted_11 = {\n key: 2,\n class: \"empty-message\"\n};\nconst _hoisted_12 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_Loading = _resolveComponent(\"Loading\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('tagManagement.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_12, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('tagManagement.close')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_el_input, {\n modelValue: $data.inputTag,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.inputTag = $event),\n placeholder: _ctx.$t('tagManagement.inputPlaceholder'),\n onKeyup: _withKeys($options.handleAddTag, [\"enter\"]),\n onInput: $options.handleInputChange,\n clearable: \"\"\n }, {\n append: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: $options.handleAddTag,\n type: \"primary\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"plus\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\", \"onInput\"]), $data.showSuggestions && $data.suggestions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, tag => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: tag,\n class: \"suggestion-item\",\n onClick: $event => $options.selectSuggestion(tag)\n }, _toDisplayString(tag), 9, _hoisted_4);\n }), 128))])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.currentTags')), 1), $data.currentTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n closable: \"\",\n onClose: $event => $options.handleRemoveTag(tag),\n class: \"tag-item\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClose\"]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.$t('tagManagement.noTags')), 1))]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"h4\", null, _toDisplayString(_ctx.$t('tagManagement.popularTags')), 1), $data.popularTags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.popularTags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n onClick: $event => $options.handleAddPopularTag(tag),\n class: \"tag-item clickable\",\n type: \"info\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))])) : $data.loadingPopularTags ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [_createVNode(_component_el_icon, {\n class: \"is-loading\"\n }, {\n default: _withCtx(() => [_createVNode(_component_Loading)]),\n _: 1\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('tagManagement.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString(_ctx.$t('tagManagement.noPopularTags')), 1))])])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\", \"onClose\"]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport { ElMessage } from 'element-plus';\nimport { Loading } from '@element-plus/icons-vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'TagManagementDialog',\n components: {\n Loading\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n fileId: {\n type: String,\n required: true\n }\n },\n emits: ['update:modelValue', 'tagsUpdated'],\n data() {\n return {\n currentTags: [],\n inputTag: '',\n suggestions: [],\n popularTags: [],\n showSuggestions: false,\n loading: false,\n loadingPopularTags: false,\n debounceTimer: null\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '90%' : '500px';\n }\n },\n watch: {\n visible(newVal) {\n if (newVal) {\n this.loadFileTags();\n this.loadPopularTags();\n }\n }\n },\n methods: {\n async loadFileTags() {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n } else {\n throw new Error('Failed to load tags');\n }\n } catch (error) {\n console.error('Error loading file tags:', error);\n ElMessage.error(this.$t('tagManagement.loadFailed'));\n }\n },\n async loadPopularTags() {\n this.loadingPopularTags = true;\n try {\n const response = await fetchWithAuth('/api/manage/tags/autocomplete?limit=20', {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.popularTags = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n }\n } catch (error) {\n console.error('Error loading popular tags:', error);\n } finally {\n this.loadingPopularTags = false;\n }\n },\n handleInputChange() {\n clearTimeout(this.debounceTimer);\n if (!this.inputTag || this.inputTag.trim().length === 0) {\n this.showSuggestions = false;\n return;\n }\n this.debounceTimer = setTimeout(() => {\n this.fetchSuggestions();\n }, 300);\n },\n async fetchSuggestions() {\n try {\n const prefix = this.inputTag.trim().toLowerCase();\n const response = await fetchWithAuth(`/api/manage/tags/autocomplete?prefix=${encodeURIComponent(prefix)}&limit=10`, {\n method: 'GET'\n });\n if (response.ok) {\n const data = await response.json();\n this.suggestions = (data.tags || []).filter(tag => !this.currentTags.includes(tag));\n this.showSuggestions = this.suggestions.length > 0;\n }\n } catch (error) {\n console.error('Error fetching suggestions:', error);\n }\n },\n selectSuggestion(tag) {\n this.inputTag = tag;\n this.showSuggestions = false;\n this.handleAddTag();\n },\n async handleAddTag() {\n const tag = this.inputTag.trim();\n if (!tag) {\n return;\n }\n if (this.currentTags.includes(tag)) {\n ElMessage.warning(this.$t('tagManagement.tagExists'));\n this.inputTag = '';\n this.showSuggestions = false;\n return;\n }\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'add',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n this.inputTag = '';\n this.showSuggestions = false;\n ElMessage.success(this.$t('tagManagement.addSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n const error = await response.json();\n throw new Error(error.message || this.$t('tagManagement.addFailed'));\n }\n } catch (error) {\n console.error('Error adding tag:', error);\n ElMessage.error(error.message || this.$t('tagManagement.addFailed'));\n }\n },\n async handleRemoveTag(tag) {\n try {\n const response = await fetchWithAuth(`/api/manage/tags/${encodeURIComponent(this.fileId)}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n action: 'remove',\n tags: [tag]\n })\n });\n if (response.ok) {\n const data = await response.json();\n this.currentTags = data.tags || [];\n ElMessage.success(this.$t('tagManagement.removeSuccess'));\n this.$emit('tagsUpdated', this.currentTags);\n\n // 重新加载常用标签\n this.loadPopularTags();\n } else {\n throw new Error(this.$t('tagManagement.removeFailed'));\n }\n } catch (error) {\n console.error('Error removing tag:', error);\n ElMessage.error(this.$t('tagManagement.removeFailed'));\n }\n },\n handleAddPopularTag(tag) {\n this.inputTag = tag;\n this.handleAddTag();\n },\n handleClose() {\n this.visible = false;\n this.inputTag = '';\n this.showSuggestions = false;\n this.currentTags = [];\n this.popularTags = [];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./TagManagementDialog.vue?vue&type=template&id=689f94e2&scoped=true\"\nimport script from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\nexport * from \"./TagManagementDialog.vue?vue&type=script&lang=js\"\n\nimport \"./TagManagementDialog.vue?vue&type=style&index=0&id=689f94e2&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-689f94e2\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers } from \"vue\";\nconst _hoisted_1 = {\n class: \"detail-actions\"\n};\nconst _hoisted_2 = {\n class: \"preview-section\"\n};\nconst _hoisted_3 = {\n class: \"preview-content\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 1\n};\nconst _hoisted_7 = {\n key: 1\n};\nconst _hoisted_8 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"align-items\": \"center\",\n \"gap\": \"6px\"\n }\n};\nconst _hoisted_9 = {\n key: 1,\n style: {\n \"color\": \"#909399\"\n }\n};\nconst _hoisted_10 = {\n key: 0,\n style: {\n \"display\": \"flex\",\n \"flex-wrap\": \"wrap\",\n \"gap\": \"5px\"\n }\n};\nconst _hoisted_11 = {\n key: 1,\n style: {\n \"color\": \"#909399\"\n }\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_tab_pane = _resolveComponent(\"el-tab-pane\");\n const _component_el_tabs = _resolveComponent(\"el-tabs\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_descriptions_item = _resolveComponent(\"el-descriptions-item\");\n const _component_el_tag = _resolveComponent(\"el-tag\");\n const _component_el_descriptions = _resolveComponent(\"el-descriptions\");\n const _component_el_form_item = _resolveComponent(\"el-form-item\");\n const _component_el_form = _resolveComponent(\"el-form\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('fileDetail.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $event => $options.visible = $event),\n width: $options.dialogWidth\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [!$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('download')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.download')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 1,\n type: \"primary\",\n onClick: _cache[1] || (_cache[1] = $event => _ctx.$emit('tagManagement')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.tags')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 2,\n type: \"primary\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('block')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ban\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.blacklist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 3,\n type: \"primary\",\n onClick: _cache[3] || (_cache[3] = $event => _ctx.$emit('white')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"shield-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.whitelist')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 4,\n type: \"danger\",\n onClick: _cache[4] || (_cache[4] = $event => _ctx.$emit('delete')),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.deleteBtn')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 5,\n type: \"warning\",\n onClick: _cache[5] || (_cache[5] = $event => $options.startEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"edit\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.edit')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), !$data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 6,\n type: \"info\",\n onClick: _cache[6] || (_cache[6] = $event => $options.openRenameDialog()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"i-cursor\",\n style: {\n \"margin-right\": \"3px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.rename')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 7,\n type: \"success\",\n onClick: _cache[7] || (_cache[7] = $event => $options.saveMetadata()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\",\n loading: $data.editSaving\n }, {\n default: _withCtx(() => [!$data.editSaving ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"save\",\n style: {\n \"margin-right\": \"3px\"\n }\n })) : _createCommentVNode(\"\", true), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('fileDetail.save')), 1)]),\n _: 1\n }, 8, [\"loading\"])) : _createCommentVNode(\"\", true), $data.isEditing ? (_openBlock(), _createBlock(_component_el_button, {\n key: 8,\n onClick: _cache[8] || (_cache[8] = $event => $options.cancelEdit()),\n round: \"\",\n size: \"small\",\n class: \"detail-action\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.cancel')), 1)]),\n _: 1\n })) : _createCommentVNode(\"\", true)]), _createVNode(_component_el_tabs, {\n modelValue: $data.activeTab,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.activeTab = $event),\n onTabClick: $options.handleTabClick,\n style: {\n \"margin-bottom\": \"10px\"\n }\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tab_pane, {\n label: _ctx.$t('fileDetail.originUrl'),\n name: \"originUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.originUrl,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $props.urls.originUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_tab_pane, {\n label: \"Markdown\",\n name: \"mdUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.mdUrl,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $props.urls.mdUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"HTML\",\n name: \"htmlUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.htmlUrl,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $props.urls.htmlUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), _createVNode(_component_el_tab_pane, {\n label: \"BBCode\",\n name: \"bbUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.bbUrl,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $props.urls.bbUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n }), $props.file?.metadata?.TgFileId ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 0,\n label: \"TG File ID\",\n name: \"tgId\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.tgId,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $props.urls.tgId = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3Location ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 1,\n label: \"S3 Location\",\n name: \"s3Location\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3Location,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $props.urls.S3Location = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true), $props.file?.metadata?.S3CdnFileUrl ? (_openBlock(), _createBlock(_component_el_tab_pane, {\n key: 2,\n label: \"S3 CDN URL\",\n name: \"s3CdnFileUrl\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $props.urls.S3CdnFileUrl,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $props.urls.S3CdnFileUrl = $event),\n readonly: \"\",\n onClick: $options.handleUrlClick\n }, null, 8, [\"modelValue\", \"onClick\"])]),\n _: 1\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"modelValue\", \"onTabClick\"]), _createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [$options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 0,\n src: $props.fileLink,\n autoplay: \"\",\n muted: \"\",\n loop: \"\",\n class: \"video-preview\",\n onClick: _cache[17] || (_cache[17] = (...args) => $options.openImageLink && $options.openImageLink(...args))\n }, null, 8, _hoisted_4)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"audio\", {\n key: 1,\n src: $props.fileLink,\n controls: \"\",\n autoplay: \"\",\n class: \"audio-preview\"\n }, null, 8, _hoisted_5)) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n src: $props.fileLink,\n \"preview-src-list\": [$props.fileLink],\n \"preview-teleported\": true,\n fit: \"contain\",\n lazy: \"\",\n class: \"image-preview\"\n }, null, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"file-icon-detail\"\n }))])]), _createVNode(_component_el_descriptions, {\n border: \"\",\n column: $options.descColumn\n }, {\n default: _withCtx(() => [_createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileNameLabel')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileName,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.editForm.FileName = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileNamePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString($props.file?.metadata?.FileName || $props.file?.name), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileType')\n }, {\n default: _withCtx(() => [$data.isEditing ? (_openBlock(), _createBlock(_component_el_input, {\n key: 0,\n modelValue: $data.editForm.FileType,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.editForm.FileType = $event),\n size: \"small\",\n placeholder: _ctx.$t('fileDetail.fileTypePlaceholder')\n }, null, 8, [\"modelValue\", \"placeholder\"])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString($props.file?.metadata?.FileType || _ctx.$t('fileDetail.unknown')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileSizeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.fileSizeDisplay), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.imageDimensions')\n }, {\n default: _withCtx(() => [$options.imageDimensions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [_createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Width) + \" × \" + _toDisplayString($props.file?.metadata?.Height), 1), _createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"display\": \"inline-flex\",\n \"align-items\": \"center\",\n \"justify-content\": \"center\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.orientationIcon), 1)]),\n _: 1\n })])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString(_ctx.$t('fileDetail.noDimensions')), 1))]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadTimeLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.uploadTime), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.channelTypeAndName')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: \"info\",\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.Channel || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.ChannelName || '-'), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.accessStatusAndReview')\n }, {\n default: _withCtx(() => [_createVNode(_component_el_tag, {\n size: \"small\",\n type: $options.accessTagType,\n style: {\n \"margin-right\": \"6px\"\n }\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.accessType), 1)]),\n _: 1\n }, 8, [\"type\"]), _createElementVNode(\"span\", null, _toDisplayString($props.file?.metadata?.Label || _ctx.$t('fileDetail.noTags')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadIP')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadIP || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.uploadAddressLabel')\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($props.file?.metadata?.UploadAddress || _ctx.$t('fileDetail.unknown')), 1)]),\n _: 1\n }, 8, [\"label\"]), _createVNode(_component_el_descriptions_item, {\n label: _ctx.$t('fileDetail.fileTags')\n }, {\n default: _withCtx(() => [$props.file?.metadata?.Tags && $props.file?.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.file?.metadata?.Tags, tag => {\n return _openBlock(), _createBlock(_component_el_tag, {\n key: tag,\n size: \"small\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(tag), 1)]),\n _: 2\n }, 1024);\n }), 128))])) : (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('fileDetail.noTags')), 1))]),\n _: 1\n }, 8, [\"label\"])]),\n _: 1\n }, 8, [\"column\"]), _createVNode(_component_el_dialog, {\n modelValue: $data.showRenameDialog,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.showRenameDialog = $event),\n title: _ctx.$t('fileDetail.renameTitle'),\n width: $options.dialogWidth,\n \"append-to-body\": \"\"\n }, {\n footer: _withCtx(() => [_createVNode(_component_el_button, {\n onClick: _cache[21] || (_cache[21] = $event => $options.closeRenameDialog())\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameCancel')), 1)]),\n _: 1\n }), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[22] || (_cache[22] = $event => $options.submitRename()),\n loading: $data.renameSaving,\n disabled: !$data.renameValidation.valid\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('fileDetail.renameConfirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"disabled\"])]),\n default: _withCtx(() => [_createVNode(_component_el_form, {\n onSubmit: _withModifiers($options.submitRename, [\"prevent\"])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_form_item, {\n label: _ctx.$t('fileDetail.renameLabel'),\n error: $data.renameValidation.error\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.renameForm.newFileId,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.renameForm.newFileId = $event),\n placeholder: _ctx.$t('fileDetail.renamePlaceholder'),\n onInput: $options.validateRenameInput,\n clearable: \"\"\n }, null, 8, [\"modelValue\", \"placeholder\", \"onInput\"])]),\n _: 1\n }, 8, [\"label\", \"error\"])]),\n _: 1\n }, 8, [\"onSubmit\"])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"width\"])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","/**\r\n * File_ID 验证器模块\r\n * 提供 File_ID 格式验证功能,用于重命名操作的前端校验\r\n * 非法字符规则复用 pathValidator 的字符集\r\n */\r\n\r\n/**\r\n * 非法字符正则表达式\r\n * 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n * 与 pathValidator.js 保持一致\r\n */\r\nconst INVALID_CHARS = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n\r\n/**\r\n * 验证 File_ID 格式\r\n * @param {string} newFileId - 新的 File_ID\r\n * @param {string} currentFileId - 当前 File_ID\r\n * @returns {{ valid: boolean, error?: string }}\r\n */\r\nexport function validateFileId(newFileId, currentFileId) {\r\n // 1. 空值/纯空白检测\r\n if (!newFileId || newFileId.trim() === '') {\r\n return {\r\n valid: false,\r\n error: '文件名不能为空'\r\n };\r\n }\r\n\r\n // 2. 与当前 File_ID 相同检测\r\n if (newFileId === currentFileId) {\r\n return {\r\n valid: false,\r\n error: '文件名未发生变化'\r\n };\r\n }\r\n\r\n // 3. 路径穿越检测\r\n if (newFileId.includes('..')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含路径穿越字符 \"..\"'\r\n };\r\n }\r\n\r\n // 3.5 单独的 . 路径段检测(仅检查 /./ 或开头 ./,不检查末尾以允许继续输入如 .123)\r\n if (/\\/\\.\\//.test(newFileId) || /^\\.\\//.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含单独的 \".\" 路径段'\r\n };\r\n }\r\n\r\n // 4. 非法字符检测(复用 pathValidator 的字符规则)\r\n if (INVALID_CHARS.test(newFileId)) {\r\n return {\r\n valid: false,\r\n error: '文件名包含非法字符,请使用合法的文件名格式'\r\n };\r\n }\r\n\r\n // 5. 连续斜杠检测\r\n if (newFileId.includes('//')) {\r\n return {\r\n valid: false,\r\n error: '文件名不能包含连续的斜杠'\r\n };\r\n }\r\n\r\n return { valid: true };\r\n}\r\n","import \"core-js/modules/es.json.stringify.js\";\nimport { ElMessage } from 'element-plus';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFileId } from '@/utils/fileIdValidator';\nexport default {\n name: 'FileDetailDialog',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n file: {\n type: Object,\n default: null\n },\n fileLink: {\n type: String,\n default: ''\n },\n urls: {\n type: Object,\n default: () => ({\n originUrl: '',\n mdUrl: '',\n htmlUrl: '',\n bbUrl: '',\n tgId: '',\n S3Location: '',\n S3CdnFileUrl: ''\n })\n }\n },\n emits: ['update:modelValue', 'download', 'tagManagement', 'block', 'white', 'delete', 'metadataUpdated', 'fileRenamed'],\n watch: {\n visible(val) {\n if (!val) {\n // 关闭弹窗时退出编辑状态\n this.isEditing = false;\n this.editSaving = false;\n }\n }\n },\n data() {\n return {\n activeTab: 'originUrl',\n isEditing: false,\n editForm: {\n FileName: '',\n FileType: ''\n },\n editSaving: false,\n showRenameDialog: false,\n renameForm: {\n newFileId: ''\n },\n renameValidation: {\n valid: true,\n error: ''\n },\n renameSaving: false\n };\n },\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth < 768 ? '95%' : '900px';\n },\n descColumn() {\n return window.innerWidth < 768 ? 1 : 2;\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.file?.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.file?.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n uploadTime() {\n if (this.file?.metadata?.TimeStamp) {\n return new Date(this.file.metadata.TimeStamp).toLocaleString();\n }\n return this.$t('fileDetail.unknown');\n },\n accessType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return this.$t('fileDetail.accessNormalWhitelist');\n if (listType === 'Block') return this.$t('fileDetail.accessBlockedBlacklist');\n if (label === 'adult') return this.$t('fileDetail.accessBlockedReview');\n return this.$t('fileDetail.accessNormal');\n },\n accessTagType() {\n const listType = this.file?.metadata?.ListType;\n const label = this.file?.metadata?.Label;\n if (listType === 'White') return 'success';\n if (listType === 'Block') return 'danger';\n if (label === 'adult') return 'danger';\n return 'success';\n },\n imageDimensions() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (width && height) return true;\n return null;\n },\n orientationIcon() {\n const width = this.file?.metadata?.Width;\n const height = this.file?.metadata?.Height;\n if (!width || !height) return '';\n const ratio = width / height;\n if (ratio > 1.1) return this.$t('fileDetail.orientationLandscape');\n if (ratio < 0.9) return this.$t('fileDetail.orientationPortrait');\n return this.$t('fileDetail.orientationSquare');\n },\n fileSizeDisplay() {\n const sizeBytes = this.file?.metadata?.FileSizeBytes;\n const sizeMB = this.file?.metadata?.FileSize;\n if (sizeBytes) {\n // 根据大小选择合适的单位\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(2)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return this.$t('fileDetail.unknown');\n }\n },\n methods: {\n handleVideoClick(e) {\n const video = e.target;\n if (video.paused) video.play();else video.pause();\n },\n handleTabClick() {},\n handleUrlClick(e) {\n const input = e.target;\n input.select();\n navigator.clipboard.writeText(input.value).then(() => {\n ElMessage.success(this.$t('fileDetail.linkCopied'));\n });\n },\n openImageLink() {\n if (this.fileLink) {\n window.open(this.fileLink, '_blank');\n }\n },\n startEdit() {\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.isEditing = true;\n },\n cancelEdit() {\n this.isEditing = false;\n this.editForm.FileName = this.file?.metadata?.FileName || '';\n this.editForm.FileType = this.file?.metadata?.FileType || '';\n this.editSaving = false;\n },\n async saveMetadata() {\n this.editSaving = true;\n try {\n const fileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/metadata/${fileId}`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n FileName: this.editForm.FileName,\n FileType: this.editForm.FileType\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.metadataSaved'));\n this.isEditing = false;\n this.$emit('metadataUpdated', fileId, data.metadata);\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n }\n } catch (error) {\n console.error('Error saving metadata:', error);\n ElMessage.error(error.message || this.$t('fileDetail.metadataSaveFailed'));\n } finally {\n this.editSaving = false;\n }\n },\n openRenameDialog() {\n this.renameForm.newFileId = this.file?.name || '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n this.showRenameDialog = true;\n },\n closeRenameDialog() {\n this.showRenameDialog = false;\n this.renameForm.newFileId = '';\n this.renameValidation = {\n valid: true,\n error: ''\n };\n },\n validateRenameInput() {\n const result = validateFileId(this.renameForm.newFileId, this.file?.name || '');\n this.renameValidation = {\n valid: result.valid,\n error: result.error || ''\n };\n },\n async submitRename() {\n if (this.renameSaving) return;\n\n // Validate input first\n this.validateRenameInput();\n if (!this.renameValidation.valid) {\n return;\n }\n this.renameSaving = true;\n try {\n const oldFileId = this.file.name;\n const response = await fetchWithAuth(`/api/manage/rename/${oldFileId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n newFileId: this.renameForm.newFileId\n })\n });\n if (response.ok) {\n const data = await response.json();\n ElMessage.success(this.$t('fileDetail.renameSuccess'));\n this.showRenameDialog = false;\n this.$emit('fileRenamed', oldFileId, this.renameForm.newFileId, data.metadata);\n } else if (response.status === 409) {\n // Conflict — target File_ID already exists\n this.renameValidation = {\n valid: false,\n error: this.$t('fileDetail.renameConflict')\n };\n } else {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.message || this.$t('fileDetail.renameFailed'));\n }\n } catch (error) {\n console.error('Error renaming file:', error);\n ElMessage.error(error.message || this.$t('fileDetail.renameFailed'));\n } finally {\n this.renameSaving = false;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileDetailDialog.vue?vue&type=template&id=3f80812c&scoped=true\"\nimport script from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\nexport * from \"./FileDetailDialog.vue?vue&type=script&lang=js\"\n\nimport \"./FileDetailDialog.vue?vue&type=style&index=0&id=3f80812c&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-3f80812c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"batch-floating-bar\"\n};\nconst _hoisted_2 = {\n class: \"batch-selection-summary\"\n};\nconst _hoisted_3 = {\n class: \"batch-selection-count\"\n};\nconst _hoisted_4 = {\n class: \"batch-floating-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createBlock(_Transition, {\n name: \"batch-toolbar\"\n }, {\n default: _withCtx(() => [$props.selectedCount > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.clearSelection'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"batch-floating-btn ghost\",\n \"aria-label\": _ctx.$t('dashboard.clearSelection'),\n onClick: $options.handleClear\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"batch-floating-icon\"\n })]),\n _: 1\n }, 8, [\"aria-label\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: `${$props.selectedCount} ${_ctx.$t('dashboard.selectedItems')}`,\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.selectedCount), 1)])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _cache[0] || (_cache[0] = _createElementVNode(\"span\", {\n class: \"batch-toolbar-divider\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_4, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.actions, action => {\n return _openBlock(), _createBlock(_component_el_tooltip, {\n key: action.command,\n disabled: $options.disableTooltip,\n content: _ctx.$t(action.label),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"batch-floating-btn\", action.className]),\n \"aria-label\": _ctx.$t(action.label),\n onClick: $event => $options.handleAction(action.command)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: action.icon,\n class: \"batch-floating-icon\"\n }, null, 8, [\"icon\"])]),\n _: 2\n }, 1032, [\"class\", \"aria-label\", \"onClick\"])]),\n _: 2\n }, 1032, [\"disabled\", \"content\"]);\n }), 128))])])) : _createCommentVNode(\"\", true)]),\n _: 1\n });\n}","export default {\n name: 'BatchActionBar',\n props: {\n selectedCount: {\n type: Number,\n required: true\n }\n },\n emits: ['action', 'clear'],\n data() {\n return {\n actions: [{\n command: 'copy',\n label: 'dashboard.copy',\n icon: 'copy',\n className: 'copy'\n }, {\n command: 'download',\n label: 'dashboard.download',\n icon: 'download',\n className: 'download'\n }, {\n command: 'move',\n label: 'dashboard.move',\n icon: 'file-export',\n className: 'move'\n }, {\n command: 'tagManagement',\n label: 'dashboard.tagManagement',\n icon: 'tags',\n className: 'tag'\n }, {\n command: 'ban',\n label: 'dashboard.addToBlacklist',\n icon: 'ban',\n className: 'ban'\n }, {\n command: 'white',\n label: 'dashboard.addToWhitelist',\n icon: 'shield-alt',\n className: 'white'\n }, {\n command: 'delete',\n label: 'dashboard.delete',\n icon: 'trash-alt',\n className: 'danger'\n }]\n };\n },\n computed: {\n disableTooltip() {\n return window.innerWidth < 768;\n }\n },\n methods: {\n handleAction(command) {\n this.$emit('action', command);\n },\n handleClear() {\n this.$emit('clear');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./BatchActionBar.vue?vue&type=template&id=4937e2f0&scoped=true\"\nimport script from \"./BatchActionBar.vue?vue&type=script&lang=js\"\nexport * from \"./BatchActionBar.vue?vue&type=script&lang=js\"\n\nimport \"./BatchActionBar.vue?vue&type=style&index=0&id=4937e2f0&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-4937e2f0\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createVNode as _createVNode, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_2 = [\"src\"];\nconst _hoisted_3 = [\"src\"];\nconst _hoisted_4 = [\"title\"];\nconst _hoisted_5 = {\n class: \"filename-start\"\n};\nconst _hoisted_6 = {\n class: \"filename-end\"\n};\nconst _hoisted_7 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_8 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_9 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_10 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"channel-name-box\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_13 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_14 = {\n key: 0,\n class: \"address-box\"\n};\nconst _hoisted_15 = {\n key: 1,\n class: \"list-empty\"\n};\nconst _hoisted_16 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_17 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_18 = {\n class: \"list-col list-col-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: \"list-item\",\n onTouchstart: _cache[9] || (_cache[9] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[10] || (_cache[10] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[11] || (_cache[11] = $event => _ctx.$emit('touchmove', $event))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-checkbox\", {\n 'checked': $data.localSelected\n }]),\n onClick: _cache[0] || (_cache[0] = _withModifiers((...args) => $options.toggleSelect && $options.toggleSelect(...args), [\"stop\"]))\n }, [$data.localSelected ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"check-icon\"\n })) : _createCommentVNode(\"\", true)], 2)]), _createElementVNode(\"div\", {\n class: \"list-col list-col-preview\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [$options.isFolder ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"list-folder-icon\"\n })) : $options.isVideo ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: $props.fileLink,\n class: \"list-preview-img\",\n muted: \"\",\n preload: \"metadata\"\n }, null, 8, _hoisted_2)) : $options.isImage ? (_openBlock(), _createElementBlock(\"img\", {\n key: 2,\n src: $props.fileLink,\n class: \"list-preview-img\",\n loading: \"lazy\",\n decoding: \"async\"\n }, null, 8, _hoisted_3)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: \"file\",\n class: \"list-file-icon\"\n }))]), _createElementVNode(\"div\", {\n class: \"list-col list-col-name\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.handlePreviewClick && $options.handlePreviewClick(...args))\n }, [_createElementVNode(\"span\", {\n class: \"filename-ellipsis\",\n title: $options.displayName\n }, [_createElementVNode(\"span\", _hoisted_5, _toDisplayString($options.fileNameStart), 1), _createElementVNode(\"span\", _hoisted_6, _toDisplayString($options.fileNameEnd), 1)], 8, _hoisted_4)]), _createElementVNode(\"div\", _hoisted_7, [!$options.isFolder && $props.item.metadata?.Tags && $props.item.metadata.Tags.length > 0 ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.item.metadata.Tags.slice(0, 3), (tag, tagIndex) => {\n return _openBlock(), _createElementBlock(\"span\", {\n key: tagIndex,\n class: \"color-tag\",\n style: _normalizeStyle({\n background: $options.getTagColor(tagIndex)\n })\n }, _toDisplayString(tag), 5);\n }), 128)), $props.item.metadata.Tags.length > 3 ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: \"color-tag color-tag-more\",\n style: _normalizeStyle({\n background: $options.getTagColor(3)\n })\n }, \"+\" + _toDisplayString($props.item.metadata.Tags.length - 3), 5)) : _createCommentVNode(\"\", true)], 64)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_8, \"-\"))]), _createElementVNode(\"div\", _hoisted_9, _toDisplayString($options.isFolder ? '-' : $props.item.metadata?.Channel || $props.item.channelTag || '-'), 1), _createElementVNode(\"div\", _hoisted_10, [!$options.isFolder && $props.item.metadata?.ChannelName ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString($props.item.metadata.ChannelName), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"-\"))]), _createElementVNode(\"div\", _hoisted_13, [!$options.isFolder && $props.item.metadata?.UploadIP ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, _toDisplayString($props.item.metadata.UploadIP), 1)) : (_openBlock(), _createElementBlock(\"span\", _hoisted_15, \"-\"))]), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.isFolder ? '-' : $options.fileSizeDisplay), 1), _createElementVNode(\"div\", _hoisted_17, _toDisplayString($options.uploadDate), 1), _createElementVNode(\"div\", _hoisted_18, [!$options.isFolder ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[3] || (_cache[3] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[6] || (_cache[6] = _withModifiers($event => _ctx.$emit('folderCopy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn\",\n onClick: _cache[7] || (_cache[7] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"content\"])], 64)), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"list-action-btn list-action-danger\",\n onClick: _cache[8] || (_cache[8] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"content\"])])], 32);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FileListItem',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n default: ''\n }\n },\n emits: ['update:selected', 'enter', 'detail', 'copy', 'folderCopy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n tagColors: ['#f472b6', '#a78bfa', '#60a5fa', '#34d399']\n };\n },\n computed: {\n isFolder() {\n // 检查 isFolder 属性或名称以 / 结尾\n return this.item.isFolder || this.item.name?.endsWith('/');\n },\n isVideo() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isImage() {\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp');\n },\n displayName() {\n if (this.isFolder) {\n const parts = this.item.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.item.name;\n }\n return this.item.metadata?.FileName || this.getFileName(this.item.name);\n },\n fileNameStart() {\n const name = this.displayName;\n if (name.length <= 20) return name;\n return name.slice(0, -8);\n },\n fileNameEnd() {\n const name = this.displayName;\n if (name.length <= 20) return '';\n return name.slice(-8);\n },\n uploadDate() {\n if (this.item.uploaded) {\n return new Date(this.item.uploaded).toLocaleDateString();\n }\n if (this.item.metadata?.TimeStamp) {\n return new Date(this.item.metadata.TimeStamp).toLocaleDateString();\n }\n return '-';\n },\n fileSizeDisplay() {\n const sizeBytes = this.item.metadata?.FileSizeBytes;\n const sizeMB = this.item.metadata?.FileSize;\n if (sizeBytes) {\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n } else if (sizeBytes < 1024 * 1024) {\n return `${(sizeBytes / 1024).toFixed(1)} KB`;\n } else {\n return `${(sizeBytes / 1024 / 1024).toFixed(2)} MB`;\n }\n } else if (sizeMB) {\n return `${sizeMB} MB`;\n }\n return '-';\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n },\n methods: {\n toggleSelect() {\n this.localSelected = !this.localSelected;\n this.$emit('update:selected', this.localSelected);\n },\n handlePreviewClick() {\n if (this.isFolder) {\n this.$emit('enter');\n } else {\n this.$emit('detail');\n }\n },\n getFileName(name) {\n const parts = (name || '').split('/');\n return parts[parts.length - 1];\n },\n getTagColor(index) {\n return this.tagColors[index % this.tagColors.length];\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileListItem.vue?vue&type=template&id=78d34f50&scoped=true\"\nimport script from \"./FileListItem.vue?vue&type=script&lang=js\"\nexport * from \"./FileListItem.vue?vue&type=script&lang=js\"\n\nimport \"./FileListItem.vue?vue&type=style&index=0&id=78d34f50&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-78d34f50\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment, withModifiers as _withModifiers, withCtx as _withCtx, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"file-short-info\"\n};\nconst _hoisted_2 = {\n key: 0,\n class: \"success-tag\"\n};\nconst _hoisted_3 = {\n key: 1,\n class: \"fail-tag\"\n};\nconst _hoisted_4 = {\n key: 2,\n class: \"success-tag\"\n};\nconst _hoisted_5 = {\n key: 3,\n class: \"primary-tag\"\n};\nconst _hoisted_6 = {\n key: 0,\n style: {\n \"margin-left\": \"2px\"\n }\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"skeleton-wrapper\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = {\n class: \"error-text\"\n};\nconst _hoisted_11 = {\n key: 3,\n class: \"file-preview\"\n};\nconst _hoisted_12 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_13 = {\n class: \"file-name-row\"\n};\nconst _hoisted_14 = {\n class: \"file-name\"\n};\nconst _hoisted_15 = {\n class: \"action-bar\"\n};\nconst _hoisted_16 = {\n class: \"action-bar-left\"\n};\nconst _hoisted_17 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_image = _resolveComponent(\"el-image\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card\",\n onTouchstart: _cache[17] || (_cache[17] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[18] || (_cache[18] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[19] || (_cache[19] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", _hoisted_1, [$props.item.metadata?.ListType === 'White' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString($options.channelTag), 1)) : $props.item.metadata?.ListType === 'Block' || $props.item.metadata?.Label === 'adult' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, _toDisplayString($options.channelTag), 1)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString($options.channelTag), 1)), $props.item.metadata?.Tags && $props.item.metadata?.Tags.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [_createVNode(_component_font_awesome_icon, {\n icon: \"tag\",\n style: {\n \"margin-right\": \"3px\",\n \"font-size\": \"12px\"\n }\n }), _createTextVNode(\" \" + _toDisplayString($props.item.metadata.Tags[0]) + \" \", 1), $props.item.metadata.Tags.length > 1 ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, \" (+\" + _toDisplayString($props.item.metadata.Tags.length - 1) + \") \", 1)) : _createCommentVNode(\"\", true)])) : _createCommentVNode(\"\", true)]), $options.isVideo ? (_openBlock(), _createElementBlock(_Fragment, {\n key: 0\n }, [$data.videoLoading ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7)) : $data.videoError ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"error-wrapper\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-triangle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])) : _createCommentVNode(\"\", true), _withDirectives(_createElementVNode(\"video\", {\n src: $props.fileLink,\n muted: \"\",\n loop: \"\",\n preload: \"metadata\",\n class: \"video-preview\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handleVideoClick && $options.handleVideoClick(...args)),\n onMouseenter: _cache[4] || (_cache[4] = $event => $options.handleVideoHover($event, true)),\n onMouseleave: _cache[5] || (_cache[5] = $event => $options.handleVideoHover($event, false)),\n onFullscreenchange: _cache[6] || (_cache[6] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onWebkitfullscreenchange: _cache[7] || (_cache[7] = (...args) => $options.handleFullscreenChange && $options.handleFullscreenChange(...args)),\n onLoadeddata: _cache[8] || (_cache[8] = $event => $data.videoLoading = false),\n onError: _cache[9] || (_cache[9] = (...args) => $options.handleVideoError && $options.handleVideoError(...args))\n }, null, 40, _hoisted_9), [[_vShow, !$data.videoLoading && !$data.videoError]])], 64)) : $options.isAudio ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"file-preview audio-card-preview\",\n onClick: _cache[10] || (_cache[10] = $event => _ctx.$emit('detail'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"music\",\n class: \"file-icon audio-icon\"\n })])) : $options.isImage ? (_openBlock(), _createBlock(_component_el_image, {\n key: 2,\n \"preview-teleported\": true,\n src: $props.fileLink,\n \"preview-src-list\": $props.previewSrcList,\n fit: \"cover\",\n lazy: \"\",\n decoding: \"async\",\n class: \"image-preview\"\n }, {\n placeholder: _withCtx(() => [...(_cache[20] || (_cache[20] = [_createElementVNode(\"div\", {\n class: \"skeleton-wrapper\"\n }, null, -1)]))]),\n error: _withCtx(() => [_createElementVNode(\"div\", {\n class: \"error-wrapper\",\n onClick: _cache[11] || (_cache[11] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"image\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('dashboard.loadFailed')), 1)])]),\n _: 1\n }, 8, [\"src\", \"preview-src-list\"])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"span\", _hoisted_14, _toDisplayString($options.displayName), 1)]), _createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.detail'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[12] || (_cache[12] = _withModifiers($event => _ctx.$emit('detail'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"info-circle\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])]), _createElementVNode(\"div\", _hoisted_17, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[13] || (_cache[13] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[14] || (_cache[14] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.downloadFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[15] || (_cache[15] = _withModifiers($event => _ctx.$emit('download'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"download\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[16] || (_cache[16] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])])]),\n _: 1\n });\n}","export default {\n name: 'FileCard',\n props: {\n item: {\n type: Object,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n fileLink: {\n type: String,\n required: true\n },\n previewSrcList: {\n type: Array,\n default: () => []\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'detail', 'copy', 'move', 'delete', 'download', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected,\n videoLoading: true,\n videoError: false\n };\n },\n computed: {\n channelTag() {\n return this.item.channelTag || '';\n },\n isVideo() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('video')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp4') || name.endsWith('.webm') || name.endsWith('.mov') || name.endsWith('.avi');\n },\n isAudio() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('audio')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.mp3') || name.endsWith('.wav') || name.endsWith('.ogg') || name.endsWith('.flac');\n },\n isImage() {\n // 先通过 content-type 判断\n const fileType = this.item.metadata?.FileType?.toLowerCase() || '';\n if (fileType.includes('image')) return true;\n // 再通过文件后缀判断\n const name = this.item.name?.toLowerCase() || '';\n return name.endsWith('.jpg') || name.endsWith('.jpeg') || name.endsWith('.png') || name.endsWith('.gif') || name.endsWith('.webp') || name.endsWith('.svg') || name.endsWith('.bmp') || name.endsWith('.avif') || name.endsWith('.heic') || name.endsWith('.heif');\n },\n displayName() {\n const fileName = this.item.metadata?.FileName || this.item.name || '';\n const parts = fileName.split('/');\n return parts[parts.length - 1];\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n },\n fileLink() {\n // 链接变化时重置加载状态\n this.videoLoading = true;\n this.videoError = false;\n }\n },\n methods: {\n handleVideoError() {\n this.videoLoading = false;\n this.videoError = true;\n },\n handleVideoClick(e) {\n const video = e.target;\n if (video.requestFullscreen) {\n video.requestFullscreen();\n } else if (video.webkitRequestFullscreen) {\n video.webkitRequestFullscreen();\n } else if (video.mozRequestFullScreen) {\n video.mozRequestFullScreen();\n } else if (video.msRequestFullscreen) {\n video.msRequestFullscreen();\n }\n },\n handleFullscreenChange(e) {\n const video = e.target;\n const isFullscreen = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n if (isFullscreen) {\n // 进入全屏:取消静音和循环\n video.muted = false;\n video.loop = false;\n } else {\n // 退出全屏:恢复静音和循环,暂停并重置\n video.muted = true;\n video.loop = true;\n video.pause();\n video.currentTime = 0;\n }\n },\n handleVideoHover(e, isEnter) {\n const video = e.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FileCard.vue?vue&type=template&id=e367e94e&scoped=true\"\nimport script from \"./FileCard.vue?vue&type=script&lang=js\"\nexport * from \"./FileCard.vue?vue&type=script&lang=js\"\n\nimport \"./FileCard.vue?vue&type=style&index=0&id=e367e94e&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-e367e94e\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"card-bottom-overlay\"\n};\nconst _hoisted_2 = {\n class: \"file-name-row\"\n};\nconst _hoisted_3 = {\n class: \"file-name\"\n};\nconst _hoisted_4 = {\n key: 0,\n class: \"action-bar\"\n};\nconst _hoisted_5 = {\n class: \"action-bar-right\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_card = _resolveComponent(\"el-card\");\n return _openBlock(), _createBlock(_component_el_card, {\n class: \"img-card folder-card\",\n onTouchstart: _cache[6] || (_cache[6] = $event => _ctx.$emit('touchstart', $event)),\n onTouchend: _cache[7] || (_cache[7] = $event => _ctx.$emit('touchend', $event)),\n onTouchmove: _cache[8] || (_cache[8] = $event => _ctx.$emit('touchmove', $event))\n }, {\n default: _withCtx(() => [_createVNode(_component_el_checkbox, {\n modelValue: $data.localSelected,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localSelected = $event),\n onChange: _cache[1] || (_cache[1] = $event => _ctx.$emit('update:selected', $data.localSelected))\n }, null, 8, [\"modelValue\"]), _createElementVNode(\"div\", {\n class: \"folder-icon\",\n onClick: _cache[2] || (_cache[2] = $event => _ctx.$emit('enter'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"folder-icon-svg\"\n })]), _createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString($options.folderName), 1)]), $props.showActions ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_cache[9] || (_cache[9] = _createElementVNode(\"div\", {\n class: \"action-bar-left\"\n }, null, -1)), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.copyLink'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[3] || (_cache[3] = _withModifiers($event => _ctx.$emit('copy'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.moveFile'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn\",\n onClick: _cache[4] || (_cache[4] = _withModifiers($event => _ctx.$emit('move'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $props.disableTooltip,\n content: _ctx.$t('dashboard.delete'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"action-btn action-btn-danger\",\n onClick: _cache[5] || (_cache[5] = _withModifiers($event => _ctx.$emit('delete'), [\"stop\"]))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n });\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'FolderCard',\n props: {\n name: {\n type: String,\n required: true\n },\n selected: {\n type: Boolean,\n default: false\n },\n showActions: {\n type: Boolean,\n default: true\n },\n disableTooltip: {\n type: Boolean,\n default: false\n }\n },\n emits: ['update:selected', 'enter', 'copy', 'move', 'delete', 'touchstart', 'touchend', 'touchmove'],\n data() {\n return {\n localSelected: this.selected\n };\n },\n computed: {\n folderName() {\n const parts = this.name.split('/').filter(Boolean);\n return parts[parts.length - 1] || this.name;\n }\n },\n watch: {\n selected(val) {\n this.localSelected = val;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FolderCard.vue?vue&type=template&id=5f22ef48&scoped=true\"\nimport script from \"./FolderCard.vue?vue&type=script&lang=js\"\nexport * from \"./FolderCard.vue?vue&type=script&lang=js\"\n\nimport \"./FolderCard.vue?vue&type=style&index=0&id=5f22ef48&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-5f22ef48\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, createStaticVNode as _createStaticVNode } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return $props.type === 'card' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 0\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'skeleton-' + i,\n class: \"skeleton-card\"\n }, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"div\", {\n class: \"skeleton-image\"\n }, null, -1), _createElementVNode(\"div\", {\n class: \"skeleton-info\"\n }, [_createElementVNode(\"div\", {\n class: \"skeleton-text\"\n })], -1)]))]);\n }), 128)) : $props.type === 'list' ? (_openBlock(true), _createElementBlock(_Fragment, {\n key: 1\n }, _renderList($props.count, i => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: 'list-skeleton-' + i,\n class: \"list-item skeleton-list-item\"\n }, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"
\", 10)]))]);\n }), 128)) : _createCommentVNode(\"\", true);\n}","export default {\n name: 'SkeletonLoader',\n props: {\n type: {\n type: String,\n default: 'card',\n validator: value => ['card', 'list'].includes(value)\n },\n count: {\n type: Number,\n default: 15\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./SkeletonLoader.vue?vue&type=template&id=5060702c&scoped=true\"\nimport script from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\nexport * from \"./SkeletonLoader.vue?vue&type=script&lang=js\"\n\nimport \"./SkeletonLoader.vue?vue&type=style&index=0&id=5060702c&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-5060702c\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"el-dropdown-link filter-trigger\"\n};\nconst _hoisted_2 = {\n class: \"filter-section\"\n};\nconst _hoisted_3 = {\n class: \"filter-title\"\n};\nconst _hoisted_4 = {\n class: \"filter-options\"\n};\nconst _hoisted_5 = {\n class: \"filter-section\"\n};\nconst _hoisted_6 = {\n class: \"filter-title\"\n};\nconst _hoisted_7 = {\n class: \"filter-options\"\n};\nconst _hoisted_8 = {\n class: \"filter-section\"\n};\nconst _hoisted_9 = {\n class: \"filter-title\"\n};\nconst _hoisted_10 = {\n class: \"filter-options\"\n};\nconst _hoisted_11 = {\n class: \"filter-section\"\n};\nconst _hoisted_12 = {\n class: \"filter-title\"\n};\nconst _hoisted_13 = {\n class: \"filter-options\"\n};\nconst _hoisted_14 = {\n class: \"filter-section\"\n};\nconst _hoisted_15 = {\n class: \"filter-title\"\n};\nconst _hoisted_16 = {\n class: \"filter-options\"\n};\nconst _hoisted_17 = {\n key: 0,\n class: \"filter-section\"\n};\nconst _hoisted_18 = {\n class: \"filter-title\"\n};\nconst _hoisted_19 = {\n class: \"filter-options\"\n};\nconst _hoisted_20 = {\n key: 0,\n class: \"channel-divider\"\n};\nconst _hoisted_21 = {\n class: \"channel-group-title\"\n};\nconst _hoisted_22 = {\n class: \"filter-actions\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_badge = _resolveComponent(\"el-badge\");\n const _component_el_checkbox = _resolveComponent(\"el-checkbox\");\n const _component_el_checkbox_group = _resolveComponent(\"el-checkbox-group\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n return _openBlock(), _createBlock(_component_el_dropdown, {\n \"hide-on-click\": false,\n trigger: \"click\",\n class: \"filter-dropdown\",\n ref: \"dropdownRef\"\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"filter-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('filter.accessStatus')), 1), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.accessStatus,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.localFilters.accessStatus = $event),\n onChange: _cache[1] || (_cache[1] = $event => $options.handleFilterChange('accessStatus'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.accessStatusOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'accessStatus-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.$t('filter.blackWhiteList')), 1), _createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.listType,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.localFilters.listType = $event),\n onChange: _cache[3] || (_cache[3] = $event => $options.handleFilterChange('listType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.listTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'listType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.$t('filter.reviewResult')), 1), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.label,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.localFilters.label = $event),\n onChange: _cache[5] || (_cache[5] = $event => $options.handleFilterChange('label'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.labelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'label-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, _toDisplayString(_ctx.$t('filter.fileType')), 1), _createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.fileType,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.localFilters.fileType = $event),\n onChange: _cache[7] || (_cache[7] = $event => $options.handleFilterChange('fileType'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.fileTypeOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'fileType-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.$t('filter.channelType')), 1), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channel,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.localFilters.channel = $event),\n onChange: _cache[9] || (_cache[9] = $event => $options.handleFilterChange('channel'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.channelOptions, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channel-' + option.value,\n label: option.value\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.label), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])]), $props.channelNameOptions.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('filter.channelName')), 1), _createElementVNode(\"div\", _hoisted_19, [_createVNode(_component_el_checkbox_group, {\n modelValue: $data.localFilters.channelName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.localFilters.channelName = $event),\n onChange: _cache[11] || (_cache[11] = $event => $options.handleFilterChange('channelName'))\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedChannelNames, (group, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: 'group-' + group.type\n }, [index > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_21, _toDisplayString(group.typeLabel), 1), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.channels, option => {\n return _openBlock(), _createBlock(_component_el_checkbox, {\n key: 'channelName-' + option.type + '-' + option.name,\n label: option.type + ':' + option.name\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(option.name), 1)]),\n _: 2\n }, 1032, [\"label\"]);\n }), 128))], 64);\n }), 128))]),\n _: 1\n }, 8, [\"modelValue\"])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_22, [_createVNode(_component_el_button, {\n size: \"small\",\n onClick: $options.clearFilters,\n disabled: $options.activeFilterCount === 0\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('filter.clearFilters')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_1, [_createVNode(_component_el_badge, {\n value: $options.activeFilterCount,\n hidden: $options.activeFilterCount === 0,\n class: \"filter-badge\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"filter\",\n class: \"header-icon\"\n })]),\n _: 1\n }, 8, [\"value\", \"hidden\"])])]),\n _: 1\n }, 512);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nexport default {\n name: 'FilterDropdown',\n props: {\n filters: {\n type: Object,\n default: () => ({\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'none'\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n })\n },\n channelNameOptions: {\n type: Array,\n default: () => []\n }\n },\n emits: ['update:filters', 'change'],\n data() {\n return {\n localFilters: {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n }\n };\n },\n computed: {\n // 访问状态选项(综合判断 ListType 和 Label)\n // 正常: ListType !== 'Block' && Label !== 'adult'\n // 已屏蔽: ListType === 'Block' || Label === 'adult'\n accessStatusOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.blocked'),\n value: 'blocked'\n }];\n },\n // 黑白名单选项(直接使用 ListType 字段值)\n listTypeOptions() {\n return [{\n label: this.$t('filter.whiteList'),\n value: 'White'\n }, {\n label: this.$t('filter.blackList'),\n value: 'Block'\n }, {\n label: this.$t('filter.notSet'),\n value: 'None'\n }];\n },\n // 审查结果选项\n labelOptions() {\n return [{\n label: this.$t('filter.normal'),\n value: 'normal'\n }, {\n label: this.$t('filter.teenContent'),\n value: 'teen'\n }, {\n label: this.$t('filter.adultContent'),\n value: 'adult'\n }];\n },\n fileTypeOptions() {\n return [{\n label: this.$t('filter.image'),\n value: 'image'\n }, {\n label: this.$t('filter.video'),\n value: 'video'\n }, {\n label: this.$t('filter.audio'),\n value: 'audio'\n }, {\n label: this.$t('filter.other'),\n value: 'other'\n }];\n },\n channelOptions() {\n return [{\n label: 'Telegram',\n value: 'TelegramNew'\n }, {\n label: 'Cloudflare R2',\n value: 'CloudflareR2'\n }, {\n label: 'S3',\n value: 'S3'\n }, {\n label: 'Discord',\n value: 'Discord'\n }, {\n label: 'HuggingFace',\n value: 'HuggingFace'\n }, {\n label: 'WebDAV',\n value: 'WebDAV'\n }, {\n label: this.$t('filter.externalLink'),\n value: 'External'\n }];\n },\n activeFilterCount() {\n return Object.values(this.localFilters).reduce((count, arr) => count + arr.length, 0);\n },\n // 按类型分组渠道名称\n groupedChannelNames() {\n const groups = {};\n this.channelNameOptions.forEach(option => {\n if (!groups[option.type]) {\n groups[option.type] = {\n type: option.type,\n typeLabel: option.typeLabel,\n channels: []\n };\n }\n groups[option.type].channels.push(option);\n });\n return Object.values(groups);\n }\n },\n watch: {\n filters: {\n handler(newFilters) {\n this.localFilters = {\n accessStatus: Array.isArray(newFilters.accessStatus) ? [...newFilters.accessStatus] : [],\n listType: Array.isArray(newFilters.listType) ? [...newFilters.listType] : [],\n label: Array.isArray(newFilters.label) ? [...newFilters.label] : [],\n fileType: Array.isArray(newFilters.fileType) ? [...newFilters.fileType] : [],\n channel: Array.isArray(newFilters.channel) ? [...newFilters.channel] : [],\n channelName: Array.isArray(newFilters.channelName) ? [...newFilters.channelName] : []\n };\n },\n immediate: true,\n deep: true\n }\n },\n methods: {\n handleFilterChange(type) {\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type,\n filters: {\n ...this.localFilters\n }\n });\n },\n clearFilters() {\n this.localFilters = {\n accessStatus: [],\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.$emit('update:filters', {\n ...this.localFilters\n });\n this.$emit('change', {\n type: 'clear',\n filters: {\n ...this.localFilters\n }\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./FilterDropdown.vue?vue&type=template&id=c3aeeea0&scoped=true\"\nimport script from \"./FilterDropdown.vue?vue&type=script&lang=js\"\nexport * from \"./FilterDropdown.vue?vue&type=script&lang=js\"\n\nimport \"./FilterDropdown.vue?vue&type=style&index=0&id=c3aeeea0&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-c3aeeea0\"]])\n\nexport default __exports__","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport { resolveComponent as _resolveComponent, createVNode as _createVNode, withKeys as _withKeys, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"header-content\"\n};\nconst _hoisted_3 = {\n class: \"search-area\"\n};\nconst _hoisted_4 = {\n class: \"search-card\"\n};\nconst _hoisted_5 = {\n class: \"actions\"\n};\nconst _hoisted_6 = {\n class: \"el-dropdown-link\"\n};\nconst _hoisted_7 = {\n class: \"el-dropdown-link\"\n};\nconst _hoisted_8 = {\n class: \"breadcrumb-container\"\n};\nconst _hoisted_9 = {\n class: \"mobile-directory-path\"\n};\nconst _hoisted_10 = {\n class: \"breadcrumb desktop-only\"\n};\nconst _hoisted_11 = [\"title\"];\nconst _hoisted_12 = {\n key: 1,\n class: \"empty-state\"\n};\nconst _hoisted_13 = {\n class: \"empty-text\"\n};\nconst _hoisted_14 = {\n class: \"empty-hint\"\n};\nconst _hoisted_15 = {\n class: \"list-header\"\n};\nconst _hoisted_16 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_17 = {\n class: \"list-col list-col-preview\"\n};\nconst _hoisted_18 = {\n class: \"list-col list-col-name\"\n};\nconst _hoisted_19 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_20 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_21 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_22 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_23 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_24 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_25 = {\n class: \"list-col list-col-actions\"\n};\nconst _hoisted_26 = {\n key: 1,\n class: \"empty-state list-empty\"\n};\nconst _hoisted_27 = {\n class: \"empty-text\"\n};\nconst _hoisted_28 = {\n class: \"empty-hint\"\n};\nconst _hoisted_29 = {\n class: \"pagination-container\"\n};\nconst _hoisted_30 = {\n class: \"pagination-center\"\n};\nconst _hoisted_31 = {\n class: \"pagination-right\"\n};\nconst _hoisted_32 = {\n class: \"page-total\"\n};\nconst _hoisted_33 = {\n class: \"page-jump\"\n};\nconst _hoisted_34 = {\n class: \"dialog-section\"\n};\nconst _hoisted_35 = {\n class: \"section-header\"\n};\nconst _hoisted_36 = {\n class: \"section-title\"\n};\nconst _hoisted_37 = {\n class: \"section-content\"\n};\nconst _hoisted_38 = {\n class: \"dialog-section\"\n};\nconst _hoisted_39 = {\n class: \"section-header\"\n};\nconst _hoisted_40 = {\n class: \"section-title\"\n};\nconst _hoisted_41 = {\n class: \"section-content\"\n};\nconst _hoisted_42 = {\n class: \"setting-item\"\n};\nconst _hoisted_43 = {\n class: \"setting-label\"\n};\nconst _hoisted_44 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_45 = {\n class: \"setting-label\"\n};\nconst _hoisted_46 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_DashboardTabs = _resolveComponent(\"DashboardTabs\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_FilterDropdown = _resolveComponent(\"FilterDropdown\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_header = _resolveComponent(\"el-header\");\n const _component_el_breadcrumb_item = _resolveComponent(\"el-breadcrumb-item\");\n const _component_el_breadcrumb = _resolveComponent(\"el-breadcrumb\");\n const _component_SkeletonLoader = _resolveComponent(\"SkeletonLoader\");\n const _component_FolderCard = _resolveComponent(\"FolderCard\");\n const _component_FileCard = _resolveComponent(\"FileCard\");\n const _component_FileListItem = _resolveComponent(\"FileListItem\");\n const _component_el_pagination = _resolveComponent(\"el-pagination\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_main = _resolveComponent(\"el-main\");\n const _component_el_container = _resolveComponent(\"el-container\");\n const _component_BatchActionBar = _resolveComponent(\"BatchActionBar\");\n const _component_FileDetailDialog = _resolveComponent(\"FileDetailDialog\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_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_TagManagementDialog = _resolveComponent(\"TagManagementDialog\");\n const _component_BatchTagDialog = _resolveComponent(\"BatchTagDialog\");\n const _component_MobileActionSheet = _resolveComponent(\"MobileActionSheet\");\n const _component_MobileDirectoryDrawer = _resolveComponent(\"MobileDirectoryDrawer\");\n const _component_MoveFileDialog = _resolveComponent(\"MoveFileDialog\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_container, null, {\n default: _withCtx(() => [_createVNode(_component_el_header, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_DashboardTabs, {\n activeTab: \"dashboard\"\n }), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_input, {\n modelValue: $data.tempSearch,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.tempSearch = $event),\n size: \"small\",\n placeholder: _ctx.$t('dashboard.searchPlaceholder'),\n onKeyup: _withKeys($options.handleSearch, [\"enter\"])\n }, {\n suffix: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"search\",\n class: \"search-icon\",\n onClick: $options.handleSearch\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\", \"onKeyup\"])]), _createVNode(_component_FilterDropdown, {\n filters: $data.filters,\n \"onUpdate:filters\": _cache[1] || (_cache[1] = $event => $data.filters = $event),\n channelNameOptions: $data.channelNameOptions,\n onChange: $options.handleFilterChange\n }, null, 8, [\"filters\", \"channelNameOptions\", \"onChange\"])]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_dropdown, {\n onCommand: $options.sort,\n \"hide-on-click\": false\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"dateDesc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortByDateDesc')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"nameAsc\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.sortByNameAsc')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: $options.sortIcon,\n class: \"header-icon\"\n }, null, 8, [\"icon\"])])]),\n _: 1\n }, 8, [\"onCommand\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.linkFormat'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"header-icon\",\n onClick: _cache[2] || (_cache[2] = $event => $data.showUrlDialog = true)\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: $data.viewMode === 'card' ? _ctx.$t('dashboard.listView') : _ctx.$t('dashboard.cardView'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'card' ? 'list' : 'th-large',\n class: \"header-icon\",\n onClick: $options.toggleViewMode\n }, null, 8, [\"icon\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.logout'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"header-icon\",\n onClick: $options.handleLogout\n }, null, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])]),\n _: 1\n }), _createVNode(_component_el_main, {\n class: _normalizeClass([\"main-container\", {\n 'has-batch-toolbar': $data.selectedFiles.length > 0\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"button\", {\n class: \"breadcrumb-select-button\",\n type: \"button\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.handleSelectPage && $options.handleSelectPage(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: $options.selectPageIcon,\n class: \"breadcrumb-select-icon\"\n }, null, 8, [\"icon\"])]), _createElementVNode(\"div\", {\n class: \"mobile-directory-trigger\",\n onClick: _cache[4] || (_cache[4] = $event => $data.showMobileDirectoryDrawer = true)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"mobile-directory-icon\"\n }), _createElementVNode(\"span\", _hoisted_9, _toDisplayString($data.currentPath && $data.currentPath.split('/').filter(Boolean).length > 0 ? $data.currentPath.split('/').filter(Boolean).pop() : _ctx.$t('dashboard.rootDirectory')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"mobile-directory-arrow\"\n })]), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_breadcrumb, {\n separator: \"/\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_breadcrumb_item, {\n onClick: _cache[5] || (_cache[5] = $event => $options.navigateToFolder(''))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"breadcrumb-home-icon\"\n })]),\n _: 1\n }), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.currentPath.split('/').filter(Boolean), (folder, index) => {\n return _openBlock(), _createBlock(_component_el_breadcrumb_item, {\n key: index,\n onClick: $event => $options.navigateToFolder($data.currentPath.split('/').filter(Boolean).slice(0, index + 1).join('/'))\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(folder), 1)]),\n _: 2\n }, 1032, [\"onClick\"]);\n }), 128))]),\n _: 1\n })]), _createElementVNode(\"span\", {\n class: \"stats-badge\",\n title: _ctx.$t('dashboard.totalFiles', {\n count: _ctx.$data.Number\n })\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"database\",\n class: \"stats-badge-icon\"\n }), _createTextVNode(\" \" + _toDisplayString($data.Number), 1)], 8, _hoisted_11)]), $data.viewMode === 'card' ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"content\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"cardContainerRef\"\n }, [$data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"card\",\n count: 15\n })) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_13, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_14, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createElementBlock(_Fragment, {\n key: index\n }, [$options.isFolder(item) ? (_openBlock(), _createBlock(_component_FolderCard, {\n key: 0,\n name: item.name,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n showActions: !$data.isSearchMode,\n disableTooltip: $options.disableTooltip,\n onEnter: $event => $options.enterFolder(item.name),\n onCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onTouchstart: $event => $options.handleFolderTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"name\", \"selected\", \"onUpdate:selected\", \"showActions\", \"disableTooltip\", \"onEnter\", \"onCopy\", \"onMove\", \"onDelete\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"])) : (_openBlock(), _createBlock(_component_FileCard, {\n key: 1,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n previewSrcList: item.previewSrcList,\n disableTooltip: $options.disableTooltip,\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"previewSrcList\", \"disableTooltip\", \"onDetail\", \"onCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]))], 64);\n }), 128))], 2)) : (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: _normalizeClass([\"list-view\", {\n 'is-drag-selecting': $setup.isDragging\n }]),\n ref: \"listContainerRef\"\n }, [_createElementVNode(\"div\", _hoisted_15, [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-checkbox\", {\n 'checked': $options.isSelectAll,\n 'indeterminate': $options.isIndeterminate\n }]),\n onClick: _cache[6] || (_cache[6] = $event => $options.handleSelectAllPage(!$options.isSelectAll))\n }, [$options.isSelectAll ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"check\",\n class: \"check-icon\"\n })) : $options.isIndeterminate ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"minus\",\n class: \"check-icon\"\n })) : _createCommentVNode(\"\", true)], 2)]), _createElementVNode(\"div\", _hoisted_17, _toDisplayString(_ctx.$t('dashboard.preview')), 1), _createElementVNode(\"div\", _hoisted_18, _toDisplayString(_ctx.$t('dashboard.fileName')), 1), _createElementVNode(\"div\", _hoisted_19, _toDisplayString(_ctx.$t('dashboard.tags')), 1), _createElementVNode(\"div\", _hoisted_20, _toDisplayString(_ctx.$t('dashboard.channelType')), 1), _createElementVNode(\"div\", _hoisted_21, _toDisplayString(_ctx.$t('dashboard.channelNameCol')), 1), _createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t('dashboard.uploadAddress')), 1), _createElementVNode(\"div\", _hoisted_23, _toDisplayString(_ctx.$t('dashboard.fileSize')), 1), _createElementVNode(\"div\", _hoisted_24, _toDisplayString(_ctx.$t('dashboard.uploadTime')), 1), _createElementVNode(\"div\", _hoisted_25, _toDisplayString(_ctx.$t('dashboard.actions')), 1)]), $data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"list\",\n count: 15\n })) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_27, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_28, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.adjustSearchHint') : _ctx.$t('dashboard.uploadHint')), 1)])) : (_openBlock(true), _createElementBlock(_Fragment, {\n key: 2\n }, _renderList($options.paginatedTableData, (item, index) => {\n return _openBlock(), _createBlock(_component_FileListItem, {\n key: index,\n item: item,\n selected: item.selected,\n \"onUpdate:selected\": $event => item.selected = $event,\n fileLink: $options.getFileLink(item.name),\n onEnter: $event => $options.enterFolder(item.name),\n onDetail: $event => $options.openDetailDialog(index, item.name),\n onCopy: $event => $options.handleCopy(index, item.name),\n onFolderCopy: $event => $options.handleFolderCopy(item.name),\n onMove: $event => $options.handleMove(index, item.name),\n onDelete: $event => $options.handleDelete(index, item.name),\n onDownload: $event => $options.handleDownload(item.name),\n onTouchstart: $event => $options.isFolder(item) ? $options.handleFolderTouchStart(item, index) : $options.handleTouchStart(item, index),\n onTouchend: $options.handleTouchEnd,\n onTouchmove: $options.handleTouchEnd\n }, null, 8, [\"item\", \"selected\", \"onUpdate:selected\", \"fileLink\", \"onEnter\", \"onDetail\", \"onCopy\", \"onFolderCopy\", \"onMove\", \"onDelete\", \"onDownload\", \"onTouchstart\", \"onTouchend\", \"onTouchmove\"]);\n }), 128))], 2)), $setup.isDragging ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"drag-select-overlay\",\n style: _normalizeStyle({\n position: 'fixed',\n left: $setup.selectionRect.left + 'px',\n top: $setup.selectionRect.top + 'px',\n width: $setup.selectionRect.width + 'px',\n height: $setup.selectionRect.height + 'px'\n })\n }, null, 4)) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_29, [_createElementVNode(\"div\", _hoisted_30, [_createVNode(_component_el_pagination, {\n background: \"\",\n layout: \"prev, pager, next\",\n total: $options.filteredTableData.length,\n \"page-size\": $data.pageSize,\n \"current-page\": $data.currentPage,\n \"pager-count\": $options.pagerCount,\n onCurrentChange: $options.handlePageChange\n }, null, 8, [\"total\", \"page-size\", \"current-page\", \"pager-count\", \"onCurrentChange\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.refreshFileList,\n class: \"refresh-btn\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sync\",\n class: _normalizeClass({\n 'fa-spin': $data.refreshLoading\n })\n }, null, 8, [\"class\"])]),\n _: 1\n }, 8, [\"onClick\"]), $data.currentPage === Math.ceil($options.filteredTableData.length / $data.pageSize) ? (_openBlock(), _createBlock(_component_el_button, {\n key: 0,\n type: \"primary\",\n onClick: $options.loadMoreData,\n loading: $data.loading,\n class: \"load-more\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('dashboard.loadMore')), 1)]),\n _: 1\n }, 8, [\"onClick\", \"loading\"])) : _createCommentVNode(\"\", true)]), _createElementVNode(\"div\", _hoisted_31, [_createElementVNode(\"span\", _hoisted_32, _toDisplayString(_ctx.$t('dashboard.totalPages', {\n count: $options.realTotalPages\n })), 1), _createElementVNode(\"div\", _hoisted_33, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.jumpTo')), 1), _createVNode(_component_el_input, {\n modelValue: $data.jumpPage,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.jumpPage = $event),\n size: \"small\",\n class: \"jump-input\",\n onKeyup: _withKeys($options.handleJumpPage, [\"enter\"])\n }, null, 8, [\"modelValue\", \"onKeyup\"]), _createVNode(_component_el_button, {\n size: \"small\",\n type: \"primary\",\n onClick: $options.handleJumpPage,\n class: \"jump-btn\"\n }, {\n default: _withCtx(() => [...(_cache[24] || (_cache[24] = [_createTextVNode(\"GO\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"])])])])]),\n _: 1\n }, 8, [\"class\"])]),\n _: 1\n }), _createVNode(_component_BatchActionBar, {\n \"selected-count\": $data.selectedFiles.length,\n onAction: $options.handleBatchAction,\n onClear: $options.clearSelection\n }, null, 8, [\"selected-count\", \"onAction\", \"onClear\"]), _createVNode(_component_FileDetailDialog, {\n modelValue: $data.showdetailDialog,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.showdetailDialog = $event),\n file: $data.detailFile,\n fileLink: $options.getFileLink($data.detailFile?.name),\n urls: $options.allUrl,\n onDownload: _cache[9] || (_cache[9] = $event => $options.handleDownload($data.detailFile?.name)),\n onTagManagement: _cache[10] || (_cache[10] = $event => $options.handleTagManagement($data.detailFile?.name)),\n onBlock: _cache[11] || (_cache[11] = $event => $options.handleBlock($data.detailFile?.name)),\n onWhite: _cache[12] || (_cache[12] = $event => $options.handleWhite($data.detailFile?.name)),\n onDelete: _cache[13] || (_cache[13] = $event => $options.handleDetailDelete($data.detailFile?.name)),\n onMetadataUpdated: $options.handleMetadataUpdated,\n onFileRenamed: $options.handleFileRenamed\n }, null, 8, [\"modelValue\", \"file\", \"fileLink\", \"urls\", \"onMetadataUpdated\", \"onFileRenamed\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('dashboard.linkFormat'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"div\", _hoisted_35, [_createElementVNode(\"span\", _hoisted_36, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_37, [_createVNode(_component_el_radio_group, {\n modelValue: $data.defaultUrlFormat,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.defaultUrlFormat = $event),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"originUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"mdUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[25] || (_cache[25] = _createElementVNode(\"span\", null, \"Markdown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"htmlUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[26] || (_cache[26] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"bbUrl\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[27] || (_cache[27] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"tgId\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"radio-icon\"\n }), _cache[28] || (_cache[28] = _createElementVNode(\"span\", null, \"TG File ID\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3Location\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.s3Link')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_38, [_createElementVNode(\"div\", _hoisted_39, [_createElementVNode(\"span\", _hoisted_40, _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_41, [_createElementVNode(\"div\", _hoisted_42, [_createElementVNode(\"span\", _hoisted_43, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_44, [_createElementVNode(\"span\", _hoisted_45, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_46, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[17] || (_cache[17] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_TagManagementDialog, {\n modelValue: $data.showTagDialog,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.showTagDialog = $event),\n fileId: $data.currentTagFile,\n onTagsUpdated: $options.handleTagsUpdated\n }, null, 8, [\"modelValue\", \"fileId\", \"onTagsUpdated\"]), _createVNode(_component_BatchTagDialog, {\n modelValue: $data.showBatchTagDialog,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.showBatchTagDialog = $event),\n selectedFiles: $data.selectedFiles,\n onTagsUpdated: $options.handleBatchTagsUpdated\n }, null, 8, [\"modelValue\", \"selectedFiles\", \"onTagsUpdated\"]), _createVNode(_component_MobileActionSheet, {\n modelValue: $data.showMobileActionModal,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.showMobileActionModal = $event),\n title: $data.mobileActionIsFolder ? $options.getFolderName($data.mobileActionFile?.name || '') : $data.mobileActionFile?.metadata?.FileName || $options.getFileName($data.mobileActionFile?.name || ''),\n isFolder: $data.mobileActionIsFolder,\n onAction: $options.handleMobileAction\n }, null, 8, [\"modelValue\", \"title\", \"isFolder\", \"onAction\"]), _createVNode(_component_MobileDirectoryDrawer, {\n modelValue: $data.showMobileDirectoryDrawer,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showMobileDirectoryDrawer = $event),\n currentPath: $data.currentPath,\n onNavigate: $options.navigateToFolder,\n onGoBack: $options.handleGoBack\n }, null, 8, [\"modelValue\", \"currentPath\", \"onNavigate\", \"onGoBack\"]), _createVNode(_component_MoveFileDialog, {\n modelValue: $data.showMoveDialog,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.showMoveDialog = $event),\n \"current-directory\": $data.currentPath,\n \"is-batch-move\": $data.isBatchMove,\n \"initial-path\": $data.moveTargetPath,\n onConfirm: $options.confirmMove\n }, null, 8, [\"modelValue\", \"current-directory\", \"is-batch-move\", \"initial-path\", \"onConfirm\"])]);\n}","// 文件管理器工具类\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { ElMessage } from 'element-plus';\r\nimport i18n from '@/locales';\r\n\r\nclass FileManager {\r\n constructor() {\r\n this.FILE_LIST_PATH = 'data/fileList.json';\r\n this.fileListCache = null;\r\n this.storageWarningShown = false;\r\n }\r\n\r\n // 从本地存储读取文件列表\r\n getLocalFileList() {\r\n const fileList = this.getMutableFileList();\r\n return {\r\n ...fileList,\r\n files: [...(fileList.files || [])],\r\n directories: [...(fileList.directories || [])],\r\n };\r\n }\r\n\r\n getMutableFileList() {\r\n if (this.fileListCache) {\r\n return this.fileListCache;\r\n }\r\n\r\n try {\r\n const fileList = localStorage.getItem(this.FILE_LIST_PATH);\r\n this.fileListCache = fileList ? JSON.parse(fileList) : this.createEmptyFileList();\r\n return this.fileListCache;\r\n } catch (error) {\r\n console.error('Error reading local file list:', error);\r\n this.fileListCache = this.createEmptyFileList();\r\n return this.fileListCache;\r\n }\r\n }\r\n\r\n // 更新内存缓存,并尽量持久化到 localStorage\r\n updateFileListCache(fileList) {\r\n this.fileListCache = fileList || this.createEmptyFileList();\r\n const persisted = this.persistFileListCache();\r\n\r\n return {\r\n cacheUpdated: true,\r\n persisted,\r\n };\r\n }\r\n\r\n persistFileListCache() {\r\n try {\r\n localStorage.setItem(this.FILE_LIST_PATH, JSON.stringify(this.fileListCache));\r\n return true;\r\n } catch (error) {\r\n this.handleStoragePersistError(error);\r\n return false;\r\n }\r\n }\r\n\r\n createEmptyFileList() {\r\n return { files: [], directories: [] };\r\n }\r\n\r\n handleStoragePersistError(error) {\r\n console.warn('File list is kept in memory because localStorage persistence failed:', error);\r\n\r\n try {\r\n localStorage.removeItem(this.FILE_LIST_PATH);\r\n } catch (removeError) {\r\n console.warn('Failed to remove stale file list cache:', removeError);\r\n }\r\n\r\n if (!this.storageWarningShown) {\r\n this.storageWarningShown = true;\r\n ElMessage.warning(i18n.global.t('dashboard.fileListMemoryCacheWarning'));\r\n }\r\n }\r\n\r\n // 添加新文件到列表\r\n addFile(newFile) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n fileList.files.push(newFile);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error adding file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 添加新文件夹\r\n addFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n if (!fileList.directories.includes(folderName)) {\r\n fileList.directories.push(folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n }\r\n return false; // 文件夹已存在\r\n } catch (error) {\r\n console.error('Error adding folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 移动文件或文件夹\r\n moveFile(oldPath, newPath, isFolder = false, currentPath = '') {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n \r\n if (isFolder) {\r\n // 更新目录列表\r\n const oldFolderIndex = fileList.directories.indexOf(oldPath);\r\n if (oldFolderIndex !== -1) {\r\n fileList.directories.splice(oldFolderIndex, 1);\r\n }\r\n\r\n } else {\r\n // 移动单个文件\r\n const fileIndex = fileList.files.findIndex(file => file.name === oldPath);\r\n if (fileIndex !== -1) {\r\n // 从旧位置移除\r\n fileList.files.splice(fileIndex, 1);\r\n }\r\n\r\n }\r\n\r\n // 如果新路径包含当前目录的直接子目录,则添加直接子目录\r\n if (newPath.startsWith(currentPath)) {\r\n const pathArray = newPath.substring(currentPath.length).split('/');\r\n if (pathArray.length > 1) {\r\n const newFolder = currentPath + pathArray[0];\r\n if (!fileList.directories.includes(newFolder)) {\r\n fileList.directories.push(newFolder);\r\n }\r\n }\r\n }\r\n\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error moving file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件\r\n removeFile(fileName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => file.name !== fileName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件夹(同时删除该文件夹下的所有文件)\r\n removeFolder(folderName) {\r\n try {\r\n let fileList = this.getMutableFileList();\r\n fileList.files = fileList.files.filter(file => !file.name.startsWith(folderName + '/'));\r\n fileList.directories = fileList.directories.filter(dir => dir !== folderName);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error removing folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 获取指定目录下的文件和子目录\r\n getFilesInFolder(folderName) {\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const files = fileList.files.filter(file => file.name.startsWith(folderName + '/'));\r\n const subdirectories = fileList.directories.filter(dir => dir.startsWith(folderName + '/'));\r\n return { files, directories: subdirectories };\r\n } catch (error) {\r\n console.error('Error getting files in folder:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n\r\n // 构建筛选参数URL\r\n buildFilterParams(filters) {\r\n let params = '';\r\n // 访问状态筛选(综合判断)\r\n if (filters.accessStatus && filters.accessStatus.length > 0) {\r\n params += `&accessStatus=${encodeURIComponent(filters.accessStatus.join(','))}`;\r\n }\r\n // 黑白名单筛选(直接使用 ListType 字段)\r\n if (filters.listType && filters.listType.length > 0) {\r\n params += `&listType=${encodeURIComponent(filters.listType.join(','))}`;\r\n }\r\n if (filters.label && filters.label.length > 0) {\r\n params += `&label=${encodeURIComponent(filters.label.join(','))}`;\r\n }\r\n if (filters.fileType && filters.fileType.length > 0) {\r\n params += `&fileType=${encodeURIComponent(filters.fileType.join(','))}`;\r\n }\r\n if (filters.channel && filters.channel.length > 0) {\r\n params += `&channel=${encodeURIComponent(filters.channel.join(','))}`;\r\n }\r\n if (filters.channelName && filters.channelName.length > 0) {\r\n params += `&channelName=${encodeURIComponent(filters.channelName.join(','))}`;\r\n }\r\n return params;\r\n }\r\n\r\n // 更新文件列表\r\n async refreshFileList(dir, search = '', includeTags = '', excludeTags = '', filters = {}) {\r\n search = search.trim();\r\n try {\r\n let url = `/api/manage/list?count=60&dir=${dir}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n \r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n const newFileList = await response.json();\r\n if (!newFileList.isIndexedResponse) {\r\n ElMessage.warning(i18n.global.t('dashboard.indexingWarning'));\r\n }\r\n // 保存包含新字段的完整数据\r\n return this.updateFileListCache(newFileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error refreshing file list:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 读取更多数据\r\n async loadMoreFiles(dir, search = '', includeTags = '', excludeTags = '', count = 60, filters = {}) {\r\n search = search.trim();\r\n try {\r\n const fileList = this.getMutableFileList();\r\n const start = fileList.files.length;\r\n\r\n let url = `/api/manage/list?dir=${dir}&start=${start}&count=${count}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n\r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n \r\n const moreFiles = await response.json();\r\n fileList.files.push(...moreFiles.files);\r\n return this.updateFileListCache(fileList).cacheUpdated;\r\n } catch (error) {\r\n console.error('Error loading more files:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n}\r\n\r\nexport const fileManager = new FileManager();\r\n","/**\r\n * 矩形工具函数\r\n * 用于框选(rubber-band selection)功能中的矩形计算和相交检测\r\n */\r\n\r\n/**\r\n * 判断两个矩形是否相交\r\n * @param {Object} rectA - { left, top, right, bottom }\r\n * @param {Object} rectB - { left, top, right, bottom }\r\n * @returns {boolean} 是否存在重叠区域\r\n */\r\nexport function rectIntersects(rectA, rectB) {\r\n return !(\r\n rectA.right <= rectB.left ||\r\n rectA.left >= rectB.right ||\r\n rectA.bottom <= rectB.top ||\r\n rectA.top >= rectB.bottom\r\n );\r\n}\r\n\r\n/**\r\n * 根据起始点和当前点计算选区矩形\r\n * @param {Object} start - { x, y } 起始鼠标坐标\r\n * @param {Object} current - { x, y } 当前鼠标坐标\r\n * @returns {Object} { left, top, width, height, right, bottom }\r\n */\r\nexport function calcSelectionRect(start, current) {\r\n const left = Math.min(start.x, current.x);\r\n const top = Math.min(start.y, current.y);\r\n const width = Math.abs(current.x - start.x);\r\n const height = Math.abs(current.y - start.y);\r\n return { left, top, width, height, right: left + width, bottom: top + height };\r\n}\r\n","import { ref, watch, onMounted, onBeforeUnmount, toValue } from 'vue';\r\nimport { rectIntersects, calcSelectionRect } from './rectIntersects.js';\r\n\r\n/**\r\n * Vue 3 Composable:框选(rubber-band selection)核心逻辑,支持多视图模式\r\n *\r\n * @param {Object} options\r\n * @param {Object} options.modes - Per-view-mode configuration\r\n * @param {Object} options.modes.card - Card view config\r\n * @param {import('vue').Ref} options.modes.card.containerRef\r\n * @param {string} options.modes.card.itemSelector - e.g. '.img-card'\r\n * @param {Object} options.modes.list - List view config\r\n * @param {import('vue').Ref} options.modes.list.containerRef\r\n * @param {string} options.modes.list.itemSelector - e.g. '.list-item'\r\n * @param {string} [options.mainSelector='.main-container'] - 主内容区域的 CSS 选择器,框选只能从该区域内开始\r\n * @param {import('vue').Ref} options.viewMode - 当前视图模式\r\n * @param {import('vue').Ref} options.items - 当前页的数据项(paginatedTableData)\r\n * @returns {{ isDragging: import('vue').Ref, selectionRect: import('vue').Ref }}\r\n */\r\nexport function useDragSelect(options) {\r\n const {\r\n modes,\r\n mainSelector = '.main-container',\r\n viewMode,\r\n items,\r\n } = options;\r\n\r\n // --- Reactive state ---\r\n const isDragging = ref(false);\r\n const selectionRect = ref({ left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 });\r\n\r\n // --- Internal (non-reactive) state ---\r\n let startPoint = null; // { x, y } viewport coordinates at mousedown\r\n let preSelectSnapshot = []; // boolean[] snapshot of items[i].selected before drag\r\n let isAppendMode = false; // whether Shift/Ctrl/Cmd was held at mousedown\r\n\r\n // --- Enable/disable state ---\r\n const MOBILE_BREAKPOINT = 768; // px – at or below this width, drag-select is disabled\r\n let listenerAttached = false; // tracks whether the container mousedown listener is active\r\n\r\n // --- Auto-scroll state ---\r\n const EDGE_THRESHOLD = 50; // px from viewport edge to trigger auto-scroll\r\n const SCROLL_SPEED = 10; // px per frame to scroll\r\n let autoScrollTimer = null; // requestAnimationFrame ID for auto-scroll\r\n\r\n // --- Text selection prevention state ---\r\n let savedUserSelect = ''; // saved document.body.style.userSelect before drag\r\n\r\n // ------------------------------------------------------------------\r\n // Mode resolution helper\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Returns the configuration for the current viewMode.\r\n * @returns {{ containerRef: import('vue').Ref, itemSelector: string } | undefined}\r\n */\r\n function getActiveConfig() {\r\n const mode = toValue(viewMode);\r\n return modes[mode] || undefined;\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Enable / disable helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Determine whether drag-select should be enabled.\r\n * Returns true when viewMode is 'card' or 'list' AND window width > 768px.\r\n */\r\n function shouldEnable() {\r\n const mode = toValue(viewMode);\r\n return (mode === 'card' || mode === 'list') && window.innerWidth > MOBILE_BREAKPOINT;\r\n }\r\n\r\n /**\r\n * Conditionally attach or detach the container listener based on shouldEnable().\r\n * Also cancels any active drag when detaching.\r\n */\r\n function syncListenerState() {\r\n if (shouldEnable()) {\r\n if (!listenerAttached) {\r\n attachContainerListener();\r\n }\r\n } else {\r\n if (listenerAttached) {\r\n cancelDrag();\r\n detachContainerListener();\r\n }\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * 判断 mousedown 目标是否为可启动框选的空白区域。\r\n * 必须在主内容区域内,且不在卡片、交互元素上。\r\n */\r\n function isBlankArea(event) {\r\n const target = event.target;\r\n // 必须在主内容区域(el-main)内\r\n const mainArea = target.closest(mainSelector);\r\n if (!mainArea) return false;\r\n // 排除当前模式的可选元素\r\n const config = getActiveConfig();\r\n if (config) {\r\n const itemEl = target.closest(config.itemSelector);\r\n if (itemEl) {\r\n const container = toValue(config.containerRef);\r\n if (container && container.contains(itemEl)) {\r\n return false;\r\n }\r\n }\r\n }\r\n // 排除交互元素(按钮、输入框、链接、下拉菜单、分页等)\r\n const interactive = target.closest('button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container');\r\n if (interactive) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Determine whether a modifier key for append-select is pressed.\r\n */\r\n function hasAppendModifier(event) {\r\n return event.shiftKey || event.ctrlKey || event.metaKey;\r\n }\r\n\r\n /**\r\n * Save a snapshot of the current selected state for all items.\r\n */\r\n function saveSnapshot() {\r\n const currentItems = toValue(items);\r\n preSelectSnapshot = currentItems.map((item) => !!item.selected);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Auto-scroll helpers\r\n // ------------------------------------------------------------------\r\n\r\n /** The last known clientY during a drag – updated by onMouseMove. */\r\n let lastClientY = 0;\r\n\r\n /**\r\n * Start the auto-scroll loop. On each animation frame we check whether the\r\n * mouse is within EDGE_THRESHOLD of the top or bottom of the viewport and\r\n * scroll accordingly. The selection rectangle and card hit-testing are also\r\n * updated after each scroll step so the visual feedback stays in sync.\r\n */\r\n function startAutoScroll() {\r\n if (autoScrollTimer !== null) return; // already running\r\n\r\n function scrollStep() {\r\n const viewportHeight = window.innerHeight;\r\n let scrollDelta = 0;\r\n\r\n if (lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n // Near bottom edge → scroll down\r\n scrollDelta = SCROLL_SPEED;\r\n } else if (lastClientY <= EDGE_THRESHOLD) {\r\n // Near top edge → scroll up\r\n scrollDelta = -SCROLL_SPEED;\r\n }\r\n\r\n if (scrollDelta !== 0) {\r\n window.scrollBy(0, scrollDelta);\r\n\r\n // After scrolling, the viewport-relative positions of cards change,\r\n // but the mouse hasn't moved. We need to adjust the start point so\r\n // the selection rectangle accounts for the scroll offset, then\r\n // re-run hit-testing.\r\n if (startPoint) {\r\n startPoint.y -= scrollDelta;\r\n selectionRect.value = calcSelectionRect(startPoint, { x: selectionRect.value.right >= startPoint.x ? selectionRect.value.right : selectionRect.value.left, y: lastClientY });\r\n updateSelection();\r\n }\r\n }\r\n\r\n // Continue the loop\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n autoScrollTimer = requestAnimationFrame(scrollStep);\r\n }\r\n\r\n /**\r\n * Stop the auto-scroll loop and clean up the timer.\r\n */\r\n function stopAutoScroll() {\r\n if (autoScrollTimer !== null) {\r\n cancelAnimationFrame(autoScrollTimer);\r\n autoScrollTimer = null;\r\n }\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Text selection prevention helpers\r\n // ------------------------------------------------------------------\r\n\r\n /**\r\n * Disable text selection on the document body during drag.\r\n */\r\n function disableTextSelection() {\r\n savedUserSelect = document.body.style.userSelect;\r\n document.body.style.userSelect = 'none';\r\n }\r\n\r\n /**\r\n * Restore the original text selection behavior on the document body.\r\n */\r\n function restoreTextSelection() {\r\n document.body.style.userSelect = savedUserSelect;\r\n }\r\n\r\n /**\r\n * Update the selected state of every item based on the current selection rectangle.\r\n */\r\n function updateSelection() {\r\n const config = getActiveConfig();\r\n if (!config) return;\r\n\r\n const container = toValue(config.containerRef);\r\n if (!container) return;\r\n\r\n const currentItems = toValue(items);\r\n const rect = selectionRect.value;\r\n\r\n // Build the selection rect in {left, top, right, bottom} format for intersection test\r\n const selRect = {\r\n left: rect.left,\r\n top: rect.top,\r\n right: rect.right,\r\n bottom: rect.bottom,\r\n };\r\n\r\n // Query all item DOM elements inside the container using the active mode's selector\r\n const itemElements = container.querySelectorAll(config.itemSelector);\r\n\r\n // Iterate over items and corresponding DOM elements\r\n currentItems.forEach((item, index) => {\r\n const itemEl = itemElements[index];\r\n if (!itemEl) return;\r\n\r\n const itemRect = itemEl.getBoundingClientRect();\r\n const itemBounds = {\r\n left: itemRect.left,\r\n top: itemRect.top,\r\n right: itemRect.right,\r\n bottom: itemRect.bottom,\r\n };\r\n\r\n const intersects = rectIntersects(selRect, itemBounds);\r\n\r\n if (isAppendMode) {\r\n // Append mode: keep original state, toggle on if intersects\r\n // If originally selected, stay selected regardless\r\n // If not originally selected, select if intersects\r\n if (preSelectSnapshot[index]) {\r\n item.selected = true;\r\n } else {\r\n item.selected = intersects;\r\n }\r\n } else {\r\n // Non-append mode: selected = intersects only\r\n item.selected = intersects;\r\n }\r\n });\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Mouse event handlers\r\n // ------------------------------------------------------------------\r\n\r\n function onMouseDown(event) {\r\n // 仅响应鼠标左键\r\n if (event.button !== 0) return;\r\n\r\n // 点击在卡片上时不启动框选\r\n if (!isBlankArea(event)) return;\r\n\r\n // Record start point (viewport coordinates)\r\n startPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Determine append mode from modifier keys at the moment of mousedown\r\n isAppendMode = hasAppendModifier(event);\r\n\r\n // 保存选中状态快照\r\n saveSnapshot();\r\n\r\n // 非追加模式下先清除所有选中\r\n if (!isAppendMode) {\r\n const currentItems = toValue(items);\r\n currentItems.forEach((item) => {\r\n item.selected = false;\r\n });\r\n }\r\n\r\n // Start dragging\r\n isDragging.value = true;\r\n selectionRect.value = calcSelectionRect(startPoint, startPoint);\r\n\r\n // 防止文本选中\r\n disableTextSelection();\r\n\r\n // Attach document-level listeners for move and up\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n function onMouseMove(event) {\r\n if (!isDragging.value || !startPoint) return;\r\n\r\n const currentPoint = { x: event.clientX, y: event.clientY };\r\n\r\n // Track last clientY for auto-scroll\r\n lastClientY = event.clientY;\r\n\r\n // Update selection rectangle\r\n selectionRect.value = calcSelectionRect(startPoint, currentPoint);\r\n\r\n // Update card selection based on intersection\r\n updateSelection();\r\n\r\n // Start or continue auto-scroll if near viewport edges\r\n const viewportHeight = window.innerHeight;\r\n if (lastClientY <= EDGE_THRESHOLD || lastClientY >= viewportHeight - EDGE_THRESHOLD) {\r\n startAutoScroll();\r\n } else {\r\n stopAutoScroll();\r\n }\r\n }\r\n\r\n function onMouseUp(_event) {\r\n if (!isDragging.value) return;\r\n\r\n // 停止自动滚动\r\n stopAutoScroll();\r\n\r\n // 恢复文本选中\r\n restoreTextSelection();\r\n\r\n // End dragging\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n\r\n // Clean up document-level listeners\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Lifecycle: attach / detach container listener\r\n // ------------------------------------------------------------------\r\n\r\n function attachContainerListener() {\r\n if (!listenerAttached) {\r\n document.addEventListener('mousedown', onMouseDown);\r\n listenerAttached = true;\r\n }\r\n }\r\n\r\n function detachContainerListener() {\r\n if (listenerAttached) {\r\n document.removeEventListener('mousedown', onMouseDown);\r\n listenerAttached = false;\r\n }\r\n }\r\n\r\n /**\r\n * Force-stop any in-progress drag (e.g. when viewMode changes).\r\n */\r\n function cancelDrag() {\r\n if (isDragging.value) {\r\n stopAutoScroll();\r\n restoreTextSelection();\r\n isDragging.value = false;\r\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\r\n startPoint = null;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n }\r\n\r\n // 监听 viewMode 变化,启用/禁用框选\r\n // Always cancel any in-progress drag when viewMode changes (Requirement 2.3),\r\n // then re-evaluate whether listeners should be attached for the new mode.\r\n watch(\r\n () => toValue(viewMode),\r\n () => {\r\n cancelDrag();\r\n syncListenerState();\r\n }\r\n );\r\n\r\n // --- Window resize handler ---\r\n function onWindowResize() {\r\n syncListenerState();\r\n }\r\n\r\n onMounted(() => {\r\n // 仅在满足条件时启用\r\n if (shouldEnable()) {\r\n attachContainerListener();\r\n }\r\n // Always listen for resize to dynamically enable/disable\r\n window.addEventListener('resize', onWindowResize);\r\n });\r\n\r\n onBeforeUnmount(() => {\r\n cancelDrag();\r\n restoreTextSelection();\r\n stopAutoScroll();\r\n detachContainerListener();\r\n window.removeEventListener('resize', onWindowResize);\r\n });\r\n\r\n return {\r\n isDragging,\r\n selectionRect,\r\n };\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.js\";\nimport \"core-js/modules/web.url-search-params.delete.js\";\nimport \"core-js/modules/web.url-search-params.has.js\";\nimport \"core-js/modules/web.url-search-params.size.js\";\nimport { mapGetters } from 'vuex';\nimport JSZip from 'jszip';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport TagManagementDialog from '@/components/dashboard/TagManagementDialog.vue';\nimport BatchTagDialog from '@/components/dashboard/BatchTagDialog.vue';\nimport SkeletonLoader from '@/components/dashboard/SkeletonLoader.vue';\nimport FileCard from '@/components/dashboard/FileCard.vue';\nimport FolderCard from '@/components/dashboard/FolderCard.vue';\nimport MoveFileDialog from '@/components/dashboard/MoveFileDialog.vue';\nimport FileListItem from '@/components/dashboard/FileListItem.vue';\nimport FileDetailDialog from '@/components/dashboard/FileDetailDialog.vue';\nimport BatchActionBar from '@/components/dashboard/BatchActionBar.vue';\nimport MobileActionSheet from '@/components/dashboard/MobileActionSheet.vue';\nimport MobileDirectoryDrawer from '@/components/dashboard/MobileDirectoryDrawer.vue';\nimport FilterDropdown from '@/components/dashboard/FilterDropdown.vue';\nimport LanguageSwitcher from '@/components/LanguageSwitcher.vue';\nimport { fileManager } from '@/utils/fileManager';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFolderPath } from '@/utils/pathValidator';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport { ref } from 'vue';\nimport { useDragSelect } from '@/utils/dashboard/useDragSelect.js';\nexport default {\n name: 'AdminDashBoard',\n mixins: [backgroundManager],\n data() {\n return {\n Number: 0,\n directFileCount: 0,\n // 当前目录直接子文件数量\n directFolderCount: 0,\n // 当前目录直接子文件夹数量\n showLogoutButton: false,\n tableData: [],\n tempSearch: '',\n search: '',\n searchKeywords: '',\n // Keywords only (without tag filters) for backend search\n searchIncludeTags: '',\n // 包含的标签,逗号分隔\n searchExcludeTags: '',\n // 排除的标签,逗号分隔\n isSearchMode: false,\n currentPage: 1,\n pageSize: 15,\n selectedFiles: [],\n sortOption: 'dateDesc',\n isUploading: false,\n showdetailDialog: false,\n detailFile: null,\n activeUrlTab: 'originUrl',\n defaultUrlFormat: 'originUrl',\n showUrlDialog: false,\n useCustomUrl: 'false',\n // 是否启用自定义链接\n customUrlPrefix: '',\n // 自定义链接前缀\n loading: false,\n // 加载状态\n currentPath: '',\n // 当前文件夹路径\n refreshLoading: false,\n showTagDialog: false,\n // 标签管理对话框\n showBatchTagDialog: false,\n // 批量标签管理对话框\n currentTagFile: '',\n // 当前标签管理的文件\n viewMode: 'card',\n // 视图模式:card 或 list\n showMobileActionModal: false,\n // 移动端操作模态框\n mobileActionFile: null,\n // 当前移动端操作的文件\n mobileActionIndex: -1,\n // 当前移动端操作的文件索引\n mobileActionIsFolder: false,\n // 是否为文件夹操作\n longPressTimer: null,\n // 长按计时器\n showMobileDirectoryDrawer: false,\n // 移动端目录抽屉\n jumpPage: '',\n // 跳转页码输入\n // 筛选相关状态(数组形式支持多选)\n filters: {\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'None'\n label: [],\n // 审查结果: 'normal', 'teen', 'adult'\n fileType: [],\n // 文件类型: 'image', 'video', 'audio', 'other'\n channel: [],\n // 渠道类型: 'TelegramNew', 'CloudflareR2', 'S3', 'Discord', 'HuggingFace', 'WebDAV', 'External'\n channelName: [] // 渠道名称: 动态获取\n },\n channelNameOptions: [],\n // 动态从文件列表中提取\n // 移动文件对话框相关状态\n showMoveDialog: false,\n // 移动文件对话框\n moveTargetPath: '/',\n // 移动目标路径\n moveFileKey: '',\n // 当前移动的文件key\n moveFileIndex: -1,\n // 当前移动的文件索引\n isBatchMove: false // 是否为批量移动\n };\n },\n components: {\n DashboardTabs,\n TagManagementDialog,\n BatchTagDialog,\n SkeletonLoader,\n FileCard,\n FolderCard,\n FileListItem,\n FileDetailDialog,\n BatchActionBar,\n MobileActionSheet,\n MobileDirectoryDrawer,\n FilterDropdown,\n MoveFileDialog,\n LanguageSwitcher\n },\n setup() {\n const cardContainerRef = ref(null);\n const listContainerRef = ref(null);\n const viewModeRef = ref('card');\n const itemsRef = ref([]);\n const {\n isDragging,\n selectionRect\n } = useDragSelect({\n modes: {\n card: {\n containerRef: cardContainerRef,\n itemSelector: '.img-card'\n },\n list: {\n containerRef: listContainerRef,\n itemSelector: '.list-item'\n }\n },\n viewMode: viewModeRef,\n items: itemsRef\n });\n return {\n cardContainerRef,\n listContainerRef,\n viewModeRef,\n itemsRef,\n isDragging,\n selectionRect\n };\n },\n computed: {\n ...mapGetters(['adminUrlSettings', 'userConfig']),\n filteredTableData() {\n return this.tableData;\n },\n totalPages() {\n return Math.ceil(this.filteredTableData.length / this.pageSize) || 1;\n },\n // 基于当前文件夹直接子文件和子文件夹数量计算的真实总页数\n realTotalPages() {\n const total = this.directFolderCount + this.directFileCount;\n return Math.ceil(total / this.pageSize) || 1;\n },\n // 计算当前激活的筛选条件数量(数组形式)\n activeFilterCount() {\n return Object.values(this.filters).reduce((count, arr) => count + (Array.isArray(arr) ? arr.length : 0), 0);\n },\n // 判断是否处于搜索或筛选模式\n hasSearchOrFilter() {\n return this.isSearchMode || this.activeFilterCount > 0;\n },\n paginatedTableData() {\n const sortedData = this.sortData(this.filteredTableData);\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n let data = sortedData.slice(start, end);\n // 增加previewSrcList属性,用于预览图片\n const fullList = data.filter(file => this.isImage(file)).map(file => this.getFileLink(file.name));\n data.forEach(file => {\n if (this.isImage(file)) {\n // 重新排序,索引大于等于当前索引的元素在前,否则在后\n file.previewSrcList = fullList.slice(fullList.indexOf(this.getFileLink(file.name))).concat(fullList.slice(0, fullList.indexOf(this.getFileLink(file.name))));\n }\n });\n // 增加channelTag属性,用于显示渠道信息\n data.forEach(file => {\n if (file.metadata?.Channel === 'TelegramNew' || file.metadata?.Channel === 'Telegram') {\n file.channelTag = 'TG';\n } else if (file.metadata?.Channel === 'CloudflareR2') {\n file.channelTag = 'R2';\n } else if (file.metadata?.Channel === 'S3') {\n file.channelTag = 'S3';\n } else if (file.metadata?.Channel === 'Discord') {\n file.channelTag = 'DC';\n } else if (file.metadata?.Channel === 'HuggingFace') {\n file.channelTag = 'HF';\n } else if (file.metadata?.Channel === 'WebDAV') {\n file.channelTag = 'WD';\n } else if (file.metadata?.Channel === 'External') {\n file.channelTag = this.$t('dashboard.externalTag');\n } else {\n file.channelTag = this.$t('dashboard.unknownTag');\n }\n });\n return data;\n },\n sortIcon() {\n return this.sortOption === 'dateDesc' ? 'sort-amount-down' : 'sort-alpha-up';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n detailDialogWidth() {\n return window.innerWidth > 768 ? '70%' : '90%';\n },\n accessType() {\n if (this.detailFile?.metadata?.ListType === 'White') {\n return this.$t('filter.normal');\n } else if (this.detailFile?.metadata?.ListType === 'Block' || this.detailFile?.metadata?.Label === 'adult') {\n return this.$t('filter.blocked');\n } else {\n return this.$t('filter.normal');\n }\n },\n allUrl() {\n // 外链图片均采用外链\n if (this.detailFile?.metadata?.Channel === 'External') {\n return {\n 'originUrl': `${this.detailFile?.metadata?.ExternalLink}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.detailFile?.metadata?.ExternalLink})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n } else {\n return {\n 'originUrl': `${this.rootUrl}${this.detailFile?.name}`,\n 'mdUrl': `![${this.detailFile?.metadata?.FileName || this.detailFile?.name}](${this.rootUrl}${this.detailFile?.name})`,\n 'htmlUrl': `\"${this.detailFile?.metadata?.FileName`,\n 'bbUrl': `[img]${this.rootUrl}${this.detailFile?.name}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || this.$t('fileDetail.unknown'),\n 'S3Location': this.detailFile?.metadata?.S3Location || this.$t('fileDetail.unknown'),\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || this.$t('fileDetail.unknown')\n };\n }\n },\n tableColumnNum() {\n return window.innerWidth > 768 ? 3 : 1;\n },\n tablePreviewSpan() {\n return window.innerWidth > 768 ? 2 : 1;\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n selectPage() {\n // 如果当前页所有文件都被选中,则返回 true,否则返回 false\n return this.paginatedTableData.every(file => file.selected);\n },\n selectedPageFiles() {\n // 如果当前页有文件被选中,则返回 true,否则返回 false\n return this.paginatedTableData.some(file => file.selected);\n },\n selectPageIcon() {\n // 全选为 true 时,返回 check-square;部分选中为 minus-square;全不选为 square\n return this.selectPage ? 'check-square' : this.selectedPageFiles ? 'minus-square' : 'square';\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.userConfig?.urlPrefix || `${document.location.origin}/file/`;\n },\n isSelectAll: {\n get() {\n return this.paginatedTableData.length > 0 && this.paginatedTableData.every(file => file.selected);\n },\n set(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n }\n },\n isIndeterminate() {\n const selectedCount = this.paginatedTableData.filter(file => file.selected).length;\n return selectedCount > 0 && selectedCount < this.paginatedTableData.length;\n },\n pagerCount() {\n return window.innerWidth < 768 ? 5 : 7;\n }\n },\n watch: {\n // Sync viewMode data property to the ref used by useDragSelect\n viewMode: {\n handler(newVal) {\n this.viewModeRef = newVal;\n },\n immediate: true\n },\n // Sync paginatedTableData computed property to the ref used by useDragSelect\n paginatedTableData: {\n handler(newVal) {\n this.itemsRef = newVal;\n },\n immediate: true\n },\n tableData: {\n handler(newData) {\n // selectedFiles 增加 newData中新选中,不包含在 selectedFiles 中的文件\n this.selectedFiles = this.selectedFiles.concat(newData.filter(file => file.selected && !this.selectedFiles.includes(file)));\n // selectedFiles 删掉 newData 中已取消选中的文件\n this.selectedFiles = this.selectedFiles.filter(file => file.selected);\n // selectedFiles 删掉 tableData 中已删除的文件\n this.selectedFiles = this.selectedFiles.filter(file => newData.includes(file));\n },\n deep: true\n },\n sortOption(newOption) {\n localStorage.setItem('sortOption', newOption);\n },\n defaultUrlFormat(newFormat) {\n localStorage.setItem('defaultUrlFormat', newFormat);\n },\n showdetailDialog(newVal) {\n if (newVal) {\n this.activeUrlTab = this.defaultUrlFormat || 'originUrl';\n }\n },\n customUrlPrefix(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n currentPath(val) {\n // 页面切换时,取消选择的内容\n this.tableData.forEach(file => file.selected = false);\n }\n },\n methods: {\n // 切换视图模式\n toggleViewMode() {\n this.viewMode = this.viewMode === 'card' ? 'list' : 'card';\n localStorage.setItem('viewMode', this.viewMode);\n },\n // 列表视图全选当前页\n handleSelectAllPage(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n },\n // 移动端长按开始\n handleTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = false;\n this.showMobileActionModal = true;\n }, 500); // 500ms 长按触发\n },\n // 移动端长按结束/取消\n handleTouchEnd() {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n },\n // 文件夹长按开始\n handleFolderTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = true;\n this.showMobileActionModal = true;\n }, 500);\n },\n // 处理移动端操作\n handleMobileAction(action) {\n const file = this.mobileActionFile;\n const index = this.mobileActionIndex;\n this.showMobileActionModal = false;\n if (!file) return;\n switch (action) {\n case 'detail':\n this.openDetailDialog(index, file.name);\n break;\n case 'copy':\n this.handleCopy(index, file.name);\n break;\n case 'folderCopy':\n this.handleFolderCopy(file.name);\n break;\n case 'download':\n this.handleDownload(file.name);\n break;\n case 'move':\n this.handleMove(index, file.name);\n break;\n case 'delete':\n this.handleDelete(index, file.name);\n break;\n case 'tag':\n this.handleTagManagement(file.name);\n break;\n }\n },\n // 返回上一级目录\n handleGoBack() {\n const pathParts = this.currentPath.split('/').filter(Boolean);\n if (pathParts.length > 0) {\n pathParts.pop();\n const parentPath = pathParts.join('/');\n this.navigateToFolder(parentPath);\n }\n this.showMobileDirectoryDrawer = false;\n },\n // 获取标签颜色\n getTagColor(index) {\n const colors = ['linear-gradient(135deg, #667eea 0%, #764ba2 100%)', 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)', 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)', 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)', 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'];\n return colors[index % colors.length];\n },\n // 视频hover播放控制\n handleVideoHover(event, isEnter) {\n const video = event.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n },\n // 格式化文件大小\n formatFileSize(bytes) {\n if (!bytes || bytes === 0) return '-';\n bytes = Number(bytes);\n if (isNaN(bytes)) return '-';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n while (bytes >= 1024 && i < units.length - 1) {\n bytes /= 1024;\n i++;\n }\n return bytes.toFixed(i > 0 ? 1 : 0) + ' ' + units[i];\n },\n handleSearch() {\n this.search = this.tempSearch;\n this.isSearchMode = this.search.trim() !== '';\n this.currentPage = 1; // 重置到第一页\n\n // 解析搜索字符串,提取标签和关键字\n // 支持 #tag 表示包含标签,-#tag 表示排除标签\n if (this.search && this.search.trim()) {\n const includeTags = [];\n const excludeTags = [];\n\n // 匹配 -#tag 和 #tag\n let searchText = this.search;\n\n // 先匹配排除标签 -#tag\n const excludeTagRegex = /-#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(excludeTagRegex, (match, tag) => {\n excludeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 再匹配包含标签 #tag\n const includeTagRegex = /#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(includeTagRegex, (match, tag) => {\n includeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 清理剩余的关键字(去除多余空格)\n this.searchKeywords = searchText.replace(/\\s+/g, ' ').trim();\n\n // 构建标签查询字符串\n this.searchIncludeTags = includeTags.join(',');\n this.searchExcludeTags = excludeTags.join(',');\n console.log('Search keywords:', this.searchKeywords);\n console.log('Include tags:', this.searchIncludeTags);\n console.log('Exclude tags:', this.searchExcludeTags);\n } else {\n this.searchKeywords = '';\n this.searchIncludeTags = '';\n this.searchExcludeTags = '';\n }\n this.refreshFileList();\n },\n // 处理筛选变化(来自 FilterDropdown 组件)\n handleFilterChange({\n type,\n filters\n }) {\n this.filters = filters;\n this.currentPage = 1; // 重置到第一页\n this.refreshFileList();\n },\n // 清除所有筛选条件\n clearFilters() {\n this.filters = {\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.currentPage = 1;\n this.refreshFileList();\n },\n // 从 API 获取所有渠道名称\n async extractChannelNames() {\n try {\n const response = await fetchWithAuth('/api/channels?includeDisabled=true', {\n method: 'GET'\n });\n if (response.ok) {\n const channels = await response.json();\n const channelOptions = [];\n\n // 类型映射(显示名称)\n const typeLabels = {\n telegram: 'Telegram',\n cfr2: 'Cloudflare R2',\n s3: 'S3',\n discord: 'Discord',\n huggingface: 'HuggingFace',\n webdav: 'WebDAV'\n };\n\n // 按类型提取渠道名称,channel.type是类型内部存储名称(可能根据版本有变化),type是类型对外名称\n Object.entries(channels).forEach(([type, channelList]) => {\n if (Array.isArray(channelList) && channelList.length > 0) {\n channelList.forEach(channel => {\n if (channel.name) {\n channelOptions.push({\n name: channel.name,\n type: channel.type,\n typeLabel: typeLabels[type] || type,\n // 使用 channel.type:channel.name 作为唯一标识\n value: `${channel.type}:${channel.name}`\n });\n }\n });\n }\n });\n\n // 按类型和名称排序\n channelOptions.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type.localeCompare(b.type);\n }\n return a.name.localeCompare(b.name);\n });\n this.channelNameOptions = channelOptions;\n }\n } catch (error) {\n console.error('Failed to fetch channel names:', error);\n }\n },\n handleDownload(key) {\n const link = document.createElement('a');\n link.href = this.getFileLink(key);\n link.download = key;\n link.click();\n },\n openDetailDialog(index, key) {\n this.detailFile = this.paginatedTableData[index];\n this.showdetailDialog = true;\n },\n handleTabClick(tab) {\n this.activeUrlTab = tab.props.name;\n },\n handleUrlClick(event) {\n // 复制到剪贴板\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('dashboard.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('dashboard.copyFailed')\n });\n });\n },\n handleDetailDelete(key) {\n this.$confirm(this.$t('dashboard.deleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n this.showdetailDialog = false;\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBlock(key) {\n this.$confirm(this.$t('dashboard.blockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/block/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.blockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.blockFailed')));\n }).catch(() => console.log('Block cancelled'));\n },\n handleWhite(key) {\n this.$confirm(this.$t('dashboard.whiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/white/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.$message.success(this.$t('dashboard.whiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.whiteFailed')));\n }).catch(() => console.log('White cancelled'));\n },\n handleDelete(index, key) {\n // 判断是否为文件夹\n const isFolder = this.tableData.find(file => file.name === key).isFolder;\n this.$confirm(isFolder ? this.$t('dashboard.deleteFolderConfirm') : this.$t('dashboard.deleteFileConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}?folder=${isFolder}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.updateStats(-1, false);\n fileManager.removeFile(key);\n this.$message.success(this.$t('dashboard.deleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.deleteFailed')));\n }).catch(() => console.log('Delete cancelled'));\n },\n handleBatchDelete() {\n this.$confirm(this.$t('dashboard.batchDeleteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/delete/${file.name}?folder=${isFolder}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n fileManager.removeFile(this.selectedFiles[index].name);\n }\n });\n this.selectedFiles = [];\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.batchDeleteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchDeleteFailed')));\n }).catch(() => console.log('Batch delete cancelled'));\n },\n async handleBatchCopy() {\n // 分离文件和文件夹\n const files = this.selectedFiles.filter(item => !item.isFolder);\n const folders = this.selectedFiles.filter(item => item.isFolder);\n\n // 如果有文件夹,显示加载状态\n let loading = null;\n if (folders.length > 0) {\n loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n }\n try {\n // 收集所有文件(包括文件夹内的文件)\n let allFiles = [...files];\n\n // 递归获取所有文件夹内的文件\n for (const folder of folders) {\n try {\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folder.name)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n if (data.files && data.files.length > 0) {\n allFiles = allFiles.concat(data.files);\n }\n } catch (error) {\n console.error(`获取文件夹 ${folder.name} 内容失败:`, error);\n }\n }\n if (loading) loading.close();\n if (allFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 生成所有链接\n const links = allFiles.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.batchCopySuccess', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n }\n } catch (error) {\n if (loading) loading.close();\n console.error('Batch copy failed:', error);\n this.$message.error(this.$t('dashboard.batchCopyFailed'));\n }\n },\n copyToClipboardFallback(text) {\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n textarea.style.position = 'fixed';\n textarea.style.clip = 'rect(0 0 0 0)';\n textarea.style.top = '10px';\n textarea.value = text;\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n this.$message.success(this.$t('dashboard.batchCopyLinksSuccess'));\n },\n handleCopy(index, key) {\n let text = '';\n if (this.paginatedTableData[index].metadata?.Channel === 'External') {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = this.paginatedTableData[index].metadata?.ExternalLink;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.paginatedTableData[index].metadata?.ExternalLink})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.paginatedTableData[index].metadata?.ExternalLink}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n } else {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = `${this.rootUrl}${key}`;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.rootUrl}${key})`;\n break;\n case 'htmlUrl':\n text = `\"${this.paginatedTableData[index].metadata?.FileName`;\n break;\n case 'bbUrl':\n text = `[img]${this.rootUrl}${key}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n }\n navigator.clipboard ? navigator.clipboard.writeText(text).then(() => this.$message.success(this.$t('dashboard.copyFileLinkSuccess'))) : this.copyToClipboardFallback(text);\n },\n async loadMoreData() {\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, 60, this.filters);\n // 获取新的文件列表后\n await this.fetchFileList();\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadMoreFailed'));\n } finally {\n this.loading = false;\n }\n },\n updateStats(num, init = false) {\n if (init) {\n this.Number = num;\n } else {\n this.Number += num;\n }\n },\n sort(command) {\n this.sortOption = command;\n },\n sortData(data) {\n // 文件夹始终在前\n const folders = data.filter(file => file.isFolder);\n const files = data.filter(file => !file.isFolder);\n if (this.sortOption === 'dateDesc') {\n // 按时间降序\n folders.sort((a, b) => new Date(b.metadata?.TimeStamp) - new Date(a.metadata?.TimeStamp));\n files.sort((a, b) => new Date(b.metadata?.TimeStamp) - new Date(a.metadata?.TimeStamp));\n } else {\n // 按文件名升序\n folders.sort((a, b) => a.name.localeCompare(b.name));\n files.sort((a, b) => a.name.localeCompare(b.name));\n }\n return folders.concat(files);\n },\n handleVideoClick(event) {\n const videoElement = event.target;\n if (videoElement.requestFullscreen) {\n videoElement.requestFullscreen();\n } else if (videoElement.webkitRequestFullscreen) {\n // Safari/Old Chrome\n videoElement.webkitRequestFullscreen();\n } else if (videoElement.mozRequestFullScreen) {\n // Firefox\n videoElement.mozRequestFullScreen();\n } else if (videoElement.msRequestFullscreen) {\n // IE/Edge\n videoElement.msRequestFullscreen();\n }\n },\n handleLogout() {\n const url = process.env.NODE_ENV === 'production' ? '/api/auth/logout' : '/api/api/auth/logout';\n fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n authType: 'admin'\n })\n }).finally(() => {\n this.$store.commit('setAdminLoggedIn', false);\n this.$router.push('/adminLogin');\n });\n },\n handleSelectPage() {\n if (this.selectPage) {\n this.paginatedTableData.forEach(file => file.selected = false);\n } else {\n this.paginatedTableData.forEach(file => file.selected = true);\n }\n },\n clearSelection() {\n this.tableData.forEach(file => file.selected = false);\n this.selectedFiles = [];\n },\n handleBatchAction(command) {\n if (command === 'copy') {\n this.handleBatchCopy();\n } else if (command === 'delete') {\n this.handleBatchDelete();\n } else if (command === 'download') {\n this.handleBatchDownload();\n } else if (command === 'move') {\n this.handleBatchMove();\n } else if (command === 'tagManagement') {\n this.handleBatchTagManagement();\n } else if (command === 'ban') {\n this.handleBatchBlock();\n } else if (command === 'white') {\n this.handleBatchWhite();\n }\n },\n handleMove(index, key) {\n // 打开自定义移动对话框\n this.moveFileKey = key;\n this.moveFileIndex = index;\n this.isBatchMove = false;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n handleBatchMove() {\n // 打开自定义移动对话框(批量模式)\n this.isBatchMove = true;\n this.moveTargetPath = '/';\n this.showMoveDialog = true;\n },\n // 确认移动操作\n confirmMove(targetPath) {\n const value = targetPath;\n // 使用共享验证器验证路径\n const validation = validateFolderPath(value);\n if (!validation.valid) {\n this.$message.error(validation.error);\n return;\n }\n // 去掉开头的 /,结尾若没有 /,则加上\n const newPath = value.replace(/^\\/+/, '') + (value.endsWith('/') ? '' : value === '' ? '' : '/');\n // 判断目标文件夹是否是当前文件夹\n if (newPath === this.currentPath) {\n this.$message.warning(this.$t('dashboard.moveTargetSameAsCurrent'));\n return;\n }\n\n // 关闭对话框\n this.showMoveDialog = false;\n if (this.isBatchMove) {\n // 批量移动\n this.executeBatchMove(newPath);\n } else {\n // 单个文件移动\n this.executeSingleMove(newPath);\n }\n },\n // 执行单个文件移动\n executeSingleMove(newPath) {\n const key = this.moveFileKey;\n const isFolder = this.tableData.find(file => file.name === key)?.isFolder;\n fetchWithAuth(`/api/manage/move/${key}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + key.split('/').pop();\n fileManager.moveFile(key, newKey, isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n }\n this.updateStats(-1, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n } else {\n return Promise.reject('Request failed');\n }\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n // 执行批量移动\n executeBatchMove(newPath) {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/move/${file.name}?folder=${isFolder}&dist=${encodeURIComponent(newPath)}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const file = this.selectedFiles[index];\n file.selected = false;\n const fileIndex = this.tableData.findIndex(f => f.name === file.name);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + file.name.split('/').pop();\n fileManager.moveFile(file.name, newKey, file.isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n }\n }\n });\n // 强制重新渲染内容\n this.$nextTick(() => {\n const tempData = [...this.tableData];\n this.tableData = [];\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n this.updateStats(-successNum, false);\n this.$message.success(this.$t('dashboard.moveSuccess'));\n }).then(() => {\n this.refreshLocalFileList();\n }).catch(() => this.$message.error(this.$t('dashboard.moveFailed')));\n },\n handleBatchBlock() {\n this.$confirm(this.$t('dashboard.batchBlockConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/block/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchBlockSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchBlockFailed')));\n }).catch(() => console.log('Batch block cancelled'));\n },\n handleBatchWhite() {\n this.$confirm(this.$t('dashboard.batchWhiteConfirm'), this.$t('dashboard.deleteConfirmTitle'), {\n confirmButtonText: this.$t('dashboard.deleteConfirmOk'),\n cancelButtonText: this.$t('dashboard.deleteConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/white/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n }\n });\n this.$message.success(this.$t('dashboard.batchWhiteSuccess'));\n }).catch(() => this.$message.error(this.$t('dashboard.batchWhiteFailed')));\n }).catch(() => console.log('Batch white cancelled'));\n },\n handleBatchDownload() {\n // 将选中文件打包成 zip 文件下载\n const zip = new JSZip();\n const folder = zip.folder('files');\n // 构造Promise数组,等待所有文件下载完成后再打包\n const fileNameCount = {}; // 用于跟踪文件名出现的次数\n\n const downloadPromises = this.selectedFiles.map(async file => {\n // 跳过文件夹\n if (file.isFolder) {\n return;\n }\n const response = await fetch(this.getFileLink(file.name));\n const blob = await response.blob();\n // 检查文件名是否已经存在\n let fileName = file.metadata?.FileName || file.name;\n if (fileNameCount[fileName]) {\n // 如果已经存在,则在文件名后加上编号\n const extension = fileName.substring(fileName.lastIndexOf('.'));\n const baseName = fileName.substring(0, fileName.lastIndexOf('.'));\n fileName = `${baseName}(${fileNameCount[fileName]})${extension}`;\n fileNameCount[file.name]++;\n } else {\n // 如果不存在,则初始化为1\n fileNameCount[fileName] = 1;\n }\n // 将文件添加到 zip 文件夹中\n folder.file(fileName, blob);\n });\n Promise.all(downloadPromises).then(() => zip.generateAsync({\n type: 'blob'\n })).then(blob => {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = 'files.zip';\n link.click();\n });\n },\n isVideo(file) {\n // 排除音频文件\n if (this.isAudio(file)) return false;\n let flag = file.metadata?.FileType?.includes('video');\n // 用文件名后缀判断是否为视频文件\n if (!flag) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'rmvb', '3gp', 'mpg', 'mpeg', 'm4v', 'f4v', 'rm', 'asf', 'dat', 'ts', 'vob', 'swf', 'divx', 'xvid', 'm2ts', 'mts', 'm2v', '3g2', '3gp2', '3gpp', '3gpp2', 'mpe', 'm1v', 'mpv', 'mpv2', 'mp2v', 'm2t', 'm2ts', 'm2v', 'm4v'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = videoExtensions.includes(extension);\n }\n return flag;\n },\n isAudio(file) {\n let flag = file.metadata?.FileType?.includes('audio');\n // 用文件名后缀判断是否为音频文件\n if (!flag) {\n const audioExtensions = ['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma', 'm4a', 'ape', 'aiff', 'alac', 'opus', 'mid', 'midi', 'm4b', 'm4p', 'm4r', 'amr', 'au', 'ra', 'ram'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = audioExtensions.includes(extension);\n }\n return flag;\n },\n isImage(file) {\n let flag = file.metadata?.FileType?.includes('image');\n // 用文件名后缀判断是否为图片文件\n if (!flag) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'psd', 'ai', 'eps', 'raw', 'cr2', 'nef', 'orf', 'sr2', 'dng', 'arw', 'rw2', 'raf', 'pef', 'x3f', 'srf', 'erf', 'mrw', 'nrw', 'kdc', 'dcr', 'mef', 'mos', 'crw', 'raf', 'rwl', 'srw', '3fr', 'fff', 'iiq', 'qtk', 'bay', 'k25', 'kdc', 'dcs', 'drf', 'dng', 'erf', 'kdc', 'mdc', 'mef', 'mos', 'mrw', 'nef', 'nrw', 'orf', 'pef', 'ptx', 'pxn', 'r3d', 'raf', 'raw', 'rwl', 'rw2', 'rwz', 'sr2', 'srf', 'x3f'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = imageExtensions.includes(extension);\n }\n return flag;\n },\n getFileLink(filename) {\n const fileLink = process.env.NODE_ENV === 'production' ? `/file/${filename}?from=admin` : `/api/file/${filename}?from=admin`;\n return fileLink;\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (this.currentPage === Math.ceil(this.tableData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n // 跳转到指定页码\n handleJumpPage() {\n const page = parseInt(this.jumpPage);\n if (isNaN(page) || page < 1) {\n this.$message.warning(this.$t('dashboard.invalidPageNumber'));\n return;\n }\n if (page > this.realTotalPages) {\n this.$message.warning(this.$t('dashboard.pageExceedsMax', {\n max: this.realTotalPages\n }));\n return;\n }\n // 如果目标页超过当前已加载的页数,需要先加载更多数据\n if (page > this.totalPages) {\n this.$message.info(this.$t('dashboard.loadingData'));\n this.loadMoreDataUntilPage(page);\n } else {\n this.currentPage = page;\n }\n this.jumpPage = '';\n },\n // 加载数据直到指定页\n async loadMoreDataUntilPage(targetPage) {\n this.loading = true;\n try {\n // 计算目标页需要的文件数量(不包含文件夹)\n // 目标页最后一个项目的索引 = targetPage * pageSize\n // 需要的文件数 = 目标索引 - 已有文件夹数量\n const targetIndex = targetPage * this.pageSize;\n const currentFolderCount = this.filteredTableData.filter(item => item.isFolder).length;\n const currentFileCount = this.filteredTableData.filter(item => !item.isFolder).length;\n\n // 需要加载的文件数量 = 目标位置需要的文件数 - 当前已加载的文件数\n const neededFileCount = Math.max(0, targetIndex - currentFolderCount - currentFileCount);\n if (neededFileCount > 0) {\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, neededFileCount, this.filters);\n await this.fetchFileList();\n }\n this.currentPage = Math.min(targetPage, this.totalPages);\n } catch (error) {\n this.$message.error(this.$t('dashboard.loadDataFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 判断是否为文件夹\n isFolder(item) {\n // 如果是已经标记为文件夹的项目,直接返回true\n if (item.isFolder) {\n return true;\n }\n\n // 获取真实的文件路径(去除URL前缀)\n let path = item.name;\n if (path.startsWith('http')) {\n path = path.split('/file/')[1];\n }\n\n // 如果文件名包含'/',需要判断是否是当前路径下的文件\n if (path && path.includes('/')) {\n // 获取相对于当前路径的部分\n const relativePath = this.currentPath ? path.substring(this.currentPath.length) : path;\n\n // 如果在根目录,第一个斜杠前的部分就是文件夹\n if (this.currentPath === '') {\n return !path.split('/')[0].includes('.');\n }\n\n // 如果在子文件夹中,检查相对路径是否还包含其他文件夹\n return relativePath.includes('/');\n }\n return false;\n },\n // 获取文件夹名称\n getFolderName(path) {\n let folderName = '';\n // 如果是文件夹路径,只返回最后一级文件夹名\n if (path && path.includes('/')) {\n const parts = path.split('/');\n // 如果是根目录下的文件夹\n if (this.currentPath === '') {\n folderName = parts[0];\n } else {\n // 如果是子文件夹\n const relativePath = path.substring(this.currentPath.length);\n folderName = relativePath.split('/')[0];\n }\n } else {\n folderName = path;\n }\n const maxLength = 20; // Adjust max length as needed\n if (folderName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${folderName.substring(0, startLength)}...${folderName.substring(folderName.length - endLength)}`;\n }\n return folderName;\n },\n // 获取文件名称(去除路径和URL前缀)\n getFileName(path) {\n let fileName = path.split('/').pop();\n const maxLength = 20; // Adjust max length as needed, ensure it fits in one line\n if (fileName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${fileName.substring(0, startLength)}...${fileName.substring(fileName.length - endLength)}`;\n }\n return fileName;\n },\n // 获取文件名前半部分(用于中间省略效果)\n getFileNameStart(name) {\n if (!name) return '';\n // 如果文件名较短,返回全部\n if (name.length <= 30) return name;\n // 保留开头部分(约60%的长度用于显示前半部分)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回文件名主体部分\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(baseName.length, Math.floor(name.length * 0.6));\n return baseName.substring(0, keepLength);\n }\n // 无扩展名的情况\n return name.substring(0, Math.floor(name.length * 0.6));\n },\n // 获取文件名后半部分(用于中间省略效果)\n getFileNameEnd(name) {\n if (!name) return '';\n // 如果文件名较短,返回空\n if (name.length <= 30) return '';\n // 保留末尾部分(包含扩展名)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回最后几个字符 + 扩展名\n const ext = name.substring(dotIndex);\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(8, Math.floor(baseName.length * 0.2));\n return '…' + baseName.substring(baseName.length - keepLength) + ext;\n }\n // 无扩展名的情况\n const keepLength = Math.min(10, Math.floor(name.length * 0.3));\n return '…' + name.substring(name.length - keepLength);\n },\n // 进入文件夹\n enterFolder(folderPath) {\n // 确保路径末尾有 '/'\n this.currentPath = folderPath + (folderPath.endsWith('/') ? '' : '/');\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 导航到指定文件夹\n navigateToFolder(path) {\n // 确保空路径时不添加 '/'\n this.currentPath = path ? path + (path.endsWith('/') ? '' : '/') : '';\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 获取文件列表\n async fetchFileList() {\n this.loading = true;\n try {\n // 从本地存储获取数据\n const data = fileManager.getLocalFileList();\n\n // 解析返回的数据\n const folders = new Set(data.directories || []);\n const files = data.files || [];\n\n // 处理文件夹数据\n const folderItems = Array.from(folders).map(folder => ({\n name: folder,\n isFolder: true,\n selected: false,\n metadata: {\n FileName: folder.split('/').pop()\n }\n }));\n\n // 处理文件数据\n const fileItems = files.map(file => ({\n name: file.name,\n isFolder: false,\n selected: false,\n metadata: file.metadata\n }));\n\n // 更新表格数据\n this.tableData = [...folderItems, ...fileItems];\n\n // 更新统计信息\n this.updateStats(data.totalCount, true);\n\n // 更新直接文件和文件夹数量\n this.directFileCount = data.directFileCount || 0;\n this.directFolderCount = data.directFolderCount || 0;\n } catch (error) {\n console.error('Error fetching file list:', error);\n this.$message.error(this.$t('dashboard.fetchFileListFailed'));\n } finally {\n this.loading = false;\n }\n },\n // 刷新文件列表\n async refreshFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n const success = await fileManager.refreshFileList(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, this.filters);\n if (success) {\n await this.fetchFileList();\n } else {\n throw new Error('Refresh failed');\n }\n } catch (error) {\n // 认证失败由 fetchWithAuth 统一处理跳转,不重复提示\n if (!error.message?.includes('Unauthorized') && this.$store.state.adminLoggedIn) {\n console.error('Error refreshing file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n }\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // 刷新本地文件列表\n async refreshLocalFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n await this.fetchFileList();\n } catch (error) {\n console.error('Error refreshing local file list:', error);\n this.$message.error(this.$t('dashboard.refreshFailed'));\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // Tag management methods\n handleTagManagement(fileId) {\n this.currentTagFile = fileId;\n this.showTagDialog = true;\n },\n handleBatchTagManagement() {\n if (this.selectedFiles.length === 0) {\n this.$message.warning(this.$t('dashboard.selectFilesFirst'));\n return;\n }\n this.showBatchTagDialog = true;\n },\n async handleTagsUpdated(tags) {\n // 更新本地文件数据中的标签\n const fileIndex = this.tableData.findIndex(file => file.name === this.currentTagFile);\n if (fileIndex !== -1) {\n // 更新 tableData 中的标签\n if (!this.tableData[fileIndex].metadata) {\n this.tableData[fileIndex].metadata = {};\n }\n this.tableData[fileIndex].metadata.Tags = tags;\n\n // 如果详情对话框正在显示这个文件,也更新详情数据\n if (this.showdetailDialog && this.detailFile?.name === this.currentTagFile) {\n if (!this.detailFile.metadata) {\n this.detailFile.metadata = {};\n }\n this.detailFile.metadata.Tags = tags;\n }\n }\n },\n async handleBatchTagsUpdated() {\n // 刷新文件列表以显示更新后的标签\n await this.refreshLocalFileList();\n },\n handleMetadataUpdated(fileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === fileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 如果 detailFile 正在显示该文件,同步更新 detailFile\n if (this.detailFile && this.detailFile.name === fileId) {\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n }\n },\n handleFileRenamed(oldFileId, newFileId, updatedMetadata) {\n // 更新 tableData 中对应文件的 name(File_ID)和 metadata\n const fileIndex = this.tableData.findIndex(f => f.name === oldFileId);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].name = newFileId;\n this.tableData[fileIndex].metadata = {\n ...this.tableData[fileIndex].metadata,\n ...updatedMetadata\n };\n }\n // 更新 detailFile 引用并关闭/重新打开详情弹窗以刷新链接\n if (this.detailFile && this.detailFile.name === oldFileId) {\n this.detailFile.name = newFileId;\n this.detailFile.metadata = {\n ...this.detailFile.metadata,\n ...updatedMetadata\n };\n // 关闭详情弹窗,然后在下一个 tick 重新打开以刷新所有链接\n this.showdetailDialog = false;\n this.$nextTick(() => {\n this.showdetailDialog = true;\n });\n }\n },\n // 生成单个文件链接\n generateFileLink(key, metadata) {\n const isExternal = metadata?.Channel === 'External';\n const baseUrl = isExternal ? metadata?.ExternalLink : `${this.rootUrl}${key}`;\n const fileName = metadata?.FileName || key;\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n return baseUrl;\n case 'mdUrl':\n return `![${fileName}](${baseUrl})`;\n case 'htmlUrl':\n return `\"${fileName}\"`;\n case 'bbUrl':\n return `[img]${baseUrl}[/img]`;\n case 'tgId':\n return metadata?.TgFileId || '';\n case 's3Location':\n return metadata?.S3Location || '';\n default:\n return baseUrl;\n }\n },\n // 复制文件夹中所有文件的链接\n async handleFolderCopy(folderName) {\n // 显示加载状态\n const loading = this.$loading({\n lock: true,\n text: this.$t('dashboard.fetchingFileList')\n });\n try {\n // 调用 list API 递归获取文件夹内所有文件\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folderName)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n loading.close();\n if (!data.files || data.files.length === 0) {\n this.$message.warning(this.$t('dashboard.folderEmptyNoLinks'));\n return;\n }\n\n // 根据当前链接格式生成所有文件链接\n const links = data.files.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link);\n if (links.length === 0) {\n this.$message.warning(this.$t('dashboard.noLinksAvailable'));\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n } else {\n this.copyToClipboardFallback(text);\n this.$message.success(this.$t('dashboard.copiedFileLinks', {\n count: links.length\n }));\n }\n } catch (error) {\n loading.close();\n console.error('Copy folder links failed:', error);\n this.$message.error(this.$t('dashboard.copyFolderLinksFailed'));\n }\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('adminBkImg', '.container', false, true);\n this.loading = true;\n // 路由守卫已通过 /api/auth/sessionCheck 验证认证状态\n this.showLogoutButton = this.$store.state.adminLoggedIn;\n // 首次加载时刷新文件列表\n this.refreshFileList().then(() => {\n // 获取所有渠道名称\n return this.extractChannelNames();\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error(this.$t('dashboard.syncDataError'));\n }\n }).finally(() => {\n this.loading = false;\n });\n\n // 读取自定义链接设置项\n this.customUrlPrefix = this.adminUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.adminUrlSettings.useCustomUrl;\n\n // 恢复视图模式偏好\n const savedViewMode = localStorage.getItem('viewMode');\n if (savedViewMode === 'card' || savedViewMode === 'list') {\n this.viewMode = savedViewMode;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminDashBoard.vue?vue&type=template&id=437b7a30&scoped=true\"\nimport script from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\nexport * from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\n\nimport \"./AdminDashBoard.vue?vue&type=style&index=0&id=437b7a30&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-437b7a30\"]])\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__","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","key","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","render","_ctx","_cache","$props","$setup","$data","$options","_component_el_input","_component_font_awesome_icon","_component_el_button","_component_DirectoryTreePicker","_component_el_dialog","_component_el_tree","_component_el_drawer","_directive_loading","isDesktop","modelValue","dialogVisible","$event","title","isBatchMove","$t","width","onClose","handleClose","footer","onClick","default","_","type","loading","handleConfirm","targetPath","placeholder","prepend","currentDirectory","source","onSelect","handleDirectorySelect","trigger","icon","direction","size","showTreePicker","text","treeError","fetchDirectoryTree","ref","data","treeData","props","treeProps","onNodeClick","handleTreeNodeClick","node","path","expanded","name","treeLoading","components","DirectoryTreePicker","Boolean","String","initialPath","emits","windowWidth","window","innerWidth","children","label","computed","get","this","set","val","$emit","watch","newVal","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","methods","response","fetchWithAuth","method","ok","status","json","tree","err","console","error","startsWith","__exports__","to","args","close","active","currentPath","navigate","pathParts","folder","index","length","style","paddingLeft","slice","join","goBack","split","filter","isFolder","handleAction","action","_component_el_tag","_component_el_tab_pane","_component_el_alert","_component_el_tabs","visible","dialogWidth","activeTab","count","fileCount","inputTag","onKeyup","handleAddInputTag","onInput","handleInputChange","clearable","append","showSuggestions","suggestions","tag","selectSuggestion","tagsToAdd","closable","removeFromToAdd","executeAddTags","disabled","commonTags","handleRemoveCommonTag","description","center","handleClearAllTags","selectedFiles","Array","required","debounceTimer","selectedFilesOnly","file","fileIds","map","loadCommonTags","resetData","newTab","tagPromises","encodeURIComponent","responses","Promise","all","allTags","push","tags","every","includes","clearTimeout","trim","setTimeout","fetchSuggestions","prefix","toLowerCase","warning","indexOf","splice","headers","body","JSON","stringify","Error","success","updated","confirm","confirmButtonText","cancelButtonText","then","executeClearTags","catch","info","_component_Loading","_component_el_icon","handleAddTag","currentTags","handleRemoveTag","popularTags","handleAddPopularTag","loadingPopularTags","Loading","fileId","loadFileTags","loadPopularTags","message","_component_el_image","_component_el_descriptions_item","_component_el_descriptions","_component_el_form_item","_component_el_form","isEditing","round","startEdit","openRenameDialog","saveMetadata","editSaving","cancelEdit","onTabClick","handleTabClick","urls","originUrl","readonly","handleUrlClick","mdUrl","htmlUrl","bbUrl","metadata","TgFileId","tgId","S3Location","S3CdnFileUrl","isVideo","src","fileLink","autoplay","muted","loop","openImageLink","isAudio","controls","isImage","fit","lazy","border","column","descColumn","editForm","FileName","FileType","fileSizeDisplay","imageDimensions","Width","Height","orientationIcon","uploadTime","Channel","ChannelName","accessTagType","accessType","Label","UploadIP","UploadAddress","Tags","showRenameDialog","closeRenameDialog","submitRename","renameSaving","renameValidation","valid","onSubmit","renameForm","newFileId","validateRenameInput","INVALID_CHARS","validateFileId","currentFileId","test","Object","fileType","endsWith","TimeStamp","Date","toLocaleString","listType","ListType","height","ratio","sizeBytes","FileSizeBytes","sizeMB","FileSize","toFixed","handleVideoClick","e","video","target","paused","play","pause","input","select","navigator","clipboard","writeText","value","open","result","oldFileId","_component_el_tooltip","selectedCount","disableTooltip","content","placement","handleClear","actions","command","className","Number","onTouchstart","onTouchend","onTouchmove","localSelected","toggleSelect","handlePreviewClick","preload","decoding","displayName","fileNameStart","fileNameEnd","item","tagIndex","background","getTagColor","channelTag","uploadDate","selected","tagColors","parts","getFileName","uploaded","toLocaleDateString","_component_el_checkbox","_component_el_card","onChange","videoLoading","videoError","onMouseenter","handleVideoHover","onMouseleave","onFullscreenchange","handleFullscreenChange","onWebkitfullscreenchange","onLoadeddata","onError","handleVideoError","previewSrcList","fileName","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","isFullscreen","document","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","currentTime","isEnter","folderName","showActions","i","validator","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_component_el_badge","_component_el_checkbox_group","_component_el_dropdown_menu","_component_el_dropdown","dropdown","localFilters","accessStatus","handleFilterChange","accessStatusOptions","option","listTypeOptions","labelOptions","fileTypeOptions","channel","channelOptions","channelNameOptions","channelName","groupedChannelNames","group","typeLabel","channels","clearFilters","activeFilterCount","hidden","filters","values","reduce","arr","groups","forEach","handler","newFilters","isArray","immediate","deep","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_component_DashboardTabs","_component_FilterDropdown","_component_el_dropdown_item","_component_el_header","_component_el_breadcrumb_item","_component_el_breadcrumb","_component_SkeletonLoader","_component_FolderCard","_component_FileCard","_component_FileListItem","_component_el_pagination","_component_el_main","_component_el_container","_component_BatchActionBar","_component_FileDetailDialog","_component_el_radio","_component_el_radio_group","_component_el_switch","_component_TagManagementDialog","_component_BatchTagDialog","_component_MobileActionSheet","_component_MobileDirectoryDrawer","_component_MoveFileDialog","tempSearch","handleSearch","suffix","onCommand","sort","sortIcon","showUrlDialog","viewMode","toggleViewMode","handleLogout","handleSelectPage","selectPageIcon","showMobileDirectoryDrawer","pop","separator","navigateToFolder","isDragging","paginatedTableData","hasSearchOrFilter","isSearchMode","onEnter","enterFolder","onCopy","handleFolderCopy","onMove","handleMove","onDelete","handleDelete","handleFolderTouchStart","handleTouchEnd","getFileLink","onDetail","openDetailDialog","handleCopy","onDownload","handleDownload","handleTouchStart","isSelectAll","isIndeterminate","handleSelectAllPage","onFolderCopy","position","left","selectionRect","top","layout","total","filteredTableData","pageSize","currentPage","pagerCount","onCurrentChange","handlePageChange","refreshFileList","refreshLoading","Math","ceil","loadMoreData","realTotalPages","jumpPage","handleJumpPage","onAction","handleBatchAction","onClear","clearSelection","showdetailDialog","detailFile","allUrl","onTagManagement","handleTagManagement","onBlock","handleBlock","onWhite","handleWhite","handleDetailDelete","onMetadataUpdated","handleMetadataUpdated","onFileRenamed","handleFileRenamed","defaultUrlFormat","useCustomUrl","customUrlPrefix","showTagDialog","currentTagFile","onTagsUpdated","handleTagsUpdated","showBatchTagDialog","handleBatchTagsUpdated","showMobileActionModal","mobileActionIsFolder","getFolderName","mobileActionFile","handleMobileAction","onNavigate","onGoBack","handleGoBack","showMoveDialog","moveTargetPath","onConfirm","confirmMove","FileManager","constructor","FILE_LIST_PATH","fileListCache","storageWarningShown","getLocalFileList","fileList","getMutableFileList","files","directories","localStorage","getItem","parse","createEmptyFileList","updateFileListCache","persisted","persistFileListCache","cacheUpdated","setItem","handleStoragePersistError","warn","removeItem","removeError","ElMessage","i18n","global","t","addFile","newFile","addFolder","moveFile","oldPath","newPath","oldFolderIndex","fileIndex","findIndex","pathArray","substring","newFolder","removeFile","removeFolder","dir","getFilesInFolder","subdirectories","buildFilterParams","params","search","includeTags","excludeTags","url","newFileList","isIndexedResponse","loadMoreFiles","start","moreFiles","fileManager","rectIntersects","rectA","rectB","right","bottom","calcSelectionRect","current","min","x","y","abs","useDragSelect","options","modes","mainSelector","items","startPoint","preSelectSnapshot","isAppendMode","MOBILE_BREAKPOINT","listenerAttached","EDGE_THRESHOLD","SCROLL_SPEED","autoScrollTimer","savedUserSelect","getActiveConfig","mode","toValue","undefined","shouldEnable","syncListenerState","attachContainerListener","cancelDrag","detachContainerListener","isBlankArea","event","mainArea","closest","config","itemEl","itemSelector","container","containerRef","contains","interactive","hasAppendModifier","shiftKey","ctrlKey","metaKey","saveSnapshot","currentItems","lastClientY","startAutoScroll","scrollStep","viewportHeight","innerHeight","scrollDelta","scrollBy","updateSelection","requestAnimationFrame","stopAutoScroll","cancelAnimationFrame","disableTextSelection","userSelect","restoreTextSelection","rect","selRect","itemElements","querySelectorAll","itemRect","getBoundingClientRect","itemBounds","intersects","onMouseDown","button","clientX","clientY","onMouseMove","onMouseUp","currentPoint","_event","onWindowResize","onMounted","onBeforeUnmount","mixins","backgroundManager","directFileCount","directFolderCount","showLogoutButton","tableData","searchKeywords","searchIncludeTags","searchExcludeTags","sortOption","isUploading","activeUrlTab","mobileActionIndex","longPressTimer","moveFileKey","moveFileIndex","DashboardTabs","TagManagementDialog","BatchTagDialog","SkeletonLoader","FileCard","FolderCard","FileListItem","FileDetailDialog","BatchActionBar","MobileActionSheet","MobileDirectoryDrawer","FilterDropdown","MoveFileDialog","LanguageSwitcher","setup","cardContainerRef","listContainerRef","viewModeRef","itemsRef","card","list","totalPages","sortedData","sortData","end","fullList","concat","detailDialogWidth","ExternalLink","rootUrl","tableColumnNum","tablePreviewSpan","selectPage","selectedPageFiles","some","userConfig","urlPrefix","location","origin","newData","newOption","newFormat","$store","commit","parentPath","colors","formatFileSize","bytes","isNaN","units","searchText","excludeTagRegex","replace","match","includeTagRegex","log","extractChannelNames","typeLabels","telegram","cfr2","s3","discord","huggingface","webdav","entries","channelList","a","b","localeCompare","link","createElement","href","download","click","tab","$message","$confirm","reject","updateStats","find","handleBatchDelete","promises","results","successNum","handleBatchCopy","folders","$loading","lock","allFiles","links","generateFileLink","copyToClipboardFallback","textarea","appendChild","clip","execCommand","removeChild","fetchFileList","num","init","videoElement","fetch","credentials","authType","finally","$router","handleBatchDownload","handleBatchMove","handleBatchTagManagement","handleBatchBlock","handleBatchWhite","validation","executeBatchMove","executeSingleMove","newKey","$nextTick","tempData","refreshLocalFileList","f","resolve","zip","fileNameCount","downloadPromises","async","blob","extension","lastIndexOf","baseName","generateAsync","URL","createObjectURL","flag","videoExtensions","audioExtensions","imageExtensions","filename","page","parseInt","max","loadMoreDataUntilPage","targetPage","targetIndex","currentFolderCount","currentFileCount","neededFileCount","relativePath","maxLength","startLength","floor","endLength","getFileNameStart","dotIndex","keepLength","getFileNameEnd","ext","folderPath","Set","folderItems","from","fileItems","totalCount","state","adminLoggedIn","updatedMetadata","isExternal","baseUrl","initializeBackground","adminUrlSettings","savedViewMode","_component_el_popover","popoverVisible","transition","reference","$slots","handleNodeClick","openDrawer","drawerVisible","$refs","treeRef","store","nodesMap","treeRefMobile","setCurrentKey","axios","withAuthCode","module","exports","s","o","h","u","r","l","n","code","call","d","c","p","encode","getTypeOf","charCodeAt","charAt","decode","substr","uint8array","Uint8Array","compressedSize","uncompressedSize","crc32","compression","compressedContent","prototype","getContentWorker","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","level","onData","pako","A","fromCharCode","O","utf8encode","I","m","g","v","w","k","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","B","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","shift","CENTRAL_DIRECTORY_END","prepareNextSource","previous","isPaused","resume","registerPrevious","generatedError","generateWorker","platform","_compressWorker","arguments","create","root","clone","loadAsync","support","defaults","version","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","load","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","allocBuffer","alloc","fill","isBuffer","toUpperCase","toString","remove","generate","generateInternalStream","mimeType","checkSupport","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","hasOwnProperty","nodestream","_internalType","_outputType","_mimeType","newBlob","apply","_worker","objectMode","array","string","arraybuffer","ArrayBuffer","nodebuffer","Blob","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","buffer","byteLength","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","FileReader","onload","onerror","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","id","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","nodeStream","MutationObserver","WebKitMutationObserver","createTextNode","observe","characterData","MessageChannel","onreadystatechange","parentNode","documentElement","port1","onmessage","port2","postMessage","TypeError","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","race","assign","chunkSize","windowBits","memLevel","strategy","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","L","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","j","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","sane","last","havedict","flags","check","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","q","J","getPrototypeOf","process","nextTick","importScripts","random","attachEvent","Function","callback","clearImmediate","validateFolderPath","strict","dotPattern","invalidChars"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/997.7b6c8b5a.js.map.gz b/frontend-dist/js/997.7b6c8b5a.js.map.gz new file mode 100644 index 00000000..de9494e5 Binary files /dev/null and b/frontend-dist/js/997.7b6c8b5a.js.map.gz differ diff --git a/frontend-dist/js/app.5832846c.js b/frontend-dist/js/app.4c47588b.js similarity index 98% rename from frontend-dist/js/app.5832846c.js rename to frontend-dist/js/app.4c47588b.js index 06f83aa9..78b4fb88 100644 --- a/frontend-dist/js/app.5832846c.js +++ b/frontend-dist/js/app.4c47588b.js @@ -1,2 +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(740),t.e(600),t.e(428),t.e(528)]).then(t.bind(t,74828)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(600),t.e(604)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(740),t.e(309),t.e(428),t.e(770)]).then(t.bind(t,15423)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(740),t.e(309),t.e(833),t.e(396)]).then(t.bind(t,59396)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(740),t.e(309),t.e(833),t.e(529)]).then(t.bind(t,31529)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(600),t.e(728)]).then(t.bind(t,16556))},{path:"/blockimg",name:"blockimg",component:()=>t.e(917).then(t.bind(t,74917))},{path:"/whiteliston",name:"whiteliston",component:()=>t.e(51).then(t.bind(t,31051))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>t.e(718).then(t.bind(t,49718))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>t.e(226).then(t.bind(t,68226))}],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,credentials:e=>e.adminLoggedIn?"__session__":null,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},setCredentials(e,a){e.adminLoggedIn=null!==a&&void 0!==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":"文件上传","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.开启后,仅被加入白名单的文件可被访问","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":"设置已保存","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","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","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","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),R=t(12375),x=t(97619),B=t(84310),E=t(14552),O=t(79919),W=t(10767),q=t(20491),V=t(18422),j=t(17214),H=t(44845),z=t(55319),K=t(71669),Q=t(38557),J=t(15925),_=t(10798),G=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),Re=t(87849),xe=t(78034),Be=t(59413),Ee=t(58869),Oe=t(79102),We=t(78337),qe=t(38870),Ve=t(70577),je=t(93212),He=t(40275),ze=t(52995),Ke=t(38410),Qe=t(167),Je=t(53223),_e=t(97447),Ge=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,R.Xb,x.dB,B.Ub,E.q9,O.rM,W.jP,q.he,c._2,V.cb,j.MT,H.vH,z.v,K.bx,Q.tU,J.zp,_.A,G.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,Re.H9,xe.Yp,Be.z1,Ee.Nf,Oe.oM,We.VN,qe.Ot,Ve.xi,je._2,He.DX,ze.l9,Ke.GR,Qe.ns,Je.Be,_e.Jm,Ge.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+"."+{51:"6e7bf298",226:"ec43855c",309:"b7dca603",396:"226339af",528:"f7e99a9f",529:"e05f38bd",600:"08192622",604:"a1f7358f",718:"27080555",728:"3968461e",770:"865557c0",917:"b77a6783"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{51:"1dd65d6c",226:"6548e7b4",396:"3a3d9729",428:"8044ed41",528:"4c6718b2",529:"6c0a8231",604:"1353235b",718:"d0974d1c",728:"1353235b",740:"a94dbb46",770:"37d2e9e0",833:"95983fa6",917:"8529ad1e"}[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;c{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(385),t.e(600),t.e(451),t.e(528)]).then(t.bind(t,74828)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(600),t.e(604)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(385),t.e(142),t.e(451),t.e(997)]).then(t.bind(t,20174)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(385),t.e(142),t.e(915),t.e(396)]).then(t.bind(t,59396)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(385),t.e(142),t.e(915),t.e(529)]).then(t.bind(t,31529)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(600),t.e(728)]).then(t.bind(t,16556))},{path:"/blockimg",name:"blockimg",component:()=>t.e(917).then(t.bind(t,74917))},{path:"/whiteliston",name:"whiteliston",component:()=>t.e(51).then(t.bind(t,31051))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>t.e(718).then(t.bind(t,49718))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>t.e(226).then(t.bind(t,68226))}],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,credentials:e=>e.adminLoggedIn?"__session__":null,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},setCredentials(e,a){e.adminLoggedIn=null!==a&&void 0!==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":"文件上传","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.开启后,仅被加入白名单的文件可被访问","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":"设置已保存","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","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","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","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),R=t(12375),x=t(97619),B=t(84310),E=t(14552),O=t(79919),W=t(10767),q=t(20491),V=t(18422),j=t(17214),H=t(44845),z=t(55319),K=t(71669),Q=t(38557),J=t(15925),_=t(10798),G=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),Re=t(87849),xe=t(78034),Be=t(59413),Ee=t(58869),Oe=t(79102),We=t(78337),qe=t(38870),Ve=t(70577),je=t(93212),He=t(40275),ze=t(52995),Ke=t(38410),Qe=t(167),Je=t(53223),_e=t(97447),Ge=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,R.Xb,x.dB,B.Ub,E.q9,O.rM,W.jP,q.he,c._2,V.cb,j.MT,H.vH,z.v,K.bx,Q.tU,J.zp,_.A,G.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,Re.H9,xe.Yp,Be.z1,Ee.Nf,Oe.oM,We.VN,qe.Ot,Ve.xi,je._2,He.DX,ze.l9,Ke.GR,Qe.ns,Je.Be,_e.Jm,Ge.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+"."+{51:"6e7bf298",142:"fc366b6d",226:"ec43855c",396:"b3b6ae37",528:"f7e99a9f",529:"287c329f",600:"08192622",604:"a1f7358f",718:"27080555",728:"3968461e",917:"b77a6783",997:"7b6c8b5a"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{51:"1dd65d6c",226:"6548e7b4",385:"20c34d33",396:"3a3d9729",451:"7e03bef9",528:"4c6718b2",529:"6c0a8231",604:"1353235b",718:"d0974d1c",728:"1353235b",915:"52b943c1",917:"8529ad1e",997:"87fa4059"}[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;c {\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 // 保留 credentials getter 以兼容 fetchWithAuth.js 等现有代码\r\n credentials: state => state.adminLoggedIn ? '__session__' : null,\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 // 兼容旧代码:setCredentials 映射到 adminLoggedIn\r\n setCredentials(state, credentials) {\r\n state.adminLoggedIn = credentials !== null && credentials !== undefined;\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 + \".\" + {\"51\":\"6e7bf298\",\"226\":\"ec43855c\",\"309\":\"b7dca603\",\"396\":\"226339af\",\"528\":\"f7e99a9f\",\"529\":\"e05f38bd\",\"600\":\"08192622\",\"604\":\"a1f7358f\",\"718\":\"27080555\",\"728\":\"3968461e\",\"770\":\"865557c0\",\"917\":\"b77a6783\"}[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 + \".\" + {\"51\":\"1dd65d6c\",\"226\":\"6548e7b4\",\"396\":\"3a3d9729\",\"428\":\"8044ed41\",\"528\":\"4c6718b2\",\"529\":\"6c0a8231\",\"604\":\"1353235b\",\"718\":\"d0974d1c\",\"728\":\"1353235b\",\"740\":\"a94dbb46\",\"770\":\"37d2e9e0\",\"833\":\"95983fa6\",\"917\":\"8529ad1e\"}[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 = {\"51\":1,\"226\":1,\"396\":1,\"428\":1,\"528\":1,\"529\":1,\"604\":1,\"718\":1,\"728\":1,\"740\":1,\"770\":1,\"833\":1,\"917\":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(!/^(428|740|833)$/.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","credentials","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","mutations","setUserConfig","setBingWallPapers","setCredentials","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.4c47588b.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 // 保留 credentials getter 以兼容 fetchWithAuth.js 等现有代码\r\n credentials: state => state.adminLoggedIn ? '__session__' : null,\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 // 兼容旧代码:setCredentials 映射到 adminLoggedIn\r\n setCredentials(state, credentials) {\r\n state.adminLoggedIn = credentials !== null && credentials !== undefined;\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 + \".\" + {\"51\":\"6e7bf298\",\"142\":\"fc366b6d\",\"226\":\"ec43855c\",\"396\":\"b3b6ae37\",\"528\":\"f7e99a9f\",\"529\":\"287c329f\",\"600\":\"08192622\",\"604\":\"a1f7358f\",\"718\":\"27080555\",\"728\":\"3968461e\",\"917\":\"b77a6783\",\"997\":\"7b6c8b5a\"}[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 + \".\" + {\"51\":\"1dd65d6c\",\"226\":\"6548e7b4\",\"385\":\"20c34d33\",\"396\":\"3a3d9729\",\"451\":\"7e03bef9\",\"528\":\"4c6718b2\",\"529\":\"6c0a8231\",\"604\":\"1353235b\",\"718\":\"d0974d1c\",\"728\":\"1353235b\",\"915\":\"52b943c1\",\"917\":\"8529ad1e\",\"997\":\"87fa4059\"}[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 = {\"51\":1,\"226\":1,\"385\":1,\"396\":1,\"451\":1,\"528\":1,\"529\":1,\"604\":1,\"718\":1,\"728\":1,\"915\":1,\"917\":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(!/^(385|451|915)$/.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","credentials","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","mutations","setUserConfig","setBingWallPapers","setCredentials","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.4c47588b.js.map.gz b/frontend-dist/js/app.4c47588b.js.map.gz new file mode 100644 index 00000000..6ff544af Binary files /dev/null and b/frontend-dist/js/app.4c47588b.js.map.gz differ diff --git a/frontend-dist/js/app.5832846c.js.gz b/frontend-dist/js/app.5832846c.js.gz deleted file mode 100644 index 4f2be30a..00000000 Binary files a/frontend-dist/js/app.5832846c.js.gz and /dev/null differ diff --git a/frontend-dist/js/app.5832846c.js.map.gz b/frontend-dist/js/app.5832846c.js.map.gz deleted file mode 100644 index fc4a5563..00000000 Binary files a/frontend-dist/js/app.5832846c.js.map.gz and /dev/null differ