From cac0bec6f35e7870128cbce405e73750ed0668bc Mon Sep 17 00:00:00 2001 From: MarSeventh <1193267292@qq.com> Date: Mon, 29 Jun 2026 21:38:18 +0800 Subject: [PATCH] optimize: a lot of user experience optimizations for the upload page and dashboard page --- frontend-dist/css/198.4b4ec8d2.css | 1 - frontend-dist/css/198.4b4ec8d2.css.gz | Bin 13152 -> 0 bytes .../{226.05f9240b.css => 226.6548e7b4.css} | 0 ...26.05f9240b.css.gz => 226.6548e7b4.css.gz} | Bin 1723 -> 1723 bytes .../{518.7aeefd65.css => 382.ad3465bc.css} | 2 +- frontend-dist/css/382.ad3465bc.css.gz | Bin 0 -> 11987 bytes .../{396.88ae4a1f.css => 396.3a3d9729.css} | 0 ...96.88ae4a1f.css.gz => 396.3a3d9729.css.gz} | Bin 2233 -> 2233 bytes .../{428.09003661.css => 428.8044ed41.css} | 0 ...28.09003661.css.gz => 428.8044ed41.css.gz} | Bin 4026 -> 4026 bytes .../css/{51.9f054b72.css => 51.1dd65d6c.css} | 0 ...{51.9f054b72.css.gz => 51.1dd65d6c.css.gz} | Bin 1796 -> 1796 bytes frontend-dist/css/518.7aeefd65.css.gz | Bin 11396 -> 0 bytes .../{529.f6a90dd0.css => 529.6c0a8231.css} | 0 ...29.f6a90dd0.css.gz => 529.6c0a8231.css.gz} | Bin 11321 -> 11321 bytes frontend-dist/css/604.7a66e992.css | 1 + frontend-dist/css/604.7a66e992.css.gz | Bin 0 -> 2447 bytes frontend-dist/css/604.8321f2db.css | 1 - frontend-dist/css/604.8321f2db.css.gz | Bin 2447 -> 0 bytes .../{718.8a9bac1a.css => 718.d0974d1c.css} | 0 ...18.8a9bac1a.css.gz => 718.d0974d1c.css.gz} | Bin 8627 -> 8627 bytes frontend-dist/css/728.7a66e992.css | 1 + frontend-dist/css/728.7a66e992.css.gz | Bin 0 -> 2447 bytes frontend-dist/css/728.8321f2db.css | 1 - frontend-dist/css/728.8321f2db.css.gz | Bin 2447 -> 0 bytes frontend-dist/css/740.a94dbb46.css.gz | Bin 5880 -> 5880 bytes frontend-dist/css/776.cc79148e.css | 1 + frontend-dist/css/776.cc79148e.css.gz | Bin 0 -> 14125 bytes .../{833.3c02d330.css => 833.95983fa6.css} | 0 ...33.3c02d330.css.gz => 833.95983fa6.css.gz} | Bin 4320 -> 4320 bytes .../{917.939d7cec.css => 917.8529ad1e.css} | 0 ...17.939d7cec.css.gz => 917.8529ad1e.css.gz} | Bin 1836 -> 1836 bytes frontend-dist/css/app.191d79e8.css | 1 + frontend-dist/css/app.191d79e8.css.gz | Bin 0 -> 4991 bytes frontend-dist/css/app.b00690f7.css | 1 - frontend-dist/css/app.b00690f7.css.gz | Bin 4067 -> 0 bytes .../css/chunk-vendors.f9cd4701.css.gz | Bin 9747 -> 9747 bytes .../fonts/Pacifico-Regular.dc63ac94.woff2 | Bin 0 -> 51632 bytes frontend-dist/fonts/Righteous.207a66c3.woff2 | Bin 12608 -> 0 bytes frontend-dist/index.html | 2 +- frontend-dist/index.html.gz | Bin 521 -> 518 bytes frontend-dist/js/198.7896d641.js | 2 -- frontend-dist/js/198.7896d641.js.gz | Bin 57683 -> 0 bytes frontend-dist/js/198.7896d641.js.map | 1 - frontend-dist/js/198.7896d641.js.map.gz | Bin 143323 -> 0 bytes .../js/{226.f6040a84.js => 226.ec43855c.js} | 2 +- frontend-dist/js/226.ec43855c.js.gz | Bin 0 -> 3448 bytes frontend-dist/js/226.ec43855c.js.map | 1 + frontend-dist/js/226.ec43855c.js.map.gz | Bin 0 -> 9256 bytes frontend-dist/js/226.f6040a84.js.gz | Bin 3449 -> 0 bytes frontend-dist/js/226.f6040a84.js.map | 1 - frontend-dist/js/226.f6040a84.js.map.gz | Bin 9207 -> 0 bytes .../js/{309.bfaaa238.js => 309.b7dca603.js} | 2 +- frontend-dist/js/309.b7dca603.js.gz | Bin 0 -> 4310 bytes frontend-dist/js/309.b7dca603.js.map | 1 + frontend-dist/js/309.b7dca603.js.map.gz | Bin 0 -> 11806 bytes frontend-dist/js/309.bfaaa238.js.gz | Bin 4310 -> 0 bytes frontend-dist/js/309.bfaaa238.js.map | 1 - frontend-dist/js/309.bfaaa238.js.map.gz | Bin 11744 -> 0 bytes frontend-dist/js/382.da41c2f4.js | 2 ++ frontend-dist/js/382.da41c2f4.js.gz | Bin 0 -> 29669 bytes frontend-dist/js/382.da41c2f4.js.map | 1 + frontend-dist/js/382.da41c2f4.js.map.gz | Bin 0 -> 74045 bytes .../js/{396.8882609d.js => 396.226339af.js} | 2 +- ...{396.8882609d.js.gz => 396.226339af.js.gz} | Bin 2760 -> 2760 bytes ...96.8882609d.js.map => 396.226339af.js.map} | 2 +- frontend-dist/js/396.226339af.js.map.gz | Bin 0 -> 7044 bytes frontend-dist/js/396.8882609d.js.map.gz | Bin 7045 -> 0 bytes frontend-dist/js/51.0c776d33.js.gz | Bin 3363 -> 0 bytes frontend-dist/js/51.0c776d33.js.map | 1 - frontend-dist/js/51.0c776d33.js.map.gz | Bin 9212 -> 0 bytes .../js/{51.0c776d33.js => 51.6e7bf298.js} | 2 +- frontend-dist/js/51.6e7bf298.js.gz | Bin 0 -> 3364 bytes frontend-dist/js/51.6e7bf298.js.map | 1 + frontend-dist/js/51.6e7bf298.js.map.gz | Bin 0 -> 9268 bytes frontend-dist/js/518.47daf62c.js | 2 -- frontend-dist/js/518.47daf62c.js.gz | Bin 29494 -> 0 bytes frontend-dist/js/518.47daf62c.js.map | 1 - frontend-dist/js/518.47daf62c.js.map.gz | Bin 73807 -> 0 bytes frontend-dist/js/529.317ef371.js.map.gz | Bin 364685 -> 0 bytes .../js/{529.317ef371.js => 529.e05f38bd.js} | 2 +- ...{529.317ef371.js.gz => 529.e05f38bd.js.gz} | Bin 106478 -> 106479 bytes ...29.317ef371.js.map => 529.e05f38bd.js.map} | 2 +- frontend-dist/js/529.e05f38bd.js.map.gz | Bin 0 -> 364915 bytes .../js/{600.1faa1202.js => 600.08192622.js} | 2 +- ...{600.1faa1202.js.gz => 600.08192622.js.gz} | Bin 3863 -> 3864 bytes frontend-dist/js/600.08192622.js.map | 1 + frontend-dist/js/600.08192622.js.map.gz | Bin 0 -> 10858 bytes frontend-dist/js/600.1faa1202.js.map | 1 - frontend-dist/js/600.1faa1202.js.map.gz | Bin 10794 -> 0 bytes frontend-dist/js/604.1e0964ad.js | 2 -- frontend-dist/js/604.1e0964ad.js.gz | Bin 2762 -> 0 bytes frontend-dist/js/604.1e0964ad.js.map | 1 - frontend-dist/js/604.1e0964ad.js.map.gz | Bin 7886 -> 0 bytes frontend-dist/js/604.a1f7358f.js | 2 ++ frontend-dist/js/604.a1f7358f.js.gz | Bin 0 -> 2760 bytes frontend-dist/js/604.a1f7358f.js.map | 1 + frontend-dist/js/604.a1f7358f.js.map.gz | Bin 0 -> 7946 bytes .../js/{718.62a39893.js => 718.27080555.js} | 2 +- ...{718.62a39893.js.gz => 718.27080555.js.gz} | Bin 47863 -> 47862 bytes ...18.62a39893.js.map => 718.27080555.js.map} | 2 +- frontend-dist/js/718.27080555.js.map.gz | Bin 0 -> 163616 bytes frontend-dist/js/718.62a39893.js.map.gz | Bin 163576 -> 0 bytes frontend-dist/js/728.3968461e.js | 2 ++ frontend-dist/js/728.3968461e.js.gz | Bin 0 -> 2775 bytes frontend-dist/js/728.3968461e.js.map | 1 + frontend-dist/js/728.3968461e.js.map.gz | Bin 0 -> 8120 bytes frontend-dist/js/728.bd244a28.js | 2 -- frontend-dist/js/728.bd244a28.js.gz | Bin 2769 -> 0 bytes frontend-dist/js/728.bd244a28.js.map | 1 - frontend-dist/js/728.bd244a28.js.map.gz | Bin 8070 -> 0 bytes frontend-dist/js/776.74ad0ae6.js | 2 ++ frontend-dist/js/776.74ad0ae6.js.gz | Bin 0 -> 58054 bytes frontend-dist/js/776.74ad0ae6.js.map | 1 + frontend-dist/js/776.74ad0ae6.js.map.gz | Bin 0 -> 144563 bytes frontend-dist/js/917.6a48878d.js.map | 1 - frontend-dist/js/917.6a48878d.js.map.gz | Bin 9501 -> 0 bytes .../js/{917.6a48878d.js => 917.b77a6783.js} | 2 +- ...{917.6a48878d.js.gz => 917.b77a6783.js.gz} | Bin 3588 -> 3588 bytes frontend-dist/js/917.b77a6783.js.map | 1 + frontend-dist/js/917.b77a6783.js.map.gz | Bin 0 -> 9553 bytes frontend-dist/js/app.39b2f500.js | 2 -- frontend-dist/js/app.39b2f500.js.gz | Bin 25173 -> 0 bytes frontend-dist/js/app.39b2f500.js.map | 1 - frontend-dist/js/app.39b2f500.js.map.gz | Bin 18435 -> 0 bytes frontend-dist/js/app.ddbe51e0.js | 2 ++ frontend-dist/js/app.ddbe51e0.js.gz | Bin 0 -> 25166 bytes frontend-dist/js/app.ddbe51e0.js.map | 1 + frontend-dist/js/app.ddbe51e0.js.map.gz | Bin 0 -> 18565 bytes ....2d1307f5.js => chunk-vendors.01f9519f.js} | 4 ++-- ...7f5.js.gz => chunk-vendors.01f9519f.js.gz} | Bin 523187 -> 522976 bytes ...5.js.map => chunk-vendors.01f9519f.js.map} | 2 +- .../js/chunk-vendors.01f9519f.js.map.gz | Bin 0 -> 1790920 bytes .../js/chunk-vendors.2d1307f5.js.map.gz | Bin 1791361 -> 0 bytes 134 files changed, 40 insertions(+), 40 deletions(-) delete mode 100644 frontend-dist/css/198.4b4ec8d2.css delete mode 100644 frontend-dist/css/198.4b4ec8d2.css.gz rename frontend-dist/css/{226.05f9240b.css => 226.6548e7b4.css} (100%) rename frontend-dist/css/{226.05f9240b.css.gz => 226.6548e7b4.css.gz} (93%) rename frontend-dist/css/{518.7aeefd65.css => 382.ad3465bc.css} (69%) create mode 100644 frontend-dist/css/382.ad3465bc.css.gz rename frontend-dist/css/{396.88ae4a1f.css => 396.3a3d9729.css} (100%) rename frontend-dist/css/{396.88ae4a1f.css.gz => 396.3a3d9729.css.gz} (98%) rename frontend-dist/css/{428.09003661.css => 428.8044ed41.css} (100%) rename frontend-dist/css/{428.09003661.css.gz => 428.8044ed41.css.gz} (88%) rename frontend-dist/css/{51.9f054b72.css => 51.1dd65d6c.css} (100%) rename frontend-dist/css/{51.9f054b72.css.gz => 51.1dd65d6c.css.gz} (95%) delete mode 100644 frontend-dist/css/518.7aeefd65.css.gz rename frontend-dist/css/{529.f6a90dd0.css => 529.6c0a8231.css} (100%) rename frontend-dist/css/{529.f6a90dd0.css.gz => 529.6c0a8231.css.gz} (93%) create mode 100644 frontend-dist/css/604.7a66e992.css create mode 100644 frontend-dist/css/604.7a66e992.css.gz delete mode 100644 frontend-dist/css/604.8321f2db.css delete mode 100644 frontend-dist/css/604.8321f2db.css.gz rename frontend-dist/css/{718.8a9bac1a.css => 718.d0974d1c.css} (100%) rename frontend-dist/css/{718.8a9bac1a.css.gz => 718.d0974d1c.css.gz} (99%) create mode 100644 frontend-dist/css/728.7a66e992.css create mode 100644 frontend-dist/css/728.7a66e992.css.gz delete mode 100644 frontend-dist/css/728.8321f2db.css delete mode 100644 frontend-dist/css/728.8321f2db.css.gz create mode 100644 frontend-dist/css/776.cc79148e.css create mode 100644 frontend-dist/css/776.cc79148e.css.gz rename frontend-dist/css/{833.3c02d330.css => 833.95983fa6.css} (100%) rename frontend-dist/css/{833.3c02d330.css.gz => 833.95983fa6.css.gz} (98%) rename frontend-dist/css/{917.939d7cec.css => 917.8529ad1e.css} (100%) rename frontend-dist/css/{917.939d7cec.css.gz => 917.8529ad1e.css.gz} (93%) create mode 100644 frontend-dist/css/app.191d79e8.css create mode 100644 frontend-dist/css/app.191d79e8.css.gz delete mode 100644 frontend-dist/css/app.b00690f7.css delete mode 100644 frontend-dist/css/app.b00690f7.css.gz create mode 100644 frontend-dist/fonts/Pacifico-Regular.dc63ac94.woff2 delete mode 100644 frontend-dist/fonts/Righteous.207a66c3.woff2 delete mode 100644 frontend-dist/js/198.7896d641.js delete mode 100644 frontend-dist/js/198.7896d641.js.gz delete mode 100644 frontend-dist/js/198.7896d641.js.map delete mode 100644 frontend-dist/js/198.7896d641.js.map.gz rename frontend-dist/js/{226.f6040a84.js => 226.ec43855c.js} (99%) create mode 100644 frontend-dist/js/226.ec43855c.js.gz create mode 100644 frontend-dist/js/226.ec43855c.js.map create mode 100644 frontend-dist/js/226.ec43855c.js.map.gz delete mode 100644 frontend-dist/js/226.f6040a84.js.gz delete mode 100644 frontend-dist/js/226.f6040a84.js.map delete mode 100644 frontend-dist/js/226.f6040a84.js.map.gz rename frontend-dist/js/{309.bfaaa238.js => 309.b7dca603.js} (99%) create mode 100644 frontend-dist/js/309.b7dca603.js.gz create mode 100644 frontend-dist/js/309.b7dca603.js.map create mode 100644 frontend-dist/js/309.b7dca603.js.map.gz delete mode 100644 frontend-dist/js/309.bfaaa238.js.gz delete mode 100644 frontend-dist/js/309.bfaaa238.js.map delete mode 100644 frontend-dist/js/309.bfaaa238.js.map.gz create mode 100644 frontend-dist/js/382.da41c2f4.js create mode 100644 frontend-dist/js/382.da41c2f4.js.gz create mode 100644 frontend-dist/js/382.da41c2f4.js.map create mode 100644 frontend-dist/js/382.da41c2f4.js.map.gz rename frontend-dist/js/{396.8882609d.js => 396.226339af.js} (99%) rename frontend-dist/js/{396.8882609d.js.gz => 396.226339af.js.gz} (86%) rename frontend-dist/js/{396.8882609d.js.map => 396.226339af.js.map} (99%) create mode 100644 frontend-dist/js/396.226339af.js.map.gz delete mode 100644 frontend-dist/js/396.8882609d.js.map.gz delete mode 100644 frontend-dist/js/51.0c776d33.js.gz delete mode 100644 frontend-dist/js/51.0c776d33.js.map delete mode 100644 frontend-dist/js/51.0c776d33.js.map.gz rename frontend-dist/js/{51.0c776d33.js => 51.6e7bf298.js} (99%) create mode 100644 frontend-dist/js/51.6e7bf298.js.gz create mode 100644 frontend-dist/js/51.6e7bf298.js.map create mode 100644 frontend-dist/js/51.6e7bf298.js.map.gz delete mode 100644 frontend-dist/js/518.47daf62c.js delete mode 100644 frontend-dist/js/518.47daf62c.js.gz delete mode 100644 frontend-dist/js/518.47daf62c.js.map delete mode 100644 frontend-dist/js/518.47daf62c.js.map.gz delete mode 100644 frontend-dist/js/529.317ef371.js.map.gz rename frontend-dist/js/{529.317ef371.js => 529.e05f38bd.js} (99%) rename frontend-dist/js/{529.317ef371.js.gz => 529.e05f38bd.js.gz} (99%) rename frontend-dist/js/{529.317ef371.js.map => 529.e05f38bd.js.map} (78%) create mode 100644 frontend-dist/js/529.e05f38bd.js.map.gz rename frontend-dist/js/{600.1faa1202.js => 600.08192622.js} (99%) rename frontend-dist/js/{600.1faa1202.js.gz => 600.08192622.js.gz} (90%) create mode 100644 frontend-dist/js/600.08192622.js.map create mode 100644 frontend-dist/js/600.08192622.js.map.gz delete mode 100644 frontend-dist/js/600.1faa1202.js.map delete mode 100644 frontend-dist/js/600.1faa1202.js.map.gz delete mode 100644 frontend-dist/js/604.1e0964ad.js delete mode 100644 frontend-dist/js/604.1e0964ad.js.gz delete mode 100644 frontend-dist/js/604.1e0964ad.js.map delete mode 100644 frontend-dist/js/604.1e0964ad.js.map.gz create mode 100644 frontend-dist/js/604.a1f7358f.js create mode 100644 frontend-dist/js/604.a1f7358f.js.gz create mode 100644 frontend-dist/js/604.a1f7358f.js.map create mode 100644 frontend-dist/js/604.a1f7358f.js.map.gz rename frontend-dist/js/{718.62a39893.js => 718.27080555.js} (99%) rename frontend-dist/js/{718.62a39893.js.gz => 718.27080555.js.gz} (99%) rename frontend-dist/js/{718.62a39893.js.map => 718.27080555.js.map} (81%) create mode 100644 frontend-dist/js/718.27080555.js.map.gz delete mode 100644 frontend-dist/js/718.62a39893.js.map.gz create mode 100644 frontend-dist/js/728.3968461e.js create mode 100644 frontend-dist/js/728.3968461e.js.gz create mode 100644 frontend-dist/js/728.3968461e.js.map create mode 100644 frontend-dist/js/728.3968461e.js.map.gz delete mode 100644 frontend-dist/js/728.bd244a28.js delete mode 100644 frontend-dist/js/728.bd244a28.js.gz delete mode 100644 frontend-dist/js/728.bd244a28.js.map delete mode 100644 frontend-dist/js/728.bd244a28.js.map.gz create mode 100644 frontend-dist/js/776.74ad0ae6.js create mode 100644 frontend-dist/js/776.74ad0ae6.js.gz create mode 100644 frontend-dist/js/776.74ad0ae6.js.map create mode 100644 frontend-dist/js/776.74ad0ae6.js.map.gz delete mode 100644 frontend-dist/js/917.6a48878d.js.map delete mode 100644 frontend-dist/js/917.6a48878d.js.map.gz rename frontend-dist/js/{917.6a48878d.js => 917.b77a6783.js} (99%) rename frontend-dist/js/{917.6a48878d.js.gz => 917.b77a6783.js.gz} (95%) create mode 100644 frontend-dist/js/917.b77a6783.js.map create mode 100644 frontend-dist/js/917.b77a6783.js.map.gz delete mode 100644 frontend-dist/js/app.39b2f500.js delete mode 100644 frontend-dist/js/app.39b2f500.js.gz delete mode 100644 frontend-dist/js/app.39b2f500.js.map delete mode 100644 frontend-dist/js/app.39b2f500.js.map.gz create mode 100644 frontend-dist/js/app.ddbe51e0.js create mode 100644 frontend-dist/js/app.ddbe51e0.js.gz create mode 100644 frontend-dist/js/app.ddbe51e0.js.map create mode 100644 frontend-dist/js/app.ddbe51e0.js.map.gz rename frontend-dist/js/{chunk-vendors.2d1307f5.js => chunk-vendors.01f9519f.js} (93%) rename frontend-dist/js/{chunk-vendors.2d1307f5.js.gz => chunk-vendors.01f9519f.js.gz} (74%) rename frontend-dist/js/{chunk-vendors.2d1307f5.js.map => chunk-vendors.01f9519f.js.map} (53%) create mode 100644 frontend-dist/js/chunk-vendors.01f9519f.js.map.gz delete mode 100644 frontend-dist/js/chunk-vendors.2d1307f5.js.map.gz diff --git a/frontend-dist/css/198.4b4ec8d2.css b/frontend-dist/css/198.4b4ec8d2.css deleted file mode 100644 index 9ce425fa..00000000 --- a/frontend-dist/css/198.4b4ec8d2.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-206e41fa]{display:flex;justify-content:right;margin-bottom:10px;flex-wrap:wrap;gap:8px}.detail-action[data-v-206e41fa]{margin-left:0!important}.video-preview[data-v-206e41fa]{max-height:300px;cursor:pointer;-o-object-fit:contain;object-fit:contain}.audio-preview[data-v-206e41fa],.video-preview[data-v-206e41fa]{width:100%;max-width:400px;border-radius:8px}.image-preview[data-v-206e41fa]{width:auto;height:auto;max-width:100%;max-height:300px;border-radius:8px;cursor:pointer}.image-preview[data-v-206e41fa] img{max-width:100%;max-height:300px;-o-object-fit:contain;object-fit:contain}.file-icon-detail[data-v-206e41fa]{font-size:64px;color:var(--el-text-color-secondary)}.preview-section[data-v-206e41fa]{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-206e41fa]{display:flex;justify-content:center;align-items:center;width:100%}[data-v-206e41fa] .el-descriptions__content{word-break:break-all;word-wrap:break-word}[data-v-206e41fa] .el-descriptions__content .el-tag,[data-v-206e41fa] .el-descriptions__content .el-tag+span{vertical-align:middle}[data-v-206e41fa] .el-descriptions__label{width:120px!important;min-width:100px!important;max-width:120px!important}[data-v-206e41fa] .el-descriptions__body table{table-layout:fixed}@media (max-width:768px){.detail-actions[data-v-206e41fa]{justify-content:center}}.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-3ef86404]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;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-3ef86404]:last-child{border-bottom:none}.list-item[data-v-3ef86404]:hover{background:var(--el-fill-color-light)}.list-col[data-v-3ef86404]{display:flex;align-items:center}.list-col-checkbox[data-v-3ef86404]{justify-content:center;min-width:40px}.list-col-preview[data-v-3ef86404]{justify-content:center;cursor:pointer}.list-col-name[data-v-3ef86404]{cursor:pointer;overflow:hidden;padding-right:16px;min-width:0}.list-col-name[data-v-3ef86404]:hover{color:#38bdf8}.filename-ellipsis[data-v-3ef86404]{display:flex;max-width:100%;overflow:hidden;align-items:center}.filename-start[data-v-3ef86404]{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filename-end[data-v-3ef86404]{flex-shrink:0;white-space:nowrap}.list-col-channel-name[data-v-3ef86404],.list-col-channel[data-v-3ef86404],.list-col-date[data-v-3ef86404],.list-col-size[data-v-3ef86404]{font-size:13px;color:var(--el-text-color-secondary)}.list-col-address[data-v-3ef86404]{font-size:13px}.address-box[data-v-3ef86404],.channel-name-box[data-v-3ef86404]{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-3ef86404]{width:85px;font-family:Consolas,Monaco,monospace}.channel-name-box[data-v-3ef86404]{width:70px}.address-box[data-v-3ef86404]::-webkit-scrollbar,.channel-name-box[data-v-3ef86404]::-webkit-scrollbar{display:none}.list-col-tags[data-v-3ef86404]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden}.custom-checkbox[data-v-3ef86404]{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-3ef86404]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-3ef86404]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-3ef86404]{font-size:10px;color:#fff}.color-tag[data-v-3ef86404]{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-3ef86404]{min-width:30px;text-align:center}.list-empty[data-v-3ef86404]{color:var(--el-text-color-placeholder)}.list-col-actions[data-v-3ef86404]{display:flex;gap:8px;justify-content:flex-end}.list-preview-img[data-v-3ef86404]{width:40px;height:40px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.list-folder-icon[data-v-3ef86404]{font-size:28px;color:var(--el-color-primary)}.list-file-icon[data-v-3ef86404]{font-size:24px;color:var(--el-text-color-secondary)}.list-action-btn[data-v-3ef86404]{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-3ef86404]:hover{background:#38bdf8;color:#fff}.list-action-danger[data-v-3ef86404]:hover{background:var(--el-color-danger)}@media (max-width:768px){.list-item[data-v-3ef86404]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-3ef86404],.list-col-channel-name[data-v-3ef86404],.list-col-channel[data-v-3ef86404],.list-col-date[data-v-3ef86404],.list-col-size[data-v-3ef86404],.list-col-tags[data-v-3ef86404]{display:none}.list-col-actions[data-v-3ef86404]{gap:4px}.list-action-btn[data-v-3ef86404]{width:28px;height:28px}.list-col-checkbox[data-v-3ef86404]{width:24px;min-width:24px}}.img-card[data-v-efb50eda]{width:100%;height:22vh;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-efb50eda] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-efb50eda] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-efb50eda]:hover{transform:scale(1.05)}.image-preview[data-v-efb50eda],.video-preview[data-v-efb50eda]{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-efb50eda]{cursor:pointer}.img-card:hover .file-icon[data-v-efb50eda],.img-card:hover .image-preview[data-v-efb50eda],.img-card:hover .video-preview[data-v-efb50eda]{transform:scale(1.08)}.image-preview[data-v-efb50eda]:hover{opacity:.8}.file-short-info[data-v-efb50eda]{position:absolute;z-index:10;top:3px;left:3px;display:flex;gap:5px;align-items:start}.success-tag[data-v-efb50eda]{background-color:rgba(34,139,34,.6);border:1px solid rgba(34,139,34,.7);border-radius:6px}.fail-tag[data-v-efb50eda],.success-tag[data-v-efb50eda]{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-efb50eda]{background-color:rgba(220,53,69,.6);border:1px solid rgba(220,53,69,.7);border-radius:6px}.primary-tag[data-v-efb50eda]{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-efb50eda]{display:flex;justify-content:center;align-items:center;width:100%;height:100%}.file-icon[data-v-efb50eda]{opacity:.6;font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.audio-icon[data-v-efb50eda]{color:var(--el-color-primary);opacity:.8}.audio-card-preview[data-v-efb50eda]{cursor:pointer}.card-bottom-overlay[data-v-efb50eda]{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-efb50eda]{display:flex;align-items:center;justify-content:center}.file-name[data-v-efb50eda]{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-efb50eda]{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-efb50eda]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-efb50eda],.action-bar-right[data-v-efb50eda]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-efb50eda]{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-efb50eda]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-efb50eda]:active{transform:scale(.95)}.action-btn-danger[data-v-efb50eda]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-efb50eda]{display:none!important}}@keyframes skeleton-shimmer-efb50eda{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-wrapper[data-v-efb50eda]{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-efb50eda 1.5s ease-in-out infinite}.error-wrapper[data-v-efb50eda]{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-efb50eda]{font-size:32px;color:var(--el-color-warning);opacity:.7}.error-text[data-v-efb50eda]{font-size:12px;color:var(--el-text-color-secondary)}.img-card[data-v-41b1a7c0]{width:100%;height:22vh;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-41b1a7c0] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-41b1a7c0] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-41b1a7c0]:hover{transform:scale(1.05)}.folder-card[data-v-41b1a7c0]{cursor:pointer}.folder-icon[data-v-41b1a7c0]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;color:var(--el-color-primary)}.folder-icon-svg[data-v-41b1a7c0]{font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.img-card:hover .folder-icon-svg[data-v-41b1a7c0]{transform:scale(1.08)}.card-bottom-overlay[data-v-41b1a7c0]{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-41b1a7c0]{display:flex;align-items:center;justify-content:center}.file-name[data-v-41b1a7c0]{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-41b1a7c0]{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-41b1a7c0]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-41b1a7c0],.action-bar-right[data-v-41b1a7c0]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-41b1a7c0]{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-41b1a7c0]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-41b1a7c0]:active{transform:scale(.95)}.action-btn-danger[data-v-41b1a7c0]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-41b1a7c0]{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-f746277c]{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-f746277c] .el-container,[data-v-f746277c] .el-main{overflow:visible}[data-v-f746277c] .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-f746277c]{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-f746277c]{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-f746277c]{flex-direction:column;top:6px;width:calc(100% - 32px);border-radius:14px;padding:6px 12px;gap:4px}.header-icon[data-v-f746277c]{font-size:.95em}.header-content .actions[data-v-f746277c]{gap:10px}.search-card[data-v-f746277c] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-f746277c] .el-input__wrapper{padding:0 10px}.search-card[data-v-f746277c] .el-input__inner:focus{width:65vw}}.header-content[data-v-f746277c]: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-f746277c]: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-f746277c]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-f746277c]:hover{color:var(--admin-purple);transform:scale(1.2)}.breadcrumb-container[data-v-f746277c]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 10px;margin-bottom:4px}@media (max-width:768px){.breadcrumb-container[data-v-f746277c]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-bottom:2px}}.stats-badge[data-v-f746277c]{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}.stats-badge[data-v-f746277c]:hover{background:var(--el-fill-color);color:var(--admin-purple);border-color:var(--admin-purple)}.stats-badge-icon[data-v-f746277c]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-f746277c]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-f746277c]{font-size:9px}}.header-content .actions[data-v-f746277c]{display:flex;align-items:center;gap:15px}@media (max-width:768px){.header-content .actions[data-v-f746277c]{margin-top:10px}}.header-content .actions i[data-v-f746277c]{font-size:1.5em;cursor:pointer;transition:color .3s,transform .3s;color:var(--admin-container-color)}.header-content .actions i[data-v-f746277c]:hover{color:var(--admin-purple);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-f746277c]{color:var(--admin-container-color)}.header-content .actions .el-dropdown-link i[data-v-f746277c]:hover{color:var(--admin-purple)}.header-content .actions .disabled[data-v-f746277c]{color:#bbb;pointer-events:none}.header-content .actions .enabled[data-v-f746277c]{color:var(--admin-purple)}.batch-action-item-icon[data-v-f746277c]{width:20px;margin-right:5px}.search-area[data-v-f746277c]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-f746277c]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-f746277c]{display:flex;align-items:center}.search-card[data-v-f746277c] .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-f746277c] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-f746277c] .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-f746277c] .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-f746277c] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-f746277c] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-f746277c] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-f746277c] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-f746277c] .el-input__inner:focus{width:55vw}}.search-icon[data-v-f746277c]{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-f746277c]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-f746277c]:hover{color:var(--admin-purple);transform:scale(1.2)}.search-card[data-v-f746277c] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-f746277c]{display:flex;flex-direction:column;padding:20px 60px;min-height:calc(100vh - 80px)}@media (max-width:768px){.main-container[data-v-f746277c]{margin-top:12vh}}.content[data-v-f746277c]{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}.empty-state[data-v-f746277c]{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-f746277c]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-f746277c]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-f746277c]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-f746277c]{padding:80px 20px}@media (max-width:768px){.content[data-v-f746277c]{grid-template-columns:1fr;grid-template-rows:none}}.list-view[data-v-f746277c]{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-f746277c]{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-f746277c]{display:flex;align-items:center}.list-col-checkbox[data-v-f746277c]{justify-content:center;min-width:40px}.custom-checkbox[data-v-f746277c]{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-f746277c]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-f746277c],.custom-checkbox.indeterminate[data-v-f746277c]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-f746277c]{font-size:10px;color:#fff}@media (max-width:768px){.list-header[data-v-f746277c]{display:none}}.pagination-container[data-v-f746277c]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-f746277c]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-f746277c] .el-pagination{--el-pagination-button-bg-color:var(--admin-dashboard-btn-bg-color);--el-pagination-hover-color:var(--admin-purple)}.pagination-container[data-v-f746277c] .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-f746277c] .el-pager li:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-container[data-v-f746277c] .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-f746277c] .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-f746277c] .btn-next,.pagination-container[data-v-f746277c] .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-f746277c] .btn-next:hover,.pagination-container[data-v-f746277c] .btn-prev:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-right[data-v-f746277c]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-total[data-v-f746277c]{font-size:13px;color:var(--el-text-color-secondary);white-space:nowrap}.page-jump[data-v-f746277c]{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--el-text-color-secondary)}.page-jump .jump-input[data-v-f746277c]{width:50px}.page-jump .jump-input[data-v-f746277c] .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-f746277c] .el-input__inner{text-align:center;color:var(--el-text-color-primary);height:28px;line-height:28px}.page-jump .jump-btn[data-v-f746277c]{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-f746277c]:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(56,189,248,.4)}@media (max-width:768px){.pagination-container[data-v-f746277c]{flex-direction:column;gap:12px;padding-bottom:15px}.pagination-center[data-v-f746277c]{order:0}.pagination-right[data-v-f746277c]{position:static;width:100%;justify-content:center;order:1}.page-jump .jump-input[data-v-f746277c]{width:45px}}.refresh-btn[data-v-f746277c]{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-f746277c]:hover{transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow);background:linear-gradient(135deg,#0ea5e9,#38bdf8);color:#fff}.load-more[data-v-f746277c]{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-f746277c]:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(56,189,248,.5)}[data-v-f746277c] .btn-prev{left:8px}[data-v-f746277c] .btn-next,[data-v-f746277c] .btn-prev{border-radius:100%;position:fixed;top:50%;scale:1;color:var(--admin-dashboard-btn-color)}[data-v-f746277c] .btn-next{right:8px}@media (min-width:768px){[data-v-f746277c] .el-pagination.is-background .btn-next,[data-v-f746277c] .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-f746277c] .el-pagination.is-background .btn-next:hover,[data-v-f746277c] .el-pagination.is-background .btn-prev:hover{transform:translateY(-10%);box-shadow:var(--admin-dashboard-btn-hover-shadow)}}.question-icon[data-v-f746277c]{margin:0 3px}.breadcrumb[data-v-f746277c]{padding:8px 12px;background-color:var(--el-bg-color);border-radius:6px;font-size:.95em;box-shadow:var(--admin-dashboard-stats-shadow);transition:all .3s ease}.breadcrumb[data-v-f746277c]:hover{transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-home-icon[data-v-f746277c]{font-size:14px;color:#38bdf8;transition:color .2s ease}.breadcrumb-home-icon[data-v-f746277c]:hover{color:var(--admin-purple)}[data-v-f746277c] .el-breadcrumb__item{cursor:pointer}[data-v-f746277c] .el-breadcrumb__inner:hover{color:var(--el-color-primary)}.mobile-directory-trigger[data-v-f746277c]{display:none;align-items:center;gap:6px;padding:6px 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-f746277c]:active{background:var(--el-fill-color)}.mobile-directory-icon[data-v-f746277c]{font-size:12px;color:#38bdf8}.mobile-directory-path[data-v-f746277c]{font-size:12px;font-weight:500;color:var(--el-text-color-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-f746277c]{font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-f746277c]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-f746277c]{display:flex}.desktop-only[data-v-f746277c]{display:none!important}.breadcrumb-container[data-v-f746277c]{padding:0;margin-left:0}}.drag-select-overlay[data-v-f746277c]{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/198.4b4ec8d2.css.gz b/frontend-dist/css/198.4b4ec8d2.css.gz deleted file mode 100644 index f992b214336bef297793487a25bfdd8456b592c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13152 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 GQ2_wAx#7?N diff --git a/frontend-dist/css/226.05f9240b.css b/frontend-dist/css/226.6548e7b4.css similarity index 100% rename from frontend-dist/css/226.05f9240b.css rename to frontend-dist/css/226.6548e7b4.css diff --git a/frontend-dist/css/226.05f9240b.css.gz b/frontend-dist/css/226.6548e7b4.css.gz similarity index 93% rename from frontend-dist/css/226.05f9240b.css.gz rename to frontend-dist/css/226.6548e7b4.css.gz index 1890701de9e062d78c2a705c8e62ffc65ae2caf8..31721599f6a8524ffd5981af9675ed2cb2b2e792 100644 GIT binary patch delta 19 YcmdnZyPKCwzMF#q1emxsa&2S-04i7m%K!iX delta 19 YcmdnZyPKCwzMF#q1ek<3a&2S-04jw8)Bpeg diff --git a/frontend-dist/css/518.7aeefd65.css b/frontend-dist/css/382.ad3465bc.css similarity index 69% rename from frontend-dist/css/518.7aeefd65.css rename to frontend-dist/css/382.ad3465bc.css index bc4d078b..4656be2d 100644 --- a/frontend-dist/css/518.7aeefd65.css +++ b/frontend-dist/css/382.ad3465bc.css @@ -1 +1 @@ -.history-container[data-v-550797ce]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2000;display:flex;flex-direction:column;color:var(--upload-text-color);clip-path:circle(0 at calc(100% - 200px) 50px);opacity:0;transition:clip-path .6s cubic-bezier(.4,0,.2,1),opacity .3s ease}.history-container[data-v-550797ce]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(20px);background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-550797ce]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-550797ce]{padding:20px 40px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.header-left[data-v-550797ce]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-550797ce]{margin:0;font-size:24px;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.record-count[data-v-550797ce]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-550797ce]{display:flex;gap:10px}.header-right .el-button[data-v-550797ce]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-550797ce]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-550797ce]{background:linear-gradient(135deg,#ff6b6b,#ee5a5a);color:#fff}.history-content[data-v-550797ce]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-550797ce]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-550797ce]{background:var(--toolbar-button-bg-color);border-radius:12px;overflow:hidden;box-shadow:var(--toolbar-button-shadow);transition:transform .3s ease,box-shadow .3s ease;border:none;backdrop-filter:blur(10px)}.grid-item[data-v-550797ce]:hover{transform:translateY(-5px);box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-550797ce]{height:160px;position:relative;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.grid-preview img[data-v-550797ce],.grid-preview video[data-v-550797ce]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-550797ce]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-550797ce]{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease}.grid-item:hover .grid-overlay[data-v-550797ce]{opacity:1}.grid-actions[data-v-550797ce]{display:flex;gap:15px}.grid-actions .el-button[data-v-550797ce]{backdrop-filter:blur(10px)}.grid-info[data-v-550797ce]{padding:12px}.file-name[data-v-550797ce]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;color:var(--upload-text-color)}.upload-time[data-v-550797ce]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-550797ce]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-550797ce]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;transition:all .3s ease}.list-item[data-v-550797ce]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-550797ce]{width:50px;height:50px;border-radius:8px;overflow:hidden;margin-right:15px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}.list-preview img[data-v-550797ce],.list-preview video[data-v-550797ce]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-550797ce]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-550797ce]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-550797ce]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-550797ce]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-550797ce]{display:flex;gap:8px}.list-actions .el-button[data-v-550797ce]{backdrop-filter:blur(10px)}.empty-state[data-v-550797ce]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--upload-text-color);font-size:18px;opacity:.5}.empty-icon[data-v-550797ce]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-550797ce]::-webkit-scrollbar{width:8px}.history-content[data-v-550797ce]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-550797ce]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-550797ce]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-550797ce]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color)}.action-btn-view[data-v-550797ce]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-550797ce]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-550797ce]:last-child{border-left:2px solid transparent}.timeline-header[data-v-550797ce]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-550797ce]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:0 0 10px var(--el-upload-dragger-uniform-color);z-index:2;box-sizing:border-box}.date-label[data-v-550797ce]{font-size:20px;font-weight:700;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent}.load-more-container[data-v-550797ce]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-550797ce]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-550797ce],.no-more-hint[data-v-550797ce]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-550797ce]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-550797ce]{padding:15px 20px}.header-left h2[data-v-550797ce]{font-size:20px}.history-content[data-v-550797ce]{padding:15px 20px}.grid-view[data-v-550797ce]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-550797ce]{height:120px}.list-meta[data-v-550797ce]{display:none}.list-info[data-v-550797ce]{margin-right:10px}}.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translateX(-50%);-webkit-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translateX(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translateX(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.channel-icon-wrapper[data-v-33933ada]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-33933ada] svg,.channel-svg-icon[data-v-33933ada]{width:1em;height:1em;fill:currentColor}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.upload-list-item[data-v-4848c2b0]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(64,158,255,.1));padding:10px 12px;border-radius:16px;background:var(--upload-list-item-bg,linear-gradient(135deg,hsla(0,0%,100%,.9) 0,hsla(0,0%,100%,.7) 100%));backdrop-filter:blur(10px);box-shadow:0 2px 8px var(--upload-list-item-shadow,rgba(0,0,0,.04));transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-4848c2b0]:hover{border-color:var(--upload-list-item-hover-border,rgba(64,158,255,.25));box-shadow:0 4px 16px var(--upload-list-item-hover-shadow,rgba(64,158,255,.12));transform:translateY(-2px)}.upload-list-item-content[data-v-4848c2b0]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-action[data-v-4848c2b0]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-item-url-row[data-v-4848c2b0]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-4848c2b0]:last-child{margin-bottom:0}.upload-list-item-url[data-v-4848c2b0]{display:flex;flex-direction:column}.file-icon[data-v-4848c2b0]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-name-wrapper[data-v-4848c2b0]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,linear-gradient(135deg,rgba(64,158,255,.08) 0,rgba(64,158,255,.03) 100%));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(64,158,255,.12));backdrop-filter:blur(4px);transition:all .3s ease}.upload-list-item-name-wrapper[data-v-4848c2b0]:hover{background:var(--file-name-hover-bg,linear-gradient(135deg,rgba(64,158,255,.12) 0,rgba(64,158,255,.06) 100%));border-color:var(--file-name-hover-border,rgba(64,158,255,.2))}.upload-list-item-name[data-v-4848c2b0]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.upload-list-item-progress[data-v-4848c2b0]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,linear-gradient(135deg,rgba(64,158,255,.05) 0,rgba(64,158,255,.02) 100%));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(64,158,255,.1))}.upload-list-item-progress[data-v-4848c2b0] .el-progress{--el-color-primary:#409eff}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,linear-gradient(135deg,rgba(0,0,0,.06) 0,rgba(0,0,0,.03) 100%));box-shadow:inset 0 1px 3px rgba(0,0,0,.08);overflow:hidden}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__inner{border-radius:8px;background:linear-gradient(90deg,#409eff,#66b1ff 50%,#409eff)!important;box-shadow:0 0 12px rgba(64,158,255,.5),0 0 4px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.3);position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2) 50%,transparent);pointer-events:none}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__inner:before{content:"";position:absolute;top:0;left:-100%;width:300%;height:100%;background:repeating-linear-gradient(45deg,transparent,transparent 8px,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 16px);animation:progressStripes-4848c2b0 1s linear infinite}.upload-list-item-progress[data-v-4848c2b0] .el-progress--success .el-progress-bar__inner{background:linear-gradient(90deg,#67c23a,#85ce61 25%,#95d475 50%,#85ce61 75%,#67c23a)!important;background-size:200% 100%;box-shadow:0 0 12px rgba(103,194,58,.5),0 0 4px rgba(103,194,58,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:none}.upload-list-item-progress[data-v-4848c2b0] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-4848c2b0] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-4848c2b0] .el-progress--exception .el-progress-bar__inner{background:linear-gradient(90deg,#f56c6c,#f78989 25%,#f9a7a7 50%,#f78989 75%,#f56c6c)!important;background-size:200% 100%;box-shadow:0 0 12px hsla(0,87%,69%,.5),0 0 4px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:progressPulse-4848c2b0 1s ease-in-out infinite}.upload-list-item-progress[data-v-4848c2b0] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressStripes-4848c2b0{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-4848c2b0{0%,to{opacity:1}50%{opacity:.7}}.upload-list-item-url[data-v-4848c2b0] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-4848c2b0] .el-input:hover{transform:translateY(-1px)}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper{border-radius:10px;box-shadow:0 1px 3px rgba(0,0,0,.08);transition:all .3s cubic-bezier(.4,0,.2,1);background:var(--el-fill-color-blank);border:1px solid var(--el-border-color-lighter);overflow:hidden;position:relative;padding:0}.upload-list-item-url[data-v-4848c2b0] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper:hover{box-shadow:0 2px 8px rgba(0,0,0,.12);border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper.is-focus{box-shadow:0 0 0 2px var(--el-color-primary-light-8),0 4px 12px rgba(0,0,0,.15);border-color:var(--el-color-primary)}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(64,158,255,.08),transparent);animation:shimmer-4848c2b0 2s infinite;z-index:0}@keyframes shimmer-4848c2b0{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-4848c2b0] .el-input__inner{font-size:13px;font-family:Courier New,Monaco,monospace;color:var(--el-text-color-regular);transition:all .3s ease;padding-left:12px;position:relative;z-index:1;border-radius:0 10px 10px 0}.upload-list-item-url[data-v-4848c2b0] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-4848c2b0] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-4848c2b0] .el-input-group__prepend{background:var(--el-color-primary-light-9);color:var(--el-color-primary);font-weight:600;font-size:12px;border:none;padding:0 14px;margin:0;border-radius:9px 0 0 9px;box-shadow:none;transition:all .3s ease;letter-spacing:.5px;position:relative;z-index:1}.upload-list-item-url[data-v-4848c2b0] .el-input-group__prepend:after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);height:60%;width:1px;background:var(--el-color-primary-light-7);opacity:.3;transition:all .3s ease}.upload-list-item-url[data-v-4848c2b0] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-4848c2b0] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-4848c2b0] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff;animation:prependPulse-4848c2b0 2s ease-in-out infinite}.upload-list-item-url[data-v-4848c2b0] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}@keyframes prependPulse-4848c2b0{0%,to{opacity:1}50%{opacity:.95}}.modern-file-action-btn[data-v-4848c2b0]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);font-size:16px;position:relative;overflow:hidden;margin:4px 0}.modern-file-action-btn[data-v-4848c2b0]:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:hsla(0,0%,100%,.3);border-radius:50%;transform:translate(-50%,-50%);transition:width .4s ease,height .4s ease}.modern-file-action-btn[data-v-4848c2b0]:active:before{width:100%;height:100%}.modern-file-action-btn-primary[data-v-4848c2b0]{background:var(--file-action-primary-bg,linear-gradient(145deg,#409eff 0,#53a8ff 50%,#66b1ff 100%));color:#fff;box-shadow:0 3px 10px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-primary[data-v-4848c2b0]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-primary[data-v-4848c2b0]:active{transform:translateY(-1px) scale(1.02)}.modern-file-action-btn-danger[data-v-4848c2b0]{background:var(--file-action-danger-bg,linear-gradient(145deg,#f56c6c 0,#f78989 50%,#f9a7a7 100%));color:#fff;box-shadow:0 3px 10px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-danger[data-v-4848c2b0]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px hsla(0,87%,69%,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-danger[data-v-4848c2b0]:active{transform:translateY(-1px) scale(1.02)}@media (max-width:768px){.upload-list-item-content[data-v-4848c2b0]{margin-left:2px}.upload-list-item-url-row[data-v-4848c2b0]{width:42vw;flex-direction:column;gap:6px}.upload-list-item-progress[data-v-4848c2b0]{width:32vw;padding:3px 6px}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__outer{height:8px!important}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper{border-radius:8px}.upload-list-item-url[data-v-4848c2b0] .el-input__inner{font-size:12px}.upload-list-item-url[data-v-4848c2b0] .el-input-group__prepend{font-size:11px;padding:0 8px;border-radius:8px 0 0 8px}.modern-file-action-btn[data-v-4848c2b0]{width:34px;height:34px;border-radius:10px;font-size:14px}.upload-list-item-name-wrapper[data-v-4848c2b0]{padding:4px 10px;border-radius:8px}.upload-list-item-name[data-v-4848c2b0]{font-size:12px;width:32vw}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;outline:var(--el-border);padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}@property --border-angle{syntax:"";initial-value:0deg;inherits:false}@keyframes borderRotate-be7542f0{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-be7542f0],.upload-list-card[data-v-be7542f0]{display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-list-card[data-v-be7542f0]{width:55vw;height:7vh;margin-top:10px;border-radius:15px;background-color:var(--upload-list-card-bg-color);backdrop-filter:blur(10px);border:var(--upload-list-card-border);box-shadow:var(--upload-list-card-box-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-be7542f0] .el-card__body{padding:0;width:100%;overflow:hidden}.upload-list-container[data-v-be7542f0]{width:55vw;height:7vh;transition:height .3s ease;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-be7542f0],.upload-list-container[data-v-be7542f0]{width:70vw}}.upload-list-card.upload-list-busy[data-v-be7542f0],.upload-list-container.upload-list-busy[data-v-be7542f0]{height:40vh}.upload-list-card.is-uploading[data-v-be7542f0]{border:1px solid var(--el-upload-dragger-uniform-color,#409eff)!important;box-shadow:0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 30%,transparent),0 0 40px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 15%,transparent),inset 0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 8%,transparent)!important}.upload-card-wrapper[data-v-be7542f0]{position:relative;overflow:visible}.upload-card-glow[data-v-be7542f0]{position:absolute;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,rgba(96,165,250,.2) 0,transparent 70%);pointer-events:none;transform:translate(-50%,-50%);opacity:0;transition:opacity .3s ease;z-index:10}.upload-card[data-v-be7542f0]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-be7542f0]{width:70vw}}.upload-card-busy[data-v-be7542f0] .el-upload-dragger{height:17vh}[data-v-be7542f0] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease}[data-v-be7542f0] .el-upload:focus .el-upload-dragger{border-color:var(--el-upload-dragger-border-color)}[data-v-be7542f0] .el-upload-dragger.is-dragover,[data-v-be7542f0] .el-upload-dragger:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.is-uploading[data-v-be7542f0] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-be7542f0]{position:relative;background:none}.upload-card.is-uploading[data-v-be7542f0]:before{content:"";position:absolute;top:20px;left:20px;right:20px;bottom:20px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--el-upload-dragger-uniform-color,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-be7542f0 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-be7542f0]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}@media (max-width:768px){.el-upload__text[data-v-be7542f0]{font-size:small}}.el-upload__text.upload-list-busy[data-v-be7542f0]{font-size:small}.el-icon--upload[data-v-be7542f0]{font-size:100px;transition:font-size .3s ease;color:var(--el-icon--upload-color)}.el-icon--upload.upload-list-busy[data-v-be7542f0]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-be7542f0]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-be7542f0]{font-size:30px}}.paste-card[data-v-be7542f0]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-be7542f0]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-be7542f0]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-be7542f0]:before{content:"";position:absolute;inset:-4px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--el-upload-dragger-uniform-color,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-be7542f0 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-be7542f0] .el-card__body{padding:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-card-busy.paste-card[data-v-be7542f0]{height:17vh}.upload-card-textarea[data-v-be7542f0]{width:50vw;height:70%;border-radius:16px;background:var(--textarea-bg,linear-gradient(135deg,rgba(64,158,255,.03) 0,rgba(64,158,255,.01) 100%));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);box-sizing:border-box;display:flex;position:relative}.upload-card-busy .upload-card-textarea[data-v-be7542f0]{height:50%}.upload-card-textarea[data-v-be7542f0]:before{content:"";position:absolute;inset:-1px;border-radius:17px;padding:1px;background:linear-gradient(135deg,rgba(64,158,255,.3),rgba(64,158,255,.1) 50%,rgba(64,158,255,.3));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:.6;transition:opacity .3s ease}.upload-card-textarea[data-v-be7542f0]:hover:before{opacity:1}.upload-card-textarea[data-v-be7542f0]:focus-within:before{opacity:1;background:linear-gradient(135deg,rgba(64,158,255,.6),rgba(64,158,255,.2) 50%,rgba(64,158,255,.6))}[data-v-be7542f0] .el-textarea__inner{border-radius:16px;background:var(--textarea-inner-bg,rgba(0,0,0,.02));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);resize:none;border:1px solid transparent;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}[data-v-be7542f0] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-be7542f0] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-be7542f0] .el-textarea__inner:hover{background:var(--textarea-inner-hover-bg,rgba(64,158,255,.03))}[data-v-be7542f0] .el-textarea__inner:focus{border-color:transparent;box-shadow:0 0 0 3px rgba(64,158,255,.15),0 4px 20px rgba(64,158,255,.1),inset 0 1px 3px rgba(0,0,0,.05);background:var(--textarea-inner-focus-bg,rgba(64,158,255,.02))}.upload-card-textarea[data-v-be7542f0] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-be7542f0] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-be7542f0] ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,rgba(64,158,255,.4),rgba(64,158,255,.6));border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-be7542f0] ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,rgba(64,158,255,.6),rgba(64,158,255,.8))}.paste-card-actions[data-v-be7542f0]{display:flex;justify-content:space-between;align-items:center;width:50vw;margin-top:3%}.paste-card-upload-button[data-v-be7542f0]{min-width:100px;height:42px;border-radius:14px!important;font-weight:600;font-size:15px;letter-spacing:2px;background:linear-gradient(135deg,#409eff,#66b1ff)!important;border:none!important;box-shadow:0 4px 15px rgba(64,158,255,.35),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)!important;position:relative;overflow:hidden}.paste-card-upload-button[data-v-be7542f0]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.25),transparent);transition:left .6s ease}.paste-card-upload-button[data-v-be7542f0]:hover{transform:translateY(-3px) scale(1.02);box-shadow:0 8px 25px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.paste-card-upload-button[data-v-be7542f0]:hover:before{left:100%}.paste-card-upload-button[data-v-be7542f0]:active{transform:translateY(-1px) scale(.98)}.upload-card-busy .paste-card-upload-button[data-v-be7542f0]{min-width:70px;height:32px;border-radius:10px!important;font-size:13px;letter-spacing:1px}.upload-card-busy .paste-card-actions[data-v-be7542f0]{margin-top:2%}.paste-card-method-group[data-v-be7542f0]{background:var(--paste-method-group-bg,rgba(64,158,255,.08));border-radius:14px;padding:4px;border:1px solid var(--paste-method-group-border,rgba(64,158,255,.15))}.paste-card-method-group[data-v-be7542f0] .el-radio-button__inner{transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:10px!important;border:none!important;background:transparent;font-weight:500;padding:10px 20px;color:var(--el-text-color-regular)}.paste-card-method-group[data-v-be7542f0] .el-radio-button:first-child .el-radio-button__inner,.paste-card-method-group[data-v-be7542f0] .el-radio-button:last-child .el-radio-button__inner{border-radius:10px!important}.paste-card-method-group[data-v-be7542f0] .el-radio-button__inner:hover{background:var(--paste-method-hover-bg,rgba(64,158,255,.12));color:var(--el-color-primary)}.paste-card-method-group[data-v-be7542f0] .el-radio-button__original-radio:checked+.el-radio-button__inner{background:linear-gradient(135deg,#409eff,#66b1ff)!important;color:#fff!important;box-shadow:0 3px 10px rgba(64,158,255,.35)}@media (max-width:768px){.paste-card[data-v-be7542f0]{height:auto;min-height:30vh;padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-be7542f0]{height:auto;min-height:18vh;padding:5px}.upload-card-textarea[data-v-be7542f0]{margin-top:4px;width:calc(100% - 4px)!important}.upload-card-textarea[data-v-be7542f0]:before{border-radius:11px}[data-v-be7542f0] .el-textarea__inner{border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-be7542f0]{width:100%!important;margin-top:6px;gap:6px}.paste-card-upload-button[data-v-be7542f0]{height:30px;min-width:55px;border-radius:8px!important;font-size:12px;letter-spacing:.5px;padding:0 10px}.paste-card-method-group[data-v-be7542f0]{border-radius:8px;padding:2px;height:30px;display:flex;align-items:center}.paste-card-method-group[data-v-be7542f0] .el-radio-button__inner{padding:4px 10px;font-size:11px;border-radius:6px!important;height:26px;display:flex;align-items:center}}.upload-list-dashboard[data-v-be7542f0]{display:flex;justify-content:space-between;align-items:center;height:7vh;padding:0 15px;position:sticky;top:0;z-index:1;border-radius:15px;transition:all .3s ease}.upload-list-dashboard.list-scrolled[data-v-be7542f0]{background-color:var(--upload-list-dashboard-bg-color);box-shadow:var(--upload-list-dashboard-shadow)}[data-v-be7542f0] .el-upload-dragger{position:relative;overflow:hidden}[data-v-be7542f0] .el-upload-dragger:before{background-image:radial-gradient(2px 2px at 10% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 20% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 30% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 40% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 50% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 60% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 70% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 80% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 90% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 15% 70%,var(--el-upload-dragger-uniform-color) 50%,transparent 0);background-size:200px 200px}[data-v-be7542f0] .el-upload-dragger:after,[data-v-be7542f0] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-be7542f0] .el-upload-dragger:after{background-image:radial-gradient(3px 3px at 15% 15%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(3px 3px at 50% 50%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(3px 3px at 85% 85%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2.5px 2.5px at 35% 65%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2.5px 2.5px at 65% 35%,var(--el-upload-dragger-uniform-color) 50%,transparent 0);background-size:150px 150px}.upload-card[data-v-be7542f0]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-be7542f0 60s linear infinite}.upload-card[data-v-be7542f0]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-be7542f0 40s linear infinite,starPulse-be7542f0 4s ease-in-out infinite}@keyframes starScroll-be7542f0{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-be7542f0{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-be7542f0]{display:flex;align-items:center;gap:6px;padding:4px;background:var(--modern-action-group-bg,rgba(64,158,255,.08));border-radius:14px;border:1px solid var(--modern-action-group-border,rgba(64,158,255,.15));box-shadow:0 2px 8px var(--modern-action-group-shadow,rgba(0,0,0,.06));transition:all .3s cubic-bezier(.4,0,.2,1)}.modern-action-group[data-v-be7542f0]:hover{background:var(--modern-action-group-hover-bg,rgba(64,158,255,.12));box-shadow:0 4px 16px var(--modern-action-group-hover-shadow,rgba(64,158,255,.15));transform:translateY(-1px)}.modern-action-btn[data-v-be7542f0]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:10px;background:var(--modern-action-btn-bg,linear-gradient(135deg,#409eff 0,#66b1ff 100%));color:#fff;cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);font-size:14px;box-shadow:0 2px 6px rgba(64,158,255,.25);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-be7542f0]:focus,.modern-action-btn[data-v-be7542f0]:focus-visible{outline:none!important}.modern-action-btn[data-v-be7542f0]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);transition:left .5s ease}.modern-action-btn[data-v-be7542f0]:hover{transform:translateY(-2px) scale(1.05);box-shadow:0 4px 12px rgba(64,158,255,.4)}.modern-action-btn[data-v-be7542f0]:hover:before{left:100%}.modern-action-btn[data-v-be7542f0]:active{transform:translateY(0) scale(.98);box-shadow:0 1px 4px rgba(64,158,255,.3)}.modern-action-btn-danger[data-v-be7542f0]{background:var(--modern-action-btn-danger-bg,linear-gradient(135deg,#f56c6c 0,#f78989 100%));box-shadow:0 2px 6px hsla(0,87%,69%,.25)}.modern-action-btn-danger[data-v-be7542f0]:hover{box-shadow:0 4px 12px hsla(0,87%,69%,.4)}.modern-dropdown-item-content[data-v-be7542f0]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-be7542f0]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-be7542f0]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;padding:6px 14px;background:var(--dashboard-title-bg,linear-gradient(135deg,rgba(64,158,255,.06) 0,transparent 100%));border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-be7542f0]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-be7542f0]{gap:4px;padding:3px;border-radius:12px}.modern-action-btn[data-v-be7542f0]{width:32px;height:32px;border-radius:8px;font-size:12px}.upload-list-dashboard-title[data-v-be7542f0]{font-size:12px;padding:4px 10px}}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.directory-suggestion-input[data-v-0ff63416]{width:100%;height:100%;position:relative}.suggestion-dropdown[data-v-0ff63416]{position:absolute;top:calc(100% + 10px);left:0;width:100%;z-index:9999;border-radius:12px;border:none;background-color:var(--popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--popper-shadow);padding:6px 0;overflow:hidden}.suggestion-list[data-v-0ff63416]{list-style:none;margin:0;padding:0;max-height:260px;overflow-y:auto}.suggestion-item[data-v-0ff63416]{padding:8px 16px;font-size:13px;border-radius:6px;margin:2px 6px;cursor:pointer;transition:background-color .2s ease;text-align:left;color:var(--el-text-color-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-item[data-v-0ff63416]:hover{background-color:var(--el-fill-color-light)}#themeToggle[data-v-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.container[data-v-f50dcc42]{background:var(--bg-color);min-height:100vh}.rotate[data-v-f50dcc42]{animation:spin-f50dcc42 2s ease-in-out}.scale[data-v-f50dcc42]{animation:scale-f50dcc42 .5s ease-in-out}@keyframes spin-f50dcc42{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-f50dcc42{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-f50dcc42{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-f50dcc42{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-f50dcc42{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-f50dcc42]{display:inline-block}.mobile-only[data-v-f50dcc42]{display:none}@media (max-width:768px){.desktop-only[data-v-f50dcc42]{display:none!important}.mobile-only[data-v-f50dcc42]{display:flex!important}}.toggle-dark-button[data-v-f50dcc42]{border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;position:fixed;top:30px;right:80px}.more-dropdown[data-v-f50dcc42]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-f50dcc42]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.more-dropdown .more-button[data-v-f50dcc42]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.upload-method-button[data-v-f50dcc42]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;position:fixed;top:30px;right:130px;outline:none}@media (max-width:768px){.upload-method-button[data-v-f50dcc42]{width:2rem;height:2rem}}.upload-method-icon[data-v-f50dcc42]{outline:none}.mobile-more-dropdown[data-v-f50dcc42]{position:fixed;top:30px;right:30px;z-index:100}.mobile-more-button[data-v-f50dcc42]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-f50dcc42]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.upload-folder-container[data-v-f50dcc42]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-f50dcc42]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-f50dcc42],.upload-folder-container[data-v-f50dcc42]{right:70px}}.upload-folder[data-v-f50dcc42]{width:100px;height:2.5rem;border-radius:12px;transition:all .3s ease,width .4s ease}.upload-folder.active[data-v-f50dcc42]{width:200px}@media (max-width:768px){.upload-folder[data-v-f50dcc42]{width:80px;height:2rem}.upload-folder.active[data-v-f50dcc42]{width:120px}}.directory-tree-trigger[data-v-f50dcc42]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border:none;margin-left:10px;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none}.directory-tree-trigger[data-v-f50dcc42]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}@media (max-width:768px){.directory-tree-trigger[data-v-f50dcc42]{width:2rem;height:2rem}}.upload-folder[data-v-f50dcc42] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-f50dcc42] .el-input{height:100%}.upload-folder[data-v-f50dcc42] .el-input__wrapper{border-radius:12px;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;height:100%}.toolbar-manage[data-v-f50dcc42]{position:fixed;bottom:50px;right:30px;z-index:200}.toolbar-manage-button[data-v-f50dcc42]{border:none;transition:all .3s ease,border-radius .4s ease;margin-left:0;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--toolbar-button-color);outline:none;border-radius:12px}.toolbar-manage-button.active[data-v-f50dcc42]{border-radius:50%}.toolbar[data-v-f50dcc42]{position:fixed;bottom:50px;right:30px;display:flex;flex-direction:column;align-items:center;z-index:100}.toolbar-button[data-v-f50dcc42]{border:none;transition:all .3s ease;margin-left:0;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--toolbar-button-color)}.info-container[data-v-f50dcc42]:hover,.toggle-dark-button[data-v-f50dcc42]:hover,.toolbar-button[data-v-f50dcc42]:hover,.toolbar-manage-button[data-v-f50dcc42]:hover,.upload-method-button[data-v-f50dcc42]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.upload-folder[data-v-f50dcc42]:hover{box-shadow:var(--toolbar-button-shadow-hover)}.compress-button[data-v-f50dcc42]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.compress-button.active[data-v-f50dcc42]{transform:translateY(-75px);opacity:1}.link-button[data-v-f50dcc42]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.link-button.active[data-v-f50dcc42]{transform:translateY(-58px) translateX(-50px);opacity:1}.config-button[data-v-f50dcc42]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.config-button.active[data-v-f50dcc42]{transform:translateY(-11px) translateX(-75px);opacity:1}.sign-out-button[data-v-f50dcc42]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.sign-out-button.active[data-v-f50dcc42]{transform:translateY(42px) translateX(-68px);opacity:1}@media (min-width:768px){.compress-button[data-v-f50dcc42]:hover{transform:translateY(-77px)}.link-button[data-v-f50dcc42]:hover{transform:translateY(-60px) translateX(-52px)}.config-button[data-v-f50dcc42]:hover{transform:translateY(-12px) translateX(-77px)}.sign-out-button[data-v-f50dcc42]:hover{transform:translateY(44px) translateX(-70px)}.compress-icon[data-v-f50dcc42]:hover{animation:scale-f50dcc42 .5s ease-in-out}.config-icon[data-v-f50dcc42]:hover{animation:spin-f50dcc42 .5s ease-in-out}.link-icon[data-v-f50dcc42]:hover{animation:rotate-shake-f50dcc42 .5s ease-in-out}.sign-out-icon[data-v-f50dcc42]:hover{animation:shake-f50dcc42 .5s ease-in-out}}[data-v-f50dcc42] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-f50dcc42]{display:flex;justify-content:center;margin-top:20px}.header[data-v-f50dcc42]{display:flex;justify-content:center;align-items:center;padding:15px;margin-top:5vh;color:var(--upload-header-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;position:relative;top:-3vh;transition:all .3s ease}.title[data-v-f50dcc42]{font-size:2.5rem;font-weight:400;font-family:Righteous,Noto Sans SC,sans-serif;position:relative;padding-bottom:8px;cursor:pointer;transition:all .4s cubic-bezier(.4,0,.2,1);animation:float-f50dcc42 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-f50dcc42]:hover{transform:scale(1.08) translateY(-3px);filter:drop-shadow(0 0 20px var(--el-upload-dragger-uniform-color))}.title[data-v-f50dcc42]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:linear-gradient(90deg,transparent,var(--el-upload-dragger-uniform-color),transparent);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:0 0 10px var(--el-upload-dragger-uniform-color)}.title[data-v-f50dcc42]:hover:after{width:80%}.main-title[data-v-f50dcc42]{background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;text-decoration:none;display:inline-block;animation:titleShimmer-f50dcc42 3s ease-in-out infinite;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3))}.title:hover .main-title[data-v-f50dcc42]{animation:titleShimmer-f50dcc42 1s ease-in-out infinite;filter:brightness(1.2)}@keyframes float-f50dcc42{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes titleShimmer-f50dcc42{0%{background-position:200%}to{background-position:-200%}}@media (max-width:768px){.title[data-v-f50dcc42]{font-size:1.8rem;letter-spacing:1px}.title[data-v-f50dcc42]:hover{transform:scale(1.05) translateY(-2px)}}.upload-home[data-v-f50dcc42]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:var(--admin-container-bg-color)}.upload[data-v-f50dcc42]{margin-bottom:5px;position:relative;top:-3vh}.footer[data-v-f50dcc42]{height:6vh} \ No newline at end of file +.history-container[data-v-550797ce]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2000;display:flex;flex-direction:column;color:var(--upload-text-color);clip-path:circle(0 at calc(100% - 200px) 50px);opacity:0;transition:clip-path .6s cubic-bezier(.4,0,.2,1),opacity .3s ease}.history-container[data-v-550797ce]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(20px);background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-550797ce]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-550797ce]{padding:20px 40px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.header-left[data-v-550797ce]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-550797ce]{margin:0;font-size:24px;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.record-count[data-v-550797ce]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-550797ce]{display:flex;gap:10px}.header-right .el-button[data-v-550797ce]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-550797ce]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-550797ce]{background:linear-gradient(135deg,#ff6b6b,#ee5a5a);color:#fff}.history-content[data-v-550797ce]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-550797ce]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-550797ce]{background:var(--toolbar-button-bg-color);border-radius:12px;overflow:hidden;box-shadow:var(--toolbar-button-shadow);transition:transform .3s ease,box-shadow .3s ease;border:none;backdrop-filter:blur(10px)}.grid-item[data-v-550797ce]:hover{transform:translateY(-5px);box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-550797ce]{height:160px;position:relative;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.grid-preview img[data-v-550797ce],.grid-preview video[data-v-550797ce]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-550797ce]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-550797ce]{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease}.grid-item:hover .grid-overlay[data-v-550797ce]{opacity:1}.grid-actions[data-v-550797ce]{display:flex;gap:15px}.grid-actions .el-button[data-v-550797ce]{backdrop-filter:blur(10px)}.grid-info[data-v-550797ce]{padding:12px}.file-name[data-v-550797ce]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;color:var(--upload-text-color)}.upload-time[data-v-550797ce]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-550797ce]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-550797ce]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;transition:all .3s ease}.list-item[data-v-550797ce]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-550797ce]{width:50px;height:50px;border-radius:8px;overflow:hidden;margin-right:15px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}.list-preview img[data-v-550797ce],.list-preview video[data-v-550797ce]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-550797ce]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-550797ce]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-550797ce]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-550797ce]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-550797ce]{display:flex;gap:8px}.list-actions .el-button[data-v-550797ce]{backdrop-filter:blur(10px)}.empty-state[data-v-550797ce]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--upload-text-color);font-size:18px;opacity:.5}.empty-icon[data-v-550797ce]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-550797ce]::-webkit-scrollbar{width:8px}.history-content[data-v-550797ce]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-550797ce]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-550797ce]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-550797ce]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color)}.action-btn-view[data-v-550797ce]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-550797ce]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-550797ce]:last-child{border-left:2px solid transparent}.timeline-header[data-v-550797ce]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-550797ce]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:0 0 10px var(--el-upload-dragger-uniform-color);z-index:2;box-sizing:border-box}.date-label[data-v-550797ce]{font-size:20px;font-weight:700;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent}.load-more-container[data-v-550797ce]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-550797ce]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-550797ce],.no-more-hint[data-v-550797ce]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-550797ce]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-550797ce]{padding:15px 20px}.header-left h2[data-v-550797ce]{font-size:20px}.history-content[data-v-550797ce]{padding:15px 20px}.grid-view[data-v-550797ce]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-550797ce]{height:120px}.list-meta[data-v-550797ce]{display:none}.list-info[data-v-550797ce]{margin-right:10px}}.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translateX(-50%);-webkit-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translateX(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translateX(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.channel-icon-wrapper[data-v-33933ada]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-33933ada] svg,.channel-svg-icon[data-v-33933ada]{width:1em;height:1em;fill:currentColor}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.upload-list-item[data-v-4848c2b0]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(64,158,255,.1));padding:10px 12px;border-radius:16px;background:var(--upload-list-item-bg,linear-gradient(135deg,hsla(0,0%,100%,.9) 0,hsla(0,0%,100%,.7) 100%));backdrop-filter:blur(10px);box-shadow:0 2px 8px var(--upload-list-item-shadow,rgba(0,0,0,.04));transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-4848c2b0]:hover{border-color:var(--upload-list-item-hover-border,rgba(64,158,255,.25));box-shadow:0 4px 16px var(--upload-list-item-hover-shadow,rgba(64,158,255,.12));transform:translateY(-2px)}.upload-list-item-content[data-v-4848c2b0]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-action[data-v-4848c2b0]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-item-url-row[data-v-4848c2b0]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-4848c2b0]:last-child{margin-bottom:0}.upload-list-item-url[data-v-4848c2b0]{display:flex;flex-direction:column}.file-icon[data-v-4848c2b0]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-name-wrapper[data-v-4848c2b0]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,linear-gradient(135deg,rgba(64,158,255,.08) 0,rgba(64,158,255,.03) 100%));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(64,158,255,.12));backdrop-filter:blur(4px);transition:all .3s ease}.upload-list-item-name-wrapper[data-v-4848c2b0]:hover{background:var(--file-name-hover-bg,linear-gradient(135deg,rgba(64,158,255,.12) 0,rgba(64,158,255,.06) 100%));border-color:var(--file-name-hover-border,rgba(64,158,255,.2))}.upload-list-item-name[data-v-4848c2b0]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.upload-list-item-progress[data-v-4848c2b0]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,linear-gradient(135deg,rgba(64,158,255,.05) 0,rgba(64,158,255,.02) 100%));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(64,158,255,.1))}.upload-list-item-progress[data-v-4848c2b0] .el-progress{--el-color-primary:#409eff}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,linear-gradient(135deg,rgba(0,0,0,.06) 0,rgba(0,0,0,.03) 100%));box-shadow:inset 0 1px 3px rgba(0,0,0,.08);overflow:hidden}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__inner{border-radius:8px;background:linear-gradient(90deg,#409eff,#66b1ff 50%,#409eff)!important;box-shadow:0 0 12px rgba(64,158,255,.5),0 0 4px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.3);position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2) 50%,transparent);pointer-events:none}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__inner:before{content:"";position:absolute;top:0;left:-100%;width:300%;height:100%;background:repeating-linear-gradient(45deg,transparent,transparent 8px,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 16px);animation:progressStripes-4848c2b0 1s linear infinite}.upload-list-item-progress[data-v-4848c2b0] .el-progress--success .el-progress-bar__inner{background:linear-gradient(90deg,#67c23a,#85ce61 25%,#95d475 50%,#85ce61 75%,#67c23a)!important;background-size:200% 100%;box-shadow:0 0 12px rgba(103,194,58,.5),0 0 4px rgba(103,194,58,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:none}.upload-list-item-progress[data-v-4848c2b0] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-4848c2b0] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-4848c2b0] .el-progress--exception .el-progress-bar__inner{background:linear-gradient(90deg,#f56c6c,#f78989 25%,#f9a7a7 50%,#f78989 75%,#f56c6c)!important;background-size:200% 100%;box-shadow:0 0 12px hsla(0,87%,69%,.5),0 0 4px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:progressPulse-4848c2b0 1s ease-in-out infinite}.upload-list-item-progress[data-v-4848c2b0] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressStripes-4848c2b0{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-4848c2b0{0%,to{opacity:1}50%{opacity:.7}}.upload-list-item-url[data-v-4848c2b0] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-4848c2b0] .el-input:hover{transform:translateY(-1px)}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper{border-radius:10px;box-shadow:0 1px 3px rgba(0,0,0,.08);transition:all .3s cubic-bezier(.4,0,.2,1);background:var(--el-fill-color-blank);border:1px solid var(--el-border-color-lighter);overflow:hidden;position:relative;padding:0}.upload-list-item-url[data-v-4848c2b0] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper:hover{box-shadow:0 2px 8px rgba(0,0,0,.12);border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper.is-focus{box-shadow:0 0 0 2px var(--el-color-primary-light-8),0 4px 12px rgba(0,0,0,.15);border-color:var(--el-color-primary)}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(64,158,255,.08),transparent);animation:shimmer-4848c2b0 2s infinite;z-index:0}@keyframes shimmer-4848c2b0{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-4848c2b0] .el-input__inner{font-size:13px;font-family:Courier New,Monaco,monospace;color:var(--el-text-color-regular);transition:all .3s ease;padding-left:12px;position:relative;z-index:1;border-radius:0 10px 10px 0}.upload-list-item-url[data-v-4848c2b0] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-4848c2b0] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-4848c2b0] .el-input-group__prepend{background:var(--el-color-primary-light-9);color:var(--el-color-primary);font-weight:600;font-size:12px;border:none;padding:0 14px;margin:0;border-radius:9px 0 0 9px;box-shadow:none;transition:all .3s ease;letter-spacing:.5px;position:relative;z-index:1}.upload-list-item-url[data-v-4848c2b0] .el-input-group__prepend:after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);height:60%;width:1px;background:var(--el-color-primary-light-7);opacity:.3;transition:all .3s ease}.upload-list-item-url[data-v-4848c2b0] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-4848c2b0] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-4848c2b0] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff;animation:prependPulse-4848c2b0 2s ease-in-out infinite}.upload-list-item-url[data-v-4848c2b0] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}@keyframes prependPulse-4848c2b0{0%,to{opacity:1}50%{opacity:.95}}.modern-file-action-btn[data-v-4848c2b0]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);font-size:16px;position:relative;overflow:hidden;margin:4px 0}.modern-file-action-btn[data-v-4848c2b0]:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:hsla(0,0%,100%,.3);border-radius:50%;transform:translate(-50%,-50%);transition:width .4s ease,height .4s ease}.modern-file-action-btn[data-v-4848c2b0]:active:before{width:100%;height:100%}.modern-file-action-btn-primary[data-v-4848c2b0]{background:var(--file-action-primary-bg,linear-gradient(145deg,#409eff 0,#53a8ff 50%,#66b1ff 100%));color:#fff;box-shadow:0 3px 10px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-primary[data-v-4848c2b0]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-primary[data-v-4848c2b0]:active{transform:translateY(-1px) scale(1.02)}.modern-file-action-btn-danger[data-v-4848c2b0]{background:var(--file-action-danger-bg,linear-gradient(145deg,#f56c6c 0,#f78989 50%,#f9a7a7 100%));color:#fff;box-shadow:0 3px 10px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-danger[data-v-4848c2b0]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px hsla(0,87%,69%,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-danger[data-v-4848c2b0]:active{transform:translateY(-1px) scale(1.02)}@media (max-width:768px){.upload-list-item-content[data-v-4848c2b0]{margin-left:2px}.upload-list-item-url-row[data-v-4848c2b0]{width:42vw;flex-direction:column;gap:6px}.upload-list-item-progress[data-v-4848c2b0]{width:32vw;padding:3px 6px}.upload-list-item-progress[data-v-4848c2b0] .el-progress-bar__outer{height:8px!important}.upload-list-item-url[data-v-4848c2b0] .el-input__wrapper{border-radius:8px}.upload-list-item-url[data-v-4848c2b0] .el-input__inner{font-size:12px}.upload-list-item-url[data-v-4848c2b0] .el-input-group__prepend{font-size:11px;padding:0 8px;border-radius:8px 0 0 8px}.modern-file-action-btn[data-v-4848c2b0]{width:34px;height:34px;border-radius:10px;font-size:14px}.upload-list-item-name-wrapper[data-v-4848c2b0]{padding:4px 10px;border-radius:8px}.upload-list-item-name[data-v-4848c2b0]{font-size:12px;width:32vw}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;outline:var(--el-border);padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}@property --border-angle{syntax:"";initial-value:0deg;inherits:false}@keyframes borderRotate-5f291428{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-5f291428],.upload-list-card[data-v-5f291428]{display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-list-card[data-v-5f291428]{width:55vw;height:7vh;margin-top:10px;border-radius:15px;background-color:var(--upload-list-card-bg-color);backdrop-filter:blur(10px);border:var(--upload-list-card-border);box-shadow:var(--upload-list-card-box-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-5f291428] .el-card__body{padding:0;width:100%;overflow:hidden}.upload-list-container[data-v-5f291428]{width:55vw;height:7vh;transition:height .3s ease;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-5f291428],.upload-list-container[data-v-5f291428]{width:70vw}}.upload-list-card.upload-list-busy[data-v-5f291428],.upload-list-container.upload-list-busy[data-v-5f291428]{height:40vh}.upload-list-card.is-uploading[data-v-5f291428]{border:1px solid var(--el-upload-dragger-uniform-color,#409eff)!important;box-shadow:0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 30%,transparent),0 0 40px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 15%,transparent),inset 0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 8%,transparent)!important}.upload-card-wrapper[data-v-5f291428]{position:relative;overflow:visible}.upload-card-glow[data-v-5f291428]{position:absolute;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,rgba(96,165,250,.2) 0,transparent 70%);pointer-events:none;transform:translate(-50%,-50%);opacity:0;transition:opacity .3s ease;z-index:10}.upload-card[data-v-5f291428]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-5f291428]{width:70vw}}.upload-card-busy[data-v-5f291428] .el-upload-dragger{height:17vh}[data-v-5f291428] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease}[data-v-5f291428] .el-upload:focus .el-upload-dragger{border-color:var(--el-upload-dragger-border-color)}[data-v-5f291428] .el-upload-dragger.is-dragover,[data-v-5f291428] .el-upload-dragger:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.is-uploading[data-v-5f291428] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-5f291428]{position:relative;background:none}.upload-card.is-uploading[data-v-5f291428]:before{content:"";position:absolute;top:20px;left:20px;right:20px;bottom:20px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--el-upload-dragger-uniform-color,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-5f291428 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-5f291428]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}@media (max-width:768px){.el-upload__text[data-v-5f291428]{font-size:small}}.el-upload__text.upload-list-busy[data-v-5f291428]{font-size:small}.el-icon--upload[data-v-5f291428]{font-size:100px;transition:font-size .3s ease;color:var(--el-icon--upload-color)}.el-icon--upload.upload-list-busy[data-v-5f291428]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-5f291428]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-5f291428]{font-size:30px}}.paste-card[data-v-5f291428]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-5f291428]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-5f291428]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-5f291428]:before{content:"";position:absolute;inset:-4px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--el-upload-dragger-uniform-color,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-5f291428 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-5f291428] .el-card__body{padding:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-card-busy.paste-card[data-v-5f291428]{height:17vh}.upload-card-textarea[data-v-5f291428]{width:50vw;height:70%;border-radius:16px;background:var(--textarea-bg,linear-gradient(135deg,rgba(64,158,255,.03) 0,rgba(64,158,255,.01) 100%));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);box-sizing:border-box;display:flex;position:relative}.upload-card-busy .upload-card-textarea[data-v-5f291428]{height:50%}.upload-card-textarea[data-v-5f291428]:before{content:"";position:absolute;inset:-1px;border-radius:17px;padding:1px;background:linear-gradient(135deg,rgba(64,158,255,.3),rgba(64,158,255,.1) 50%,rgba(64,158,255,.3));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:.6;transition:opacity .3s ease}.upload-card-textarea[data-v-5f291428]:hover:before{opacity:1}.upload-card-textarea[data-v-5f291428]:focus-within:before{opacity:1;background:linear-gradient(135deg,rgba(64,158,255,.6),rgba(64,158,255,.2) 50%,rgba(64,158,255,.6))}[data-v-5f291428] .el-textarea__inner{border-radius:16px;background:var(--textarea-inner-bg,rgba(0,0,0,.02));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);resize:none;border:1px solid transparent;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}[data-v-5f291428] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-5f291428] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-5f291428] .el-textarea__inner:hover{background:var(--textarea-inner-hover-bg,rgba(64,158,255,.03))}[data-v-5f291428] .el-textarea__inner:focus{border-color:transparent;box-shadow:0 0 0 3px rgba(64,158,255,.15),0 4px 20px rgba(64,158,255,.1),inset 0 1px 3px rgba(0,0,0,.05);background:var(--textarea-inner-focus-bg,rgba(64,158,255,.02))}.upload-card-textarea[data-v-5f291428] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-5f291428] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-5f291428] ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,rgba(64,158,255,.4),rgba(64,158,255,.6));border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-5f291428] ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,rgba(64,158,255,.6),rgba(64,158,255,.8))}.paste-card-actions[data-v-5f291428]{display:flex;justify-content:space-between;align-items:center;width:50vw;margin-top:3%}.paste-card-upload-button[data-v-5f291428]{min-width:100px;height:42px;border-radius:14px!important;font-weight:600;font-size:15px;letter-spacing:2px;background:linear-gradient(135deg,#409eff,#66b1ff)!important;border:none!important;box-shadow:0 4px 15px rgba(64,158,255,.35),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)!important;position:relative;overflow:hidden}.paste-card-upload-button[data-v-5f291428]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.25),transparent);transition:left .6s ease}.paste-card-upload-button[data-v-5f291428]:hover{transform:translateY(-3px) scale(1.02);box-shadow:0 8px 25px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.paste-card-upload-button[data-v-5f291428]:hover:before{left:100%}.paste-card-upload-button[data-v-5f291428]:active{transform:translateY(-1px) scale(.98)}.upload-card-busy .paste-card-upload-button[data-v-5f291428]{min-width:70px;height:32px;border-radius:10px!important;font-size:13px;letter-spacing:1px}.upload-card-busy .paste-card-actions[data-v-5f291428]{margin-top:2%}.paste-card-method-group[data-v-5f291428]{background:var(--paste-method-group-bg,rgba(64,158,255,.08));border-radius:14px;padding:4px;border:1px solid var(--paste-method-group-border,rgba(64,158,255,.15))}.paste-card-method-group[data-v-5f291428] .el-radio-button__inner{transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:10px!important;border:none!important;background:transparent;font-weight:500;padding:10px 20px;color:var(--el-text-color-regular)}.paste-card-method-group[data-v-5f291428] .el-radio-button:first-child .el-radio-button__inner,.paste-card-method-group[data-v-5f291428] .el-radio-button:last-child .el-radio-button__inner{border-radius:10px!important}.paste-card-method-group[data-v-5f291428] .el-radio-button__inner:hover{background:var(--paste-method-hover-bg,rgba(64,158,255,.12));color:var(--el-color-primary)}.paste-card-method-group[data-v-5f291428] .el-radio-button__original-radio:checked+.el-radio-button__inner{background:linear-gradient(135deg,#409eff,#66b1ff)!important;color:#fff!important;box-shadow:0 3px 10px rgba(64,158,255,.35)}@media (max-width:768px){.paste-card[data-v-5f291428]{height:auto;min-height:30vh;padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-5f291428]{height:auto;min-height:18vh;padding:5px}.upload-card-textarea[data-v-5f291428]{margin-top:4px;width:calc(100% - 4px)!important}.upload-card-textarea[data-v-5f291428]:before{border-radius:11px}[data-v-5f291428] .el-textarea__inner{border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-5f291428]{width:100%!important;margin-top:6px;gap:6px}.paste-card-upload-button[data-v-5f291428]{height:30px;min-width:55px;border-radius:8px!important;font-size:12px;letter-spacing:.5px;padding:0 10px}.paste-card-method-group[data-v-5f291428]{border-radius:8px;padding:2px;height:30px;display:flex;align-items:center}.paste-card-method-group[data-v-5f291428] .el-radio-button__inner{padding:4px 10px;font-size:11px;border-radius:6px!important;height:26px;display:flex;align-items:center}}.upload-list-dashboard[data-v-5f291428]{display:flex;justify-content:space-between;align-items:center;height:7vh;padding:0 15px;position:sticky;top:0;z-index:1;border-radius:15px;transition:all .3s ease}.upload-list-dashboard.list-scrolled[data-v-5f291428]{background-color:var(--upload-list-dashboard-bg-color);box-shadow:var(--upload-list-dashboard-shadow)}[data-v-5f291428] .el-upload-dragger{position:relative;overflow:hidden}[data-v-5f291428] .el-upload-dragger:before{background-image:radial-gradient(2px 2px at 10% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 20% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 30% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 40% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 50% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 60% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 70% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 80% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 90% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 15% 70%,var(--el-upload-dragger-uniform-color) 50%,transparent 0);background-size:200px 200px}[data-v-5f291428] .el-upload-dragger:after,[data-v-5f291428] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-5f291428] .el-upload-dragger:after{background-image:radial-gradient(3px 3px at 15% 15%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(3px 3px at 50% 50%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(3px 3px at 85% 85%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2.5px 2.5px at 35% 65%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2.5px 2.5px at 65% 35%,var(--el-upload-dragger-uniform-color) 50%,transparent 0);background-size:150px 150px}.upload-card[data-v-5f291428]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-5f291428 60s linear infinite}.upload-card[data-v-5f291428]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-5f291428 40s linear infinite,starPulse-5f291428 4s ease-in-out infinite}@keyframes starScroll-5f291428{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-5f291428{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-5f291428]{display:flex;align-items:center;gap:5px;padding:5px;background:var(--upload-action-toolbar-bg);border-radius:18px;border:1px solid var(--upload-action-toolbar-border);box-shadow:var(--upload-action-toolbar-shadow);backdrop-filter:blur(14px) saturate(1.08);-webkit-backdrop-filter:blur(14px) saturate(1.08);transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease,transform .25s ease}.modern-action-group[data-v-5f291428]:hover{background:var(--upload-action-toolbar-hover-bg);border-color:var(--upload-action-toolbar-hover-border);box-shadow:var(--upload-action-toolbar-hover-shadow)}.modern-action-btn[data-v-5f291428]{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:13px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);cursor:pointer;transition:background-color .22s ease,color .22s ease,box-shadow .22s ease,transform .22s ease;font-size:14px;box-shadow:var(--upload-action-btn-shadow);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-5f291428]:focus,.modern-action-btn[data-v-5f291428]:focus-visible{outline:none!important}.modern-action-btn[data-v-5f291428]:before{content:"";position:absolute;inset:2px;border-radius:11px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-action-btn[data-v-5f291428]:hover{transform:translateY(-1px);background:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.modern-action-btn[data-v-5f291428]:hover:before{opacity:.08}.modern-action-btn[data-v-5f291428]:active{transform:translateY(0) scale(.97);box-shadow:var(--upload-action-btn-active-shadow)}.modern-action-btn-copy[data-v-5f291428]{color:var(--upload-action-copy-color)}.modern-action-btn-retry[data-v-5f291428]{color:var(--upload-action-retry-color)}.modern-action-btn-danger[data-v-5f291428]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-action-btn-danger[data-v-5f291428]:hover{background:var(--upload-action-danger-hover-bg);box-shadow:var(--upload-action-danger-hover-shadow)}.modern-dropdown-item-content[data-v-5f291428]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-5f291428]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-5f291428]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;padding:6px 14px;background:var(--dashboard-title-bg,linear-gradient(135deg,rgba(64,158,255,.06) 0,transparent 100%));border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-5f291428]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-5f291428]{gap:4px;padding:3px;border-radius:12px}.modern-action-btn[data-v-5f291428]{width:32px;height:32px;border-radius:8px;font-size:12px}.upload-list-dashboard-title[data-v-5f291428]{font-size:12px;padding:4px 10px}}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.directory-suggestion-input[data-v-0ff63416]{width:100%;height:100%;position:relative}.suggestion-dropdown[data-v-0ff63416]{position:absolute;top:calc(100% + 10px);left:0;width:100%;z-index:9999;border-radius:12px;border:none;background-color:var(--popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--popper-shadow);padding:6px 0;overflow:hidden}.suggestion-list[data-v-0ff63416]{list-style:none;margin:0;padding:0;max-height:260px;overflow-y:auto}.suggestion-item[data-v-0ff63416]{padding:8px 16px;font-size:13px;border-radius:6px;margin:2px 6px;cursor:pointer;transition:background-color .2s ease;text-align:left;color:var(--el-text-color-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-item[data-v-0ff63416]:hover{background-color:var(--el-fill-color-light)}#themeToggle[data-v-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.container[data-v-4d468a92]{background:var(--bg-color);min-height:100vh}.rotate[data-v-4d468a92]{animation:spin-4d468a92 2s ease-in-out}.scale[data-v-4d468a92]{animation:scale-4d468a92 .5s ease-in-out}@keyframes spin-4d468a92{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-4d468a92{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-4d468a92{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-4d468a92{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-4d468a92{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-4d468a92]{display:inline-block}.mobile-only[data-v-4d468a92]{display:none}@media (max-width:768px){.desktop-only[data-v-4d468a92]{display:none!important}.mobile-only[data-v-4d468a92]{display:flex!important}}.toggle-dark-button[data-v-4d468a92]{border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;position:fixed;top:30px;right:80px}.more-dropdown[data-v-4d468a92]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-4d468a92]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.more-dropdown .more-button[data-v-4d468a92]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.upload-method-button[data-v-4d468a92]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;position:fixed;top:30px;right:130px;outline:none}@media (max-width:768px){.upload-method-button[data-v-4d468a92]{width:2rem;height:2rem}}.upload-method-icon[data-v-4d468a92]{outline:none}.mobile-more-dropdown[data-v-4d468a92]{position:fixed;top:30px;right:30px;z-index:100}.mobile-more-button[data-v-4d468a92]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-4d468a92]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.upload-folder-container[data-v-4d468a92]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-4d468a92]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-4d468a92],.upload-folder-container[data-v-4d468a92]{right:70px}}.upload-folder[data-v-4d468a92]{width:100px;height:2.5rem;border-radius:12px;transition:all .3s ease,width .4s ease}.upload-folder.active[data-v-4d468a92]{width:200px}@media (max-width:768px){.upload-folder[data-v-4d468a92]{width:80px;height:2rem}.upload-folder.active[data-v-4d468a92]{width:120px}}.directory-tree-trigger[data-v-4d468a92]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border:none;margin-left:10px;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none}.directory-tree-trigger[data-v-4d468a92]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}@media (max-width:768px){.directory-tree-trigger[data-v-4d468a92]{width:2rem;height:2rem}}.upload-folder[data-v-4d468a92] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-4d468a92] .el-input{height:100%}.upload-folder[data-v-4d468a92] .el-input__wrapper{border-radius:12px;backdrop-filter:blur(10px);border:none;height:100%}.quick-toolbar[data-v-4d468a92],.upload-folder[data-v-4d468a92] .el-input__wrapper{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow)}.quick-toolbar[data-v-4d468a92]{position:fixed;bottom:50px;right:30px;display:flex;flex-direction:column;align-items:center;gap:0;z-index:200;padding:6px;border-radius:16px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);transition:background-color .24s ease,box-shadow .24s ease,padding .24s ease}.quick-toolbar-button[data-v-4d468a92]{width:40px;height:40px;border:none;transition:transform .22s ease,background-color .22s ease,box-shadow .22s ease,color .22s ease;margin-left:0;padding:0;border-radius:12px;background-color:transparent;box-shadow:none;color:var(--toolbar-button-color);outline:none}.quick-toolbar-actions[data-v-4d468a92]{display:grid;grid-template-rows:0fr;width:100%;margin-bottom:0;opacity:0;pointer-events:none;transform:translateY(12px);transform-origin:bottom center;transition:grid-template-rows .52s cubic-bezier(.16,1,.3,1),margin-bottom .52s cubic-bezier(.16,1,.3,1),opacity .32s ease,transform .52s cubic-bezier(.16,1,.3,1)}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-4d468a92]{grid-template-rows:1fr;margin-bottom:6px;opacity:1;pointer-events:auto;transform:translateY(0)}.quick-toolbar-actions-inner[data-v-4d468a92]{display:flex;flex-direction:column;align-items:center;gap:6px;min-height:0;overflow:hidden}.quick-toolbar-more.is-active[data-v-4d468a92]{background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-shadow)}.quick-toolbar-more[data-v-4d468a92]{margin-top:6px}.quick-toolbar-icon[data-v-4d468a92]{font-size:16px}.quick-toolbar-toggle-icon[data-v-4d468a92]{transform:rotate(180deg);transition:transform .32s ease}.quick-toolbar-more.is-active .quick-toolbar-toggle-icon[data-v-4d468a92]{transform:rotate(0deg)}.info-container[data-v-4d468a92]:hover,.quick-toolbar-button[data-v-4d468a92]:hover,.toggle-dark-button[data-v-4d468a92]:hover,.upload-method-button[data-v-4d468a92]:hover{transform:scale(1.05);background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.quick-toolbar[data-v-4d468a92]:hover,.upload-folder[data-v-4d468a92]:hover{box-shadow:var(--toolbar-button-shadow-hover)}@media (max-width:768px){.quick-toolbar[data-v-4d468a92]{right:18px;bottom:max(72px,calc(6vh + 20px + env(safe-area-inset-bottom)));padding:5px;border-radius:14px}.quick-toolbar-actions[data-v-4d468a92]{margin-bottom:0}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-4d468a92]{margin-bottom:4px}.quick-toolbar-actions-inner[data-v-4d468a92]{gap:4px}.quick-toolbar-more[data-v-4d468a92]{margin-top:4px}.quick-toolbar-button[data-v-4d468a92]{width:34px;height:34px;border-radius:10px}.quick-toolbar-icon[data-v-4d468a92]{font-size:14px}}[data-v-4d468a92] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-4d468a92]{display:flex;justify-content:center;margin-top:20px}.header[data-v-4d468a92]{display:flex;justify-content:center;align-items:center;padding:15px;margin-top:5vh;color:var(--upload-header-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;position:relative;top:-3vh;transition:all .3s ease}.title[data-v-4d468a92]{font-size:2.25rem;font-weight:400;font-family:Pacifico,Noto Sans SC,sans-serif;color:var(--upload-title-text-color);text-shadow:var(--upload-title-text-shadow);position:relative;padding-bottom:8px;cursor:pointer;transition:transform .4s cubic-bezier(.4,0,.2,1),filter .25s ease;animation:float-4d468a92 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-4d468a92]:hover{transform:scale(1.08) translateY(-3px);filter:drop-shadow(0 0 20px var(--upload-title-hover-glow))}.title[data-v-4d468a92]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:var(--upload-title-underline-bg);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:var(--upload-title-underline-shadow)}.title[data-v-4d468a92]:hover:after{width:80%}.main-title[data-v-4d468a92]{background:var(--upload-main-title-color);background-clip:text;-webkit-background-clip:text;color:transparent;text-decoration:none;display:inline-block;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3));transition:opacity .16s ease}.title:hover .main-title[data-v-4d468a92]{opacity:0}.title[data-v-4d468a92]:hover{color:transparent;text-shadow:none}.title-crayon-text[data-v-4d468a92]{position:absolute;left:50%;top:-1px;z-index:2;width:-moz-max-content;width:max-content;pointer-events:none;white-space:nowrap;color:transparent;opacity:0;background:repeating-linear-gradient(108deg,var(--upload-title-crayon-base) 0 5px,var(--upload-title-crayon-light) 5px 8px,transparent 8px 10px),repeating-linear-gradient(72deg,transparent 0 7px,var(--upload-title-crayon-fleck) 7px 8px,transparent 8px 12px),linear-gradient(90deg,var(--upload-title-crayon-deep),var(--upload-title-crayon-light));background-clip:text;-webkit-background-clip:text;-webkit-text-stroke:.35px var(--upload-title-crayon-edge);text-shadow:-1.2px .4px 0 var(--upload-title-crayon-burr),.9px -.7px 0 hsla(0,0%,100%,.24),1.5px .5px 0 var(--upload-title-crayon-dust),-1.7px -.6px 0 var(--upload-title-crayon-dust);transform:translateX(-50%) rotate(-.8deg);transform-origin:left 68%;clip-path:inset(-10px 100% -10px -10px);filter:saturate(1.08) contrast(1.06)}.title:hover .title-crayon-text[data-v-4d468a92]{animation:crayonWrite-4d468a92 .82s steps(18) forwards,crayonScratch-4d468a92 .16s steps(2) .82s 3}@keyframes float-4d468a92{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes crayonWrite-4d468a92{0%{opacity:0;clip-path:inset(-10px 100% -10px -10px)}12%{opacity:.92}32%{clip-path:inset(-10px 68% -10px -10px)}47%{clip-path:inset(-10px 52% -10px -10px)}63%{clip-path:inset(-10px 34% -10px -10px)}78%{clip-path:inset(-10px 18% -10px -10px)}to{opacity:.92;clip-path:inset(-10px -10px -10px -10px)}}@keyframes crayonScratch-4d468a92{0%,to{transform:translateX(-50%) rotate(-.8deg)}50%{transform:translateX(calc(-50% + 1px)) rotate(-.45deg)}}@media (max-width:768px){.title[data-v-4d468a92]{font-size:1.55rem;letter-spacing:1px}.title[data-v-4d468a92]:hover{transform:scale(1.05) translateY(-2px)}}.upload-home[data-v-4d468a92]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:var(--admin-container-bg-color)}.upload[data-v-4d468a92]{margin-bottom:5px;position:relative;top:-3vh}.footer[data-v-4d468a92]{height:6vh} \ No newline at end of file diff --git a/frontend-dist/css/382.ad3465bc.css.gz b/frontend-dist/css/382.ad3465bc.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..abbc2cbe9355f6bbaab9ecc6e94841335818f9ea GIT binary patch literal 11987 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 delta 19 Ycmdlbze}D=zMF#q1ek<3a&6!T04&S{{r~^~ diff --git a/frontend-dist/css/51.9f054b72.css b/frontend-dist/css/51.1dd65d6c.css similarity index 100% rename from frontend-dist/css/51.9f054b72.css rename to frontend-dist/css/51.1dd65d6c.css diff --git a/frontend-dist/css/51.9f054b72.css.gz b/frontend-dist/css/51.1dd65d6c.css.gz similarity index 95% rename from frontend-dist/css/51.9f054b72.css.gz rename to frontend-dist/css/51.1dd65d6c.css.gz index a29a7bcafe4438fc09b5cd4488748f586ceb87c4..2f23a2ec57de58aef8713da11f8025c5b2675b14 100644 GIT binary patch delta 19 XcmZqSYvJRP@8)0t0Vb}ET))@=BTxgV delta 19 XcmZqSYvJRP@8)0t0Vd&%T))@=BYgw0 diff --git a/frontend-dist/css/518.7aeefd65.css.gz b/frontend-dist/css/518.7aeefd65.css.gz deleted file mode 100644 index b6369f71ba2e4d4d6ee2c8b3ec4d69f20935b53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11396 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 SW9HwExBmliJhb0CAOQetoF*{< diff --git a/frontend-dist/css/529.f6a90dd0.css b/frontend-dist/css/529.6c0a8231.css similarity index 100% rename from frontend-dist/css/529.f6a90dd0.css rename to frontend-dist/css/529.6c0a8231.css diff --git a/frontend-dist/css/529.f6a90dd0.css.gz b/frontend-dist/css/529.6c0a8231.css.gz similarity index 93% rename from frontend-dist/css/529.f6a90dd0.css.gz rename to frontend-dist/css/529.6c0a8231.css.gz index a8da8482089b502da14f574f8fd5b13cff784b97..72b71282fecd3e40d8e4d08a33ae38b6d53cf819 100644 GIT binary patch delta 19 YcmdlPu`_~8zMF#q1emxsa_Q>;05d2A0RR91 delta 19 YcmdlPu`_~8zMF#q1ek<3a_Q>;05eqt3IG5A diff --git a/frontend-dist/css/604.7a66e992.css b/frontend-dist/css/604.7a66e992.css new file mode 100644 index 00000000..17eb982e --- /dev/null +++ b/frontend-dist/css/604.7a66e992.css @@ -0,0 +1 @@ +.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.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-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.login[data-v-3bf86f06]{display:flex;justify-content:center;align-items:center;flex-direction:column;min-height:100vh;height:auto;background:var(--admin-container-bg-color,var(--bg-color));overflow-y:auto;padding:20px 0;box-sizing:border-box;transition:height .35s ease-out,min-height .35s ease-out}.login-title[data-v-3bf86f06]{font-size:2.3rem;margin-bottom:15px;color:var(--login-title-color);font-family:Pacifico,Noto Sans SC,sans-serif;cursor:pointer;transition:all .3s ease;letter-spacing:2px}@media (max-width:768px){.login-title[data-v-3bf86f06]{font-size:1.5rem}}.login-title[data-v-3bf86f06]:focus,.login-title[data-v-3bf86f06]:hover{transform:translateY(-2px);text-shadow:0 0 10px var(--login-title-glow-color,rgba(52,152,219,.5))}.login-container[data-v-3bf86f06]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:auto;height:auto;width:600px;border-radius:12px;box-shadow:var(--login-container-box-shadow);background-color:var(--login-container-bg-color);backdrop-filter:blur(8px);transition:all .3s ease;padding:40px 0;gap:20px;position:relative;z-index:101}@media (max-width:768px){.login-container[data-v-3bf86f06]{width:85vw;padding:25px 0;gap:12px}}.login-container[data-v-3bf86f06]:hover{box-shadow:var(--login-container-hover-box-shadow);transform:translateY(-5px)}.input-container[data-v-3bf86f06]{display:flex;flex-direction:column;align-items:flex-start;width:80%;margin-bottom:15px;position:relative;gap:8px}@media (max-width:768px){.input-container[data-v-3bf86f06]{width:85%;gap:4px;margin-bottom:8px}}.input-wrapper[data-v-3bf86f06]{position:relative;width:100%;display:flex;flex-direction:column;transition:all .3s cubic-bezier(.4,0,.2,1)}.input-icon[data-v-3bf86f06]{margin-right:6px;font-size:1rem}.input-name[data-v-3bf86f06]{font-size:.95rem;font-weight:600;color:var(--login-title-color);text-align:left;transition:all .3s ease;letter-spacing:.5px;position:relative;display:flex;align-items:center;justify-content:flex-start;padding-left:2px}.input-name[data-v-3bf86f06]:after{content:"";position:absolute;left:0;bottom:-2px;width:0;height:2px;background:linear-gradient(90deg,var(--login-input-underline-color,#5b9bd3),var(--login-input-underline-secondary-color,#7ba9d8));transition:width .3s linear;border-radius:1px}.input-container:has(.input-wrapper.focused) .input-name[data-v-3bf86f06]:after,.input-container:hover .input-name[data-v-3bf86f06]:after{width:var(--underline-width,50px)}.input-container:has(.input-wrapper.focused) .input-name[data-v-3bf86f06],.input-container:hover .input-name[data-v-3bf86f06]{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.input-name[data-v-3bf86f06]{font-size:.85rem}}.submit[data-v-3bf86f06]{margin-bottom:10px;width:50%;height:48px;font-size:1.1rem;font-weight:600;letter-spacing:2px;border-radius:12px;background-color:var(--login-submit-btn-bg-color);transition:all .4s cubic-bezier(.4,0,.2,1);border:none;overflow:hidden;position:relative;padding:0;display:flex;justify-content:center;align-items:center}.submit.is-loading[data-v-3bf86f06]{width:48px;border-radius:50%;background-color:transparent!important;box-shadow:none!important;pointer-events:none}.loading-ring[data-v-3bf86f06]{display:inline-block;width:34px;height:34px;border:4px solid transparent;border-radius:50%;border-top-color:var(--login-title-color,#fff);animation:spin-3bf86f06 1s ease-in-out infinite;box-sizing:border-box}@keyframes spin-3bf86f06{to{transform:rotate(1turn)}}@media (max-width:768px){.submit[data-v-3bf86f06]{width:50%}}.submit[data-v-3bf86f06]:not(.is-loading):focus,.submit[data-v-3bf86f06]:not(.is-loading):hover{transform:translateY(-3px) scale(1.05);box-shadow:0 4px 12px rgba(0,0,0,.2)}.submit[data-v-3bf86f06]:disabled{cursor:default;transform:none}.password-input[data-v-3bf86f06]{width:100%;height:50px;position:relative}.password-input[data-v-3bf86f06] .el-input__prefix{color:var(--login-input-icon-color,#909399);font-size:1rem;transition:color .3s ease}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within .el-input__prefix{color:var(--login-input-label-focus-color,#5b9bd3)}.password-input[data-v-3bf86f06] .el-input__wrapper{border-radius:12px;background-color:var(--password-input-bg-color);border:2px solid transparent;box-shadow:0 2px 8px rgba(0,0,0,.1);padding:12px 16px;transition:all .3s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(10px);position:relative;overflow:hidden}.password-input[data-v-3bf86f06] .el-input__wrapper:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);transition:left .5s}.password-input[data-v-3bf86f06] .el-input__wrapper:hover:before{left:100%}.password-input[data-v-3bf86f06] .el-input__wrapper:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,.15);border-color:var(--login-input-underline-color,#5b9bd3)}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within{border-color:var(--login-input-underline-color,#5b9bd3);box-shadow:0 0 0 3px rgba(91,155,211,.1);transform:translateY(-1px)}.password-input[data-v-3bf86f06] .el-input__inner{color:var(--text-color,var(--login-input-text-color,#333));font-size:1rem;font-weight:500;background:transparent;border:none;box-shadow:none}.dark .password-input[data-v-3bf86f06] .el-input__inner,[data-theme=dark] .password-input[data-v-3bf86f06] .el-input__inner{color:var(--text-color,#fff)!important}.password-input[data-v-3bf86f06] .el-input__inner::-moz-placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;-moz-transition:opacity .3s ease;transition:opacity .3s ease}.password-input[data-v-3bf86f06] .el-input__inner::placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;transition:opacity .3s ease}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within .el-input__inner::-moz-placeholder{opacity:.7}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within .el-input__inner::placeholder{opacity:.7}.password-input[data-v-3bf86f06] .el-input__suffix{color:var(--icon-color,#666)}.password-input[data-v-3bf86f06] .el-input__suffix-inner{transition:color .3s ease}.password-input[data-v-3bf86f06] .el-input__wrapper:hover .el-input__suffix-inner{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.password-input[data-v-3bf86f06]{width:100%;height:40px}.password-input[data-v-3bf86f06] .el-input__wrapper{padding:8px 12px}}.footer[data-v-3bf86f06]{position:fixed;bottom:0;width:100vw}.toggle-dark[data-v-3bf86f06]{position:fixed;top:30px;right:30px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px}.toggle-dark[data-v-3bf86f06]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.language-switcher[data-v-3bf86f06]{position:fixed;top:30px;right:80px;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;z-index:100}@media (max-width:768px){.language-switcher[data-v-3bf86f06]{width:2rem;height:2rem}}.language-switcher[data-v-3bf86f06]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)} \ No newline at end of file diff --git a/frontend-dist/css/604.7a66e992.css.gz b/frontend-dist/css/604.7a66e992.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..0011733d528107e55d79ca68232a7520f349c6cd GIT binary patch literal 2447 zcmV;A32^owiwFP!000023e8$=i|e`({wwZ1EW}_LJBhQ2P2obnm%{CrQVs{%mJ@Xy z$wQHQAiKrRj%hK^z+(D3|d4XbB2*j@S_5Ai*%NVAdmM4MC%>>Coi?pmR zNlJyF#~8@pB`QQ5Bq_|^_KcoL4jxg`l2-9=jPQ-;yfm9iOx^&_ zD0%J%j*#s!0ZOx|y4b?1p9N*dNr9)&)>2;^7BSCYi58*1bR9+o6lej$Wsdgl%`fSm zDpoa@@U@86%iZ$(b<`i~sKcbh1c9`q*_-Av!eHD}l9aL>F~DGsPdwgM7b6BJ@CD^V zK8>rW=ZTEk%DIjbVP9u*_*NWBgabe`s|cR>k!2G!r!^B zGz%pAlT3^Jj74^^OJ1~j%>(%Tnw=P@EUqY4g}aw|RM{V??-NMi7t8i^)su?!(r~Rn zTeFQ>YErf6g?@yNZU=<46l&Get3sL|2)f^ws0oR0YW1ILu|9ge*`&)f%D!K9iq)b| z*zuDF)K0zhBZiJmiB|tjN9VkZhNI0-a=ZCz*AK1lj|{V{MB#9|btBou@uN#wp0u1jN!@*yi%e)`JaSX%-dtAi9R9waJ;N&f5qGjviZhU+pBS-)zu9`gk0Q@s zzDoazy6!XLC^uim;iCem#BH+mI?xEAvvpo_lSzhlRxVw@90BD_0A_Y+Zg_bXVTs^7 znj#!Mw2PCx83ffAr(pCrJflvPLDDa3{vvF$7HWCr4uA6y~s>0R}5rLX$PchF&uwY z`@8hJR@m+XV=5r9XtQB!u(nt%{gup#ra3SzP$+>#r&P4eIt^U`kGTAZ{{b^x;EZ~I zr-C|vK*F6r{^oH=IN*rkqF)uJuzHDvbUrRUNLr@4%!9E<6byCQm^X-qNZve6A9Jc- zB^2mi3)wTex~J7BGajPM#(*u@^w>Uyi)iVE(b8LnJI{|?x0bZ=sXP8Y?!}Ksf#vVY zFYVtoA`Mh~Y&TM&?wBvNzP6fHG&BV6R4+Z)Qb&y1pn$u9due%Mi>)&Bg#XkbwbmiE zho*NM&K24QD!l7rGZ&%Bx6%8#4dy_2`f(3;Je!KxZ#GL)jS>S9g(LYb<}W_w07me~BALdW)CZ4(6d(zeP` z>Rw|xO?WgF`{P&pS$JQk5Vn>jM|S(^y-nFHN_hn^0ftA0t?8%US>2zgvLUi zZ8hhwP)?^qRt5zI7*tgj$w)l;o{a!BNUovhDDc^x{wrY>QMN}$f|UEtk}bTgeMho&>jnzVeR1mAk_Tzs&nbZ=y&9A|1 ze872*$Vh6a>tT>Qht6xG`j~@~Ldk2YE+`9jts(6@Fox2#f(#My7ksQJ6OafS#7Nbw zCkCzp^p1$&`i+WjWC3hcps}{aT=`0tEpzAUx3TBCna5f3jj5wo1g*eqj`zM5Md2op z;G-U;^9qwjL?`UDrw%3sCRm{H{^R!h8~P|1JRxbNGE#U0kOgA_tLcdqv>LE0Xc$D7+qcfr<%tTGkwMHMp+Fia9Fa zsT3Aq)6P^u&d-$PI#o^CMFA9hGC%TC;SMLqN2PxB%>dv?hYzcEN77+qpf2 zVkZqnXiX?TA%`gm`X0d@~KW>^(!OBkvj|owIf;FaYKCc+T>(;|>tJTUKWI7v$MS=Z6 zKs>D08XEQRgr12zpH{-tBx)f3SIOeL^JRum2%!Z!pSN%vt2bFy2{Uw{W!^i=TJOGF zYD8%JBP*Jt-HYdMUAOzS$T|r0d$XA_d@}Rw8SVaOihY&b_iE|Xt<}SN|Mkx}?h8)h zr=kx6Y=E-aY}_aK0UaJ+i(^cWI&s#Qwx^%Rjrv=JCvZ`XNwx+9Hy?w|4A}IiGp6ee z?62T%zIkCNGumAa5XGLQv8HZoScKkJ27tPe808 ze4JNx@(Y$;^D!fj9tgWLpEo>e*ljQlHUEE%IrBxpv)>rl-%!oG0=RG6$xjRJ@BKnA N_%G;(+m^s8000Ei#N7Y@ literal 0 HcmV?d00001 diff --git a/frontend-dist/css/604.8321f2db.css b/frontend-dist/css/604.8321f2db.css deleted file mode 100644 index ab25ee2b..00000000 --- a/frontend-dist/css/604.8321f2db.css +++ /dev/null @@ -1 +0,0 @@ -.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.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-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.login[data-v-604cfcf8]{display:flex;justify-content:center;align-items:center;flex-direction:column;min-height:100vh;height:auto;background:var(--admin-container-bg-color,var(--bg-color));overflow-y:auto;padding:20px 0;box-sizing:border-box;transition:height .35s ease-out,min-height .35s ease-out}.login-title[data-v-604cfcf8]{font-size:2.3rem;margin-bottom:15px;color:var(--login-title-color);font-family:Righteous,Noto Sans SC,sans-serif;cursor:pointer;transition:all .3s ease;letter-spacing:2px}@media (max-width:768px){.login-title[data-v-604cfcf8]{font-size:1.5rem}}.login-title[data-v-604cfcf8]:focus,.login-title[data-v-604cfcf8]:hover{transform:translateY(-2px);text-shadow:0 0 10px var(--login-title-glow-color,rgba(52,152,219,.5))}.login-container[data-v-604cfcf8]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:auto;height:auto;width:600px;border-radius:12px;box-shadow:var(--login-container-box-shadow);background-color:var(--login-container-bg-color);backdrop-filter:blur(8px);transition:all .3s ease;padding:40px 0;gap:20px;position:relative;z-index:101}@media (max-width:768px){.login-container[data-v-604cfcf8]{width:85vw;padding:25px 0;gap:12px}}.login-container[data-v-604cfcf8]:hover{box-shadow:var(--login-container-hover-box-shadow);transform:translateY(-5px)}.input-container[data-v-604cfcf8]{display:flex;flex-direction:column;align-items:flex-start;width:80%;margin-bottom:15px;position:relative;gap:8px}@media (max-width:768px){.input-container[data-v-604cfcf8]{width:85%;gap:4px;margin-bottom:8px}}.input-wrapper[data-v-604cfcf8]{position:relative;width:100%;display:flex;flex-direction:column;transition:all .3s cubic-bezier(.4,0,.2,1)}.input-icon[data-v-604cfcf8]{margin-right:6px;font-size:1rem}.input-name[data-v-604cfcf8]{font-size:.95rem;font-weight:600;color:var(--login-title-color);text-align:left;transition:all .3s ease;letter-spacing:.5px;position:relative;display:flex;align-items:center;justify-content:flex-start;padding-left:2px}.input-name[data-v-604cfcf8]:after{content:"";position:absolute;left:0;bottom:-2px;width:0;height:2px;background:linear-gradient(90deg,var(--login-input-underline-color,#5b9bd3),var(--login-input-underline-secondary-color,#7ba9d8));transition:width .3s linear;border-radius:1px}.input-container:has(.input-wrapper.focused) .input-name[data-v-604cfcf8]:after,.input-container:hover .input-name[data-v-604cfcf8]:after{width:var(--underline-width,50px)}.input-container:has(.input-wrapper.focused) .input-name[data-v-604cfcf8],.input-container:hover .input-name[data-v-604cfcf8]{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.input-name[data-v-604cfcf8]{font-size:.85rem}}.submit[data-v-604cfcf8]{margin-bottom:10px;width:50%;height:48px;font-size:1.1rem;font-weight:600;letter-spacing:2px;border-radius:12px;background-color:var(--login-submit-btn-bg-color);transition:all .4s cubic-bezier(.4,0,.2,1);border:none;overflow:hidden;position:relative;padding:0;display:flex;justify-content:center;align-items:center}.submit.is-loading[data-v-604cfcf8]{width:48px;border-radius:50%;background-color:transparent!important;box-shadow:none!important;pointer-events:none}.loading-ring[data-v-604cfcf8]{display:inline-block;width:34px;height:34px;border:4px solid transparent;border-radius:50%;border-top-color:var(--login-title-color,#fff);animation:spin-604cfcf8 1s ease-in-out infinite;box-sizing:border-box}@keyframes spin-604cfcf8{to{transform:rotate(1turn)}}@media (max-width:768px){.submit[data-v-604cfcf8]{width:50%}}.submit[data-v-604cfcf8]:not(.is-loading):focus,.submit[data-v-604cfcf8]:not(.is-loading):hover{transform:translateY(-3px) scale(1.05);box-shadow:0 4px 12px rgba(0,0,0,.2)}.submit[data-v-604cfcf8]:disabled{cursor:default;transform:none}.password-input[data-v-604cfcf8]{width:100%;height:50px;position:relative}.password-input[data-v-604cfcf8] .el-input__prefix{color:var(--login-input-icon-color,#909399);font-size:1rem;transition:color .3s ease}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within .el-input__prefix{color:var(--login-input-label-focus-color,#5b9bd3)}.password-input[data-v-604cfcf8] .el-input__wrapper{border-radius:12px;background-color:var(--password-input-bg-color);border:2px solid transparent;box-shadow:0 2px 8px rgba(0,0,0,.1);padding:12px 16px;transition:all .3s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(10px);position:relative;overflow:hidden}.password-input[data-v-604cfcf8] .el-input__wrapper:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);transition:left .5s}.password-input[data-v-604cfcf8] .el-input__wrapper:hover:before{left:100%}.password-input[data-v-604cfcf8] .el-input__wrapper:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,.15);border-color:var(--login-input-underline-color,#5b9bd3)}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within{border-color:var(--login-input-underline-color,#5b9bd3);box-shadow:0 0 0 3px rgba(91,155,211,.1);transform:translateY(-1px)}.password-input[data-v-604cfcf8] .el-input__inner{color:var(--text-color,var(--login-input-text-color,#333));font-size:1rem;font-weight:500;background:transparent;border:none;box-shadow:none}.dark .password-input[data-v-604cfcf8] .el-input__inner,[data-theme=dark] .password-input[data-v-604cfcf8] .el-input__inner{color:var(--text-color,#fff)!important}.password-input[data-v-604cfcf8] .el-input__inner::-moz-placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;-moz-transition:opacity .3s ease;transition:opacity .3s ease}.password-input[data-v-604cfcf8] .el-input__inner::placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;transition:opacity .3s ease}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within .el-input__inner::-moz-placeholder{opacity:.7}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within .el-input__inner::placeholder{opacity:.7}.password-input[data-v-604cfcf8] .el-input__suffix{color:var(--icon-color,#666)}.password-input[data-v-604cfcf8] .el-input__suffix-inner{transition:color .3s ease}.password-input[data-v-604cfcf8] .el-input__wrapper:hover .el-input__suffix-inner{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.password-input[data-v-604cfcf8]{width:100%;height:40px}.password-input[data-v-604cfcf8] .el-input__wrapper{padding:8px 12px}}.footer[data-v-604cfcf8]{position:fixed;bottom:0;width:100vw}.toggle-dark[data-v-604cfcf8]{position:fixed;top:30px;right:30px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px}.toggle-dark[data-v-604cfcf8]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.language-switcher[data-v-604cfcf8]{position:fixed;top:30px;right:80px;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;z-index:100}@media (max-width:768px){.language-switcher[data-v-604cfcf8]{width:2rem;height:2rem}}.language-switcher[data-v-604cfcf8]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)} \ No newline at end of file diff --git a/frontend-dist/css/604.8321f2db.css.gz b/frontend-dist/css/604.8321f2db.css.gz deleted file mode 100644 index af25cda44fb0afd1133a12dcdb8e7280754e0731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2447 zcmV;A32^owiwFP!000026U|!PkE^;7|5xZeS}8~vK@zeFsM3}C-iO}4RMpXu0h72( zY-Br|?1}QfSN;IZXR1eW;~u5&&O{D{0i<7C@2+({X2&Of_D&XVU|L;`+m(a zuS)n47bUtR|2c7iiw}@dA`lUAhKN8cfhFD(fCW18dg+XFafrhpct0l@Eh&rNAzJ`o zodpEC2%sLiNkNGK9REad3E3Vc;Ed8YEWn8)1~@8FCSpPfO2Co+9Io~kZoeNj%hK^z+(D3|d4XbB2*j@S_5Ai*%NVAdmM4MC%>>Coi?pmR zNlJyF#~8@pB`QQ5Bq_|^_KcoL4jxg`l2-9=jPQ-;yfm9iOx^&_ zD0%J%j*#s!0ZOx|y4b?1p9N*dNr9)&)>2;^7BSCYi58*1bR9+o6lej$Wsdgl%`fSm zDpoa@@U@86%iZ$(b<`i~sKcbh1c9`q*_-Av!eHD}l9aL>F~DGsPdwgM7b6BJ@CD^V zK8>rW=ZTEk%DIjbVP9u*_*NWBgabe`s|cR>k!2G!r!^B zGz%pAlT3^Jj74^^OJ1~j%>(%Tnw=P@EUqY4g}aw|RM{V??-NMi7t8i^)su?!(r~Rn zTeFQ>YErf6g?@yNZU=<46l&Get3sL|2)f^ws0oR0YW1ILu|9ge*`&)f%D!K9iq)b| z*zuDF)K0zhBZiJmiB|tjN9VkZhNI0-a=ZCz*AK1lj|{V{MB#9|btBou@uN#wp0u1jN!@*yi%e)`JaSX%-dtAi9R9waJ;N&f5qGjviZhU+pBS-)zu9`gk0Q@s zzDoazy6!XLC^uim;iCem#BH+mI?xEAvvpo_lSzhlRxVw@90BD_0A_Y+Zg_bXVTs^7 znj#!Mw2PCx83ffAr(pCrJflvPLDDa3{#WF%?bF?vBnLTWDAR#W%hQo0M@)c85wdYR)cHaRYc&KW z3Schj>WH z{ayN9D{S|HF%=M4wArvVSX(TX{z~RV(;S!W;&YyYb^;U^%>U zO#62YNdwg%+nrRXTjooxudSvP4h?}j)l3hz)FGobDCBPNURs{mVyg^2;Xidut#wT8 zp=sWRgN3$(3h%nu%tdJOZS;O_<2h>1mNvTGzfR*=ca5ogBHN_nz8F;(nbJvh62Is~ zwznt>E+7-eE4IPQSl$@gTAE@z8_IWOt?m4xn60Zz@8qpAv}SW=u&TzG3?*x)EXf1b z81cF;U|M^D=PzY%V??oQTPueVo$1c6x>#esP^K!g*&Y&&B{qMj;ITbf+XTVAysdJS zy4P5a6CO>){`l2?7T;S=Wa32+q*RYNqxK^sy?SP6jq%2&d~F4n$O1C3ml+Kap}~-6 zTTV-KA~|9ThUldIElPK3zH(A^WH|y{2%NZ{3M0p_ZkeV_T~5F{pKJ^;D~#oD#WTC+jm(UWbmasY{rm5~y=~7kD=#-3`I5 z!4~|K93YSpXXqXsmBBSH6;E%iOv8ZS1*j26C2sW9sM?K`StuFR_9DZL_7uTt$$U)@VUJ*F*ie!8_3ao=-679#GnkG+{Bf_T?)GuU>no0-#LiSl!bF+hCzS;EsBdR?NOohZ0QvKzyygqqw zS1tLss|y7lneYPE6)na+k`QDA=& z5D%-hhDJR+p@-tmrB>LTG``=Pew^>Qz=%!VDc~nfH#e*1Ip4 z8WGz5$cpA@_u~0m*X@2TvJL|M;%sIPpUgaaM!Wx+VqYcqy;?eTYxT6=fBiF#`+}4B zspx|M8=!198}|u*K!?ZI;uzDTPMr0n?dj)nqy8A-30zcTlC8nO&DUTv12+BbjOls< z`!l$kZ{8TnjCPlUL=P(oc=fDo)sCTOUzAS)H$iEcLI%>45R`O)TW|E*qqIlZ6A)_% zALmt_{Dh^~e9XwB2g2^m_YIF4b{mXC&Ho=`&U_N^>_-OnM^rPf0Pfp%^4o&@d%w^N N{tM{z7_q@B002W@x`zM& diff --git a/frontend-dist/css/718.8a9bac1a.css b/frontend-dist/css/718.d0974d1c.css similarity index 100% rename from frontend-dist/css/718.8a9bac1a.css rename to frontend-dist/css/718.d0974d1c.css diff --git a/frontend-dist/css/718.8a9bac1a.css.gz b/frontend-dist/css/718.d0974d1c.css.gz similarity index 99% rename from frontend-dist/css/718.8a9bac1a.css.gz rename to frontend-dist/css/718.d0974d1c.css.gz index a3e2b08a7bf7d3fc5849d36fcbcd0210cb871bd9..be76d36c9eb6272dab6b2a83d99aa65196885584 100644 GIT binary patch delta 19 Ycmdn&yxEyczMF#q1emxsa;;PZ05ER^IsgCw delta 19 Ycmdn&yxEyczMF#q1ek<3a;;PZ05F^cLjV8( diff --git a/frontend-dist/css/728.7a66e992.css b/frontend-dist/css/728.7a66e992.css new file mode 100644 index 00000000..17eb982e --- /dev/null +++ b/frontend-dist/css/728.7a66e992.css @@ -0,0 +1 @@ +.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.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-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.login[data-v-3bf86f06]{display:flex;justify-content:center;align-items:center;flex-direction:column;min-height:100vh;height:auto;background:var(--admin-container-bg-color,var(--bg-color));overflow-y:auto;padding:20px 0;box-sizing:border-box;transition:height .35s ease-out,min-height .35s ease-out}.login-title[data-v-3bf86f06]{font-size:2.3rem;margin-bottom:15px;color:var(--login-title-color);font-family:Pacifico,Noto Sans SC,sans-serif;cursor:pointer;transition:all .3s ease;letter-spacing:2px}@media (max-width:768px){.login-title[data-v-3bf86f06]{font-size:1.5rem}}.login-title[data-v-3bf86f06]:focus,.login-title[data-v-3bf86f06]:hover{transform:translateY(-2px);text-shadow:0 0 10px var(--login-title-glow-color,rgba(52,152,219,.5))}.login-container[data-v-3bf86f06]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:auto;height:auto;width:600px;border-radius:12px;box-shadow:var(--login-container-box-shadow);background-color:var(--login-container-bg-color);backdrop-filter:blur(8px);transition:all .3s ease;padding:40px 0;gap:20px;position:relative;z-index:101}@media (max-width:768px){.login-container[data-v-3bf86f06]{width:85vw;padding:25px 0;gap:12px}}.login-container[data-v-3bf86f06]:hover{box-shadow:var(--login-container-hover-box-shadow);transform:translateY(-5px)}.input-container[data-v-3bf86f06]{display:flex;flex-direction:column;align-items:flex-start;width:80%;margin-bottom:15px;position:relative;gap:8px}@media (max-width:768px){.input-container[data-v-3bf86f06]{width:85%;gap:4px;margin-bottom:8px}}.input-wrapper[data-v-3bf86f06]{position:relative;width:100%;display:flex;flex-direction:column;transition:all .3s cubic-bezier(.4,0,.2,1)}.input-icon[data-v-3bf86f06]{margin-right:6px;font-size:1rem}.input-name[data-v-3bf86f06]{font-size:.95rem;font-weight:600;color:var(--login-title-color);text-align:left;transition:all .3s ease;letter-spacing:.5px;position:relative;display:flex;align-items:center;justify-content:flex-start;padding-left:2px}.input-name[data-v-3bf86f06]:after{content:"";position:absolute;left:0;bottom:-2px;width:0;height:2px;background:linear-gradient(90deg,var(--login-input-underline-color,#5b9bd3),var(--login-input-underline-secondary-color,#7ba9d8));transition:width .3s linear;border-radius:1px}.input-container:has(.input-wrapper.focused) .input-name[data-v-3bf86f06]:after,.input-container:hover .input-name[data-v-3bf86f06]:after{width:var(--underline-width,50px)}.input-container:has(.input-wrapper.focused) .input-name[data-v-3bf86f06],.input-container:hover .input-name[data-v-3bf86f06]{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.input-name[data-v-3bf86f06]{font-size:.85rem}}.submit[data-v-3bf86f06]{margin-bottom:10px;width:50%;height:48px;font-size:1.1rem;font-weight:600;letter-spacing:2px;border-radius:12px;background-color:var(--login-submit-btn-bg-color);transition:all .4s cubic-bezier(.4,0,.2,1);border:none;overflow:hidden;position:relative;padding:0;display:flex;justify-content:center;align-items:center}.submit.is-loading[data-v-3bf86f06]{width:48px;border-radius:50%;background-color:transparent!important;box-shadow:none!important;pointer-events:none}.loading-ring[data-v-3bf86f06]{display:inline-block;width:34px;height:34px;border:4px solid transparent;border-radius:50%;border-top-color:var(--login-title-color,#fff);animation:spin-3bf86f06 1s ease-in-out infinite;box-sizing:border-box}@keyframes spin-3bf86f06{to{transform:rotate(1turn)}}@media (max-width:768px){.submit[data-v-3bf86f06]{width:50%}}.submit[data-v-3bf86f06]:not(.is-loading):focus,.submit[data-v-3bf86f06]:not(.is-loading):hover{transform:translateY(-3px) scale(1.05);box-shadow:0 4px 12px rgba(0,0,0,.2)}.submit[data-v-3bf86f06]:disabled{cursor:default;transform:none}.password-input[data-v-3bf86f06]{width:100%;height:50px;position:relative}.password-input[data-v-3bf86f06] .el-input__prefix{color:var(--login-input-icon-color,#909399);font-size:1rem;transition:color .3s ease}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within .el-input__prefix{color:var(--login-input-label-focus-color,#5b9bd3)}.password-input[data-v-3bf86f06] .el-input__wrapper{border-radius:12px;background-color:var(--password-input-bg-color);border:2px solid transparent;box-shadow:0 2px 8px rgba(0,0,0,.1);padding:12px 16px;transition:all .3s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(10px);position:relative;overflow:hidden}.password-input[data-v-3bf86f06] .el-input__wrapper:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);transition:left .5s}.password-input[data-v-3bf86f06] .el-input__wrapper:hover:before{left:100%}.password-input[data-v-3bf86f06] .el-input__wrapper:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,.15);border-color:var(--login-input-underline-color,#5b9bd3)}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within{border-color:var(--login-input-underline-color,#5b9bd3);box-shadow:0 0 0 3px rgba(91,155,211,.1);transform:translateY(-1px)}.password-input[data-v-3bf86f06] .el-input__inner{color:var(--text-color,var(--login-input-text-color,#333));font-size:1rem;font-weight:500;background:transparent;border:none;box-shadow:none}.dark .password-input[data-v-3bf86f06] .el-input__inner,[data-theme=dark] .password-input[data-v-3bf86f06] .el-input__inner{color:var(--text-color,#fff)!important}.password-input[data-v-3bf86f06] .el-input__inner::-moz-placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;-moz-transition:opacity .3s ease;transition:opacity .3s ease}.password-input[data-v-3bf86f06] .el-input__inner::placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;transition:opacity .3s ease}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within .el-input__inner::-moz-placeholder{opacity:.7}.password-input[data-v-3bf86f06] .el-input__wrapper:focus-within .el-input__inner::placeholder{opacity:.7}.password-input[data-v-3bf86f06] .el-input__suffix{color:var(--icon-color,#666)}.password-input[data-v-3bf86f06] .el-input__suffix-inner{transition:color .3s ease}.password-input[data-v-3bf86f06] .el-input__wrapper:hover .el-input__suffix-inner{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.password-input[data-v-3bf86f06]{width:100%;height:40px}.password-input[data-v-3bf86f06] .el-input__wrapper{padding:8px 12px}}.footer[data-v-3bf86f06]{position:fixed;bottom:0;width:100vw}.toggle-dark[data-v-3bf86f06]{position:fixed;top:30px;right:30px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px}.toggle-dark[data-v-3bf86f06]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.language-switcher[data-v-3bf86f06]{position:fixed;top:30px;right:80px;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;z-index:100}@media (max-width:768px){.language-switcher[data-v-3bf86f06]{width:2rem;height:2rem}}.language-switcher[data-v-3bf86f06]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)} \ No newline at end of file diff --git a/frontend-dist/css/728.7a66e992.css.gz b/frontend-dist/css/728.7a66e992.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..0011733d528107e55d79ca68232a7520f349c6cd GIT binary patch literal 2447 zcmV;A32^owiwFP!000023e8$=i|e`({wwZ1EW}_LJBhQ2P2obnm%{CrQVs{%mJ@Xy z$wQHQAiKrRj%hK^z+(D3|d4XbB2*j@S_5Ai*%NVAdmM4MC%>>Coi?pmR zNlJyF#~8@pB`QQ5Bq_|^_KcoL4jxg`l2-9=jPQ-;yfm9iOx^&_ zD0%J%j*#s!0ZOx|y4b?1p9N*dNr9)&)>2;^7BSCYi58*1bR9+o6lej$Wsdgl%`fSm zDpoa@@U@86%iZ$(b<`i~sKcbh1c9`q*_-Av!eHD}l9aL>F~DGsPdwgM7b6BJ@CD^V zK8>rW=ZTEk%DIjbVP9u*_*NWBgabe`s|cR>k!2G!r!^B zGz%pAlT3^Jj74^^OJ1~j%>(%Tnw=P@EUqY4g}aw|RM{V??-NMi7t8i^)su?!(r~Rn zTeFQ>YErf6g?@yNZU=<46l&Get3sL|2)f^ws0oR0YW1ILu|9ge*`&)f%D!K9iq)b| z*zuDF)K0zhBZiJmiB|tjN9VkZhNI0-a=ZCz*AK1lj|{V{MB#9|btBou@uN#wp0u1jN!@*yi%e)`JaSX%-dtAi9R9waJ;N&f5qGjviZhU+pBS-)zu9`gk0Q@s zzDoazy6!XLC^uim;iCem#BH+mI?xEAvvpo_lSzhlRxVw@90BD_0A_Y+Zg_bXVTs^7 znj#!Mw2PCx83ffAr(pCrJflvPLDDa3{vvF$7HWCr4uA6y~s>0R}5rLX$PchF&uwY z`@8hJR@m+XV=5r9XtQB!u(nt%{gup#ra3SzP$+>#r&P4eIt^U`kGTAZ{{b^x;EZ~I zr-C|vK*F6r{^oH=IN*rkqF)uJuzHDvbUrRUNLr@4%!9E<6byCQm^X-qNZve6A9Jc- zB^2mi3)wTex~J7BGajPM#(*u@^w>Uyi)iVE(b8LnJI{|?x0bZ=sXP8Y?!}Ksf#vVY zFYVtoA`Mh~Y&TM&?wBvNzP6fHG&BV6R4+Z)Qb&y1pn$u9due%Mi>)&Bg#XkbwbmiE zho*NM&K24QD!l7rGZ&%Bx6%8#4dy_2`f(3;Je!KxZ#GL)jS>S9g(LYb<}W_w07me~BALdW)CZ4(6d(zeP` z>Rw|xO?WgF`{P&pS$JQk5Vn>jM|S(^y-nFHN_hn^0ftA0t?8%US>2zgvLUi zZ8hhwP)?^qRt5zI7*tgj$w)l;o{a!BNUovhDDc^x{wrY>QMN}$f|UEtk}bTgeMho&>jnzVeR1mAk_Tzs&nbZ=y&9A|1 ze872*$Vh6a>tT>Qht6xG`j~@~Ldk2YE+`9jts(6@Fox2#f(#My7ksQJ6OafS#7Nbw zCkCzp^p1$&`i+WjWC3hcps}{aT=`0tEpzAUx3TBCna5f3jj5wo1g*eqj`zM5Md2op z;G-U;^9qwjL?`UDrw%3sCRm{H{^R!h8~P|1JRxbNGE#U0kOgA_tLcdqv>LE0Xc$D7+qcfr<%tTGkwMHMp+Fia9Fa zsT3Aq)6P^u&d-$PI#o^CMFA9hGC%TC;SMLqN2PxB%>dv?hYzcEN77+qpf2 zVkZqnXiX?TA%`gm`X0d@~KW>^(!OBkvj|owIf;FaYKCc+T>(;|>tJTUKWI7v$MS=Z6 zKs>D08XEQRgr12zpH{-tBx)f3SIOeL^JRum2%!Z!pSN%vt2bFy2{Uw{W!^i=TJOGF zYD8%JBP*Jt-HYdMUAOzS$T|r0d$XA_d@}Rw8SVaOihY&b_iE|Xt<}SN|Mkx}?h8)h zr=kx6Y=E-aY}_aK0UaJ+i(^cWI&s#Qwx^%Rjrv=JCvZ`XNwx+9Hy?w|4A}IiGp6ee z?62T%zIkCNGumAa5XGLQv8HZoScKkJ27tPe808 ze4JNx@(Y$;^D!fj9tgWLpEo>e*ljQlHUEE%IrBxpv)>rl-%!oG0=RG6$xjRJ@BKnA N_%G;(+m^s8000Ei#N7Y@ literal 0 HcmV?d00001 diff --git a/frontend-dist/css/728.8321f2db.css b/frontend-dist/css/728.8321f2db.css deleted file mode 100644 index ab25ee2b..00000000 --- a/frontend-dist/css/728.8321f2db.css +++ /dev/null @@ -1 +0,0 @@ -.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.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-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.login[data-v-604cfcf8]{display:flex;justify-content:center;align-items:center;flex-direction:column;min-height:100vh;height:auto;background:var(--admin-container-bg-color,var(--bg-color));overflow-y:auto;padding:20px 0;box-sizing:border-box;transition:height .35s ease-out,min-height .35s ease-out}.login-title[data-v-604cfcf8]{font-size:2.3rem;margin-bottom:15px;color:var(--login-title-color);font-family:Righteous,Noto Sans SC,sans-serif;cursor:pointer;transition:all .3s ease;letter-spacing:2px}@media (max-width:768px){.login-title[data-v-604cfcf8]{font-size:1.5rem}}.login-title[data-v-604cfcf8]:focus,.login-title[data-v-604cfcf8]:hover{transform:translateY(-2px);text-shadow:0 0 10px var(--login-title-glow-color,rgba(52,152,219,.5))}.login-container[data-v-604cfcf8]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:auto;height:auto;width:600px;border-radius:12px;box-shadow:var(--login-container-box-shadow);background-color:var(--login-container-bg-color);backdrop-filter:blur(8px);transition:all .3s ease;padding:40px 0;gap:20px;position:relative;z-index:101}@media (max-width:768px){.login-container[data-v-604cfcf8]{width:85vw;padding:25px 0;gap:12px}}.login-container[data-v-604cfcf8]:hover{box-shadow:var(--login-container-hover-box-shadow);transform:translateY(-5px)}.input-container[data-v-604cfcf8]{display:flex;flex-direction:column;align-items:flex-start;width:80%;margin-bottom:15px;position:relative;gap:8px}@media (max-width:768px){.input-container[data-v-604cfcf8]{width:85%;gap:4px;margin-bottom:8px}}.input-wrapper[data-v-604cfcf8]{position:relative;width:100%;display:flex;flex-direction:column;transition:all .3s cubic-bezier(.4,0,.2,1)}.input-icon[data-v-604cfcf8]{margin-right:6px;font-size:1rem}.input-name[data-v-604cfcf8]{font-size:.95rem;font-weight:600;color:var(--login-title-color);text-align:left;transition:all .3s ease;letter-spacing:.5px;position:relative;display:flex;align-items:center;justify-content:flex-start;padding-left:2px}.input-name[data-v-604cfcf8]:after{content:"";position:absolute;left:0;bottom:-2px;width:0;height:2px;background:linear-gradient(90deg,var(--login-input-underline-color,#5b9bd3),var(--login-input-underline-secondary-color,#7ba9d8));transition:width .3s linear;border-radius:1px}.input-container:has(.input-wrapper.focused) .input-name[data-v-604cfcf8]:after,.input-container:hover .input-name[data-v-604cfcf8]:after{width:var(--underline-width,50px)}.input-container:has(.input-wrapper.focused) .input-name[data-v-604cfcf8],.input-container:hover .input-name[data-v-604cfcf8]{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.input-name[data-v-604cfcf8]{font-size:.85rem}}.submit[data-v-604cfcf8]{margin-bottom:10px;width:50%;height:48px;font-size:1.1rem;font-weight:600;letter-spacing:2px;border-radius:12px;background-color:var(--login-submit-btn-bg-color);transition:all .4s cubic-bezier(.4,0,.2,1);border:none;overflow:hidden;position:relative;padding:0;display:flex;justify-content:center;align-items:center}.submit.is-loading[data-v-604cfcf8]{width:48px;border-radius:50%;background-color:transparent!important;box-shadow:none!important;pointer-events:none}.loading-ring[data-v-604cfcf8]{display:inline-block;width:34px;height:34px;border:4px solid transparent;border-radius:50%;border-top-color:var(--login-title-color,#fff);animation:spin-604cfcf8 1s ease-in-out infinite;box-sizing:border-box}@keyframes spin-604cfcf8{to{transform:rotate(1turn)}}@media (max-width:768px){.submit[data-v-604cfcf8]{width:50%}}.submit[data-v-604cfcf8]:not(.is-loading):focus,.submit[data-v-604cfcf8]:not(.is-loading):hover{transform:translateY(-3px) scale(1.05);box-shadow:0 4px 12px rgba(0,0,0,.2)}.submit[data-v-604cfcf8]:disabled{cursor:default;transform:none}.password-input[data-v-604cfcf8]{width:100%;height:50px;position:relative}.password-input[data-v-604cfcf8] .el-input__prefix{color:var(--login-input-icon-color,#909399);font-size:1rem;transition:color .3s ease}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within .el-input__prefix{color:var(--login-input-label-focus-color,#5b9bd3)}.password-input[data-v-604cfcf8] .el-input__wrapper{border-radius:12px;background-color:var(--password-input-bg-color);border:2px solid transparent;box-shadow:0 2px 8px rgba(0,0,0,.1);padding:12px 16px;transition:all .3s cubic-bezier(.4,0,.2,1);backdrop-filter:blur(10px);position:relative;overflow:hidden}.password-input[data-v-604cfcf8] .el-input__wrapper:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);transition:left .5s}.password-input[data-v-604cfcf8] .el-input__wrapper:hover:before{left:100%}.password-input[data-v-604cfcf8] .el-input__wrapper:hover{transform:translateY(-2px);box-shadow:0 4px 16px rgba(0,0,0,.15);border-color:var(--login-input-underline-color,#5b9bd3)}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within{border-color:var(--login-input-underline-color,#5b9bd3);box-shadow:0 0 0 3px rgba(91,155,211,.1);transform:translateY(-1px)}.password-input[data-v-604cfcf8] .el-input__inner{color:var(--text-color,var(--login-input-text-color,#333));font-size:1rem;font-weight:500;background:transparent;border:none;box-shadow:none}.dark .password-input[data-v-604cfcf8] .el-input__inner,[data-theme=dark] .password-input[data-v-604cfcf8] .el-input__inner{color:var(--text-color,#fff)!important}.password-input[data-v-604cfcf8] .el-input__inner::-moz-placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;-moz-transition:opacity .3s ease;transition:opacity .3s ease}.password-input[data-v-604cfcf8] .el-input__inner::placeholder{color:var(--placeholder-color,var(--text-color-secondary,hsla(0,0%,59%,.8)));font-weight:400;transition:opacity .3s ease}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within .el-input__inner::-moz-placeholder{opacity:.7}.password-input[data-v-604cfcf8] .el-input__wrapper:focus-within .el-input__inner::placeholder{opacity:.7}.password-input[data-v-604cfcf8] .el-input__suffix{color:var(--icon-color,#666)}.password-input[data-v-604cfcf8] .el-input__suffix-inner{transition:color .3s ease}.password-input[data-v-604cfcf8] .el-input__wrapper:hover .el-input__suffix-inner{color:var(--login-input-label-focus-color,#5b9bd3)}@media (max-width:768px){.password-input[data-v-604cfcf8]{width:100%;height:40px}.password-input[data-v-604cfcf8] .el-input__wrapper{padding:8px 12px}}.footer[data-v-604cfcf8]{position:fixed;bottom:0;width:100vw}.toggle-dark[data-v-604cfcf8]{position:fixed;top:30px;right:30px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px}.toggle-dark[data-v-604cfcf8]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.language-switcher[data-v-604cfcf8]{position:fixed;top:30px;right:80px;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;z-index:100}@media (max-width:768px){.language-switcher[data-v-604cfcf8]{width:2rem;height:2rem}}.language-switcher[data-v-604cfcf8]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)} \ No newline at end of file diff --git a/frontend-dist/css/728.8321f2db.css.gz b/frontend-dist/css/728.8321f2db.css.gz deleted file mode 100644 index af25cda44fb0afd1133a12dcdb8e7280754e0731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2447 zcmV;A32^owiwFP!000026U|!PkE^;7|5xZeS}8~vK@zeFsM3}C-iO}4RMpXu0h72( zY-Br|?1}QfSN;IZXR1eW;~u5&&O{D{0i<7C@2+({X2&Of_D&XVU|L;`+m(a zuS)n47bUtR|2c7iiw}@dA`lUAhKN8cfhFD(fCW18dg+XFafrhpct0l@Eh&rNAzJ`o zodpEC2%sLiNkNGK9REad3E3Vc;Ed8YEWn8)1~@8FCSpPfO2Co+9Io~kZoeNj%hK^z+(D3|d4XbB2*j@S_5Ai*%NVAdmM4MC%>>Coi?pmR zNlJyF#~8@pB`QQ5Bq_|^_KcoL4jxg`l2-9=jPQ-;yfm9iOx^&_ zD0%J%j*#s!0ZOx|y4b?1p9N*dNr9)&)>2;^7BSCYi58*1bR9+o6lej$Wsdgl%`fSm zDpoa@@U@86%iZ$(b<`i~sKcbh1c9`q*_-Av!eHD}l9aL>F~DGsPdwgM7b6BJ@CD^V zK8>rW=ZTEk%DIjbVP9u*_*NWBgabe`s|cR>k!2G!r!^B zGz%pAlT3^Jj74^^OJ1~j%>(%Tnw=P@EUqY4g}aw|RM{V??-NMi7t8i^)su?!(r~Rn zTeFQ>YErf6g?@yNZU=<46l&Get3sL|2)f^ws0oR0YW1ILu|9ge*`&)f%D!K9iq)b| z*zuDF)K0zhBZiJmiB|tjN9VkZhNI0-a=ZCz*AK1lj|{V{MB#9|btBou@uN#wp0u1jN!@*yi%e)`JaSX%-dtAi9R9waJ;N&f5qGjviZhU+pBS-)zu9`gk0Q@s zzDoazy6!XLC^uim;iCem#BH+mI?xEAvvpo_lSzhlRxVw@90BD_0A_Y+Zg_bXVTs^7 znj#!Mw2PCx83ffAr(pCrJflvPLDDa3{#WF%?bF?vBnLTWDAR#W%hQo0M@)c85wdYR)cHaRYc&KW z3Schj>WH z{ayN9D{S|HF%=M4wArvVSX(TX{z~RV(;S!W;&YyYb^;U^%>U zO#62YNdwg%+nrRXTjooxudSvP4h?}j)l3hz)FGobDCBPNURs{mVyg^2;Xidut#wT8 zp=sWRgN3$(3h%nu%tdJOZS;O_<2h>1mNvTGzfR*=ca5ogBHN_nz8F;(nbJvh62Is~ zwznt>E+7-eE4IPQSl$@gTAE@z8_IWOt?m4xn60Zz@8qpAv}SW=u&TzG3?*x)EXf1b z81cF;U|M^D=PzY%V??oQTPueVo$1c6x>#esP^K!g*&Y&&B{qMj;ITbf+XTVAysdJS zy4P5a6CO>){`l2?7T;S=Wa32+q*RYNqxK^sy?SP6jq%2&d~F4n$O1C3ml+Kap}~-6 zTTV-KA~|9ThUldIElPK3zH(A^WH|y{2%NZ{3M0p_ZkeV_T~5F{pKJ^;D~#oD#WTC+jm(UWbmasY{rm5~y=~7kD=#-3`I5 z!4~|K93YSpXXqXsmBBSH6;E%iOv8ZS1*j26C2sW9sM?K`StuFR_9DZL_7uTt$$U)@VUJ*F*ie!8_3ao=-679#GnkG+{Bf_T?)GuU>no0-#LiSl!bF+hCzS;EsBdR?NOohZ0QvKzyygqqw zS1tLss|y7lneYPE6)na+k`QDA=& z5D%-hhDJR+p@-tmrB>LTG``=Pew^>Qz=%!VDc~nfH#e*1Ip4 z8WGz5$cpA@_u~0m*X@2TvJL|M;%sIPpUgaaM!Wx+VqYcqy;?eTYxT6=fBiF#`+}4B zspx|M8=!198}|u*K!?ZI;uzDTPMr0n?dj)nqy8A-30zcTlC8nO&DUTv12+BbjOls< z`!l$kZ{8TnjCPlUL=P(oc=fDo)sCTOUzAS)H$iEcLI%>45R`O)TW|E*qqIlZ6A)_% zALmt_{Dh^~e9XwB2g2^m_YIF4b{mXC&Ho=`&U_N^>_-OnM^rPf0Pfp%^4o&@d%w^N N{tM{z7_q@B002W@x`zM& diff --git a/frontend-dist/css/740.a94dbb46.css.gz b/frontend-dist/css/740.a94dbb46.css.gz index a2d2204f379d5452bc6e033cc88525f7ecdef0a0..257345c088743fc03b9451207f70c043ba499602 100644 GIT binary patch delta 19 YcmeyN`$LyYzMF#q1emxsa=jA+05`S-(f|Me delta 19 YcmeyN`$LyYzMF#q1ek<3a=jA+05{_V+W-In diff --git a/frontend-dist/css/776.cc79148e.css b/frontend-dist/css/776.cc79148e.css new file mode 100644 index 00000000..72a31f31 --- /dev/null +++ b/frontend-dist/css/776.cc79148e.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-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-34570adb]{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-34570adb] .el-container,[data-v-34570adb] .el-main{overflow:visible}[data-v-34570adb] .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-34570adb]{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-34570adb]{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-34570adb]{flex-direction:column;top:6px;width:calc(100% - 32px);border-radius:14px;padding:6px 12px;gap:4px}.header-icon[data-v-34570adb]{font-size:.95em}.header-content .actions[data-v-34570adb]{gap:10px}.search-card[data-v-34570adb] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-34570adb] .el-input__wrapper{padding:0 10px}.search-card[data-v-34570adb] .el-input__inner:focus{width:65vw}}.header-content[data-v-34570adb]: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-34570adb]: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-34570adb]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-34570adb]:hover{color:var(--admin-purple);transform:scale(1.2)}.breadcrumb-container[data-v-34570adb]{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-34570adb]{width:32px;height:32px;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-34570adb]:hover{color:var(--admin-purple);transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-select-icon[data-v-34570adb]{font-size:14px}@media (max-width:768px){.breadcrumb-container[data-v-34570adb]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-top:8px;margin-bottom:2px}.breadcrumb-select-button[data-v-34570adb]{width:28px;height:28px;border-radius:8px}.breadcrumb-select-icon[data-v-34570adb]{font-size:12px}}.stats-badge[data-v-34570adb]{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-34570adb]:hover{background:var(--el-fill-color);color:var(--admin-purple);border-color:var(--admin-purple)}.stats-badge-icon[data-v-34570adb]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-34570adb]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-34570adb]{font-size:9px}}.header-content .actions[data-v-34570adb]{display:flex;align-items:center;gap:15px}@media (max-width:768px){.header-content .actions[data-v-34570adb]{margin-top:10px}}.header-content .actions i[data-v-34570adb]{font-size:1.5em;cursor:pointer;transition:color .3s,transform .3s;color:var(--admin-container-color)}.header-content .actions i[data-v-34570adb]:hover{color:var(--admin-purple);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-34570adb]{color:var(--admin-container-color)}.header-content .actions .el-dropdown-link i[data-v-34570adb]:hover{color:var(--admin-purple)}.header-content .actions .disabled[data-v-34570adb]{color:#bbb;pointer-events:none}.header-content .actions .enabled[data-v-34570adb]{color:var(--admin-purple)}.search-area[data-v-34570adb]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-34570adb]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-34570adb]{display:flex;align-items:center}.search-card[data-v-34570adb] .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-34570adb] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-34570adb] .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-34570adb] .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-34570adb] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-34570adb] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-34570adb] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-34570adb] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-34570adb] .el-input__inner:focus{width:55vw}}.search-icon[data-v-34570adb]{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-34570adb]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-34570adb]:hover{color:var(--admin-purple);transform:scale(1.2)}.search-card[data-v-34570adb] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-34570adb]{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-34570adb]{padding-bottom:72px}@media (max-width:768px){.main-container[data-v-34570adb]{margin-top:12vh}.main-container.has-batch-toolbar[data-v-34570adb]{padding-bottom:86px}}.content[data-v-34570adb]{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-34570adb],.list-view.is-drag-selecting[data-v-34570adb]{cursor:crosshair}.content.is-drag-selecting[data-v-34570adb] .img-card:hover,.content.is-drag-selecting[data-v-34570adb] .img-card:hover .file-icon,.content.is-drag-selecting[data-v-34570adb] .img-card:hover .folder-icon-svg,.content.is-drag-selecting[data-v-34570adb] .img-card:hover .image-preview,.content.is-drag-selecting[data-v-34570adb] .img-card:hover .video-preview{transform:none}.content.is-drag-selecting[data-v-34570adb] .image-preview:hover{opacity:1}.content.is-drag-selecting[data-v-34570adb] .action-btn:hover{transform:none;background:hsla(0,0%,100%,.15)}.list-view.is-drag-selecting[data-v-34570adb] .list-item:hover{background:transparent}.list-view.is-drag-selecting[data-v-34570adb] .list-action-btn:hover{color:var(--el-text-color-regular);background:var(--el-fill-color)}.list-view.is-drag-selecting[data-v-34570adb] .list-action-danger:hover{background:var(--el-fill-color)}.empty-state[data-v-34570adb]{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-34570adb]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-34570adb]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-34570adb]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-34570adb]{padding:80px 20px}@media (max-width:768px){.content[data-v-34570adb]{grid-template-columns:1fr;grid-template-rows:none}}.list-view[data-v-34570adb]{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-34570adb]{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-34570adb]{display:flex;align-items:center}.list-col-checkbox[data-v-34570adb]{justify-content:center;min-width:40px}.custom-checkbox[data-v-34570adb]{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-34570adb]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-34570adb],.custom-checkbox.indeterminate[data-v-34570adb]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-34570adb]{font-size:10px;color:#fff}@media (max-width:768px){.list-header[data-v-34570adb]{display:none}}.pagination-container[data-v-34570adb]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-34570adb]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-34570adb] .el-pagination{--el-pagination-button-bg-color:var(--admin-dashboard-btn-bg-color);--el-pagination-hover-color:var(--admin-purple)}.pagination-container[data-v-34570adb] .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-34570adb] .el-pager li:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-container[data-v-34570adb] .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-34570adb] .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-34570adb] .btn-next,.pagination-container[data-v-34570adb] .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-34570adb] .btn-next:hover,.pagination-container[data-v-34570adb] .btn-prev:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-right[data-v-34570adb]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-total[data-v-34570adb]{font-size:13px;color:var(--el-text-color-secondary);white-space:nowrap}.page-jump[data-v-34570adb]{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--el-text-color-secondary)}.page-jump .jump-input[data-v-34570adb]{width:50px}.page-jump .jump-input[data-v-34570adb] .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-34570adb] .el-input__inner{text-align:center;color:var(--el-text-color-primary);height:28px;line-height:28px}.page-jump .jump-btn[data-v-34570adb]{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-34570adb]:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(56,189,248,.4)}@media (max-width:768px){.pagination-container[data-v-34570adb]{flex-direction:column;gap:12px;padding-bottom:15px}.pagination-center[data-v-34570adb]{order:0}.pagination-right[data-v-34570adb]{position:static;width:100%;justify-content:center;order:1}.page-jump .jump-input[data-v-34570adb]{width:45px}}.refresh-btn[data-v-34570adb]{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-34570adb]:hover{transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow);background:linear-gradient(135deg,#0ea5e9,#38bdf8);color:#fff}.load-more[data-v-34570adb]{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-34570adb]:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(56,189,248,.5)}[data-v-34570adb] .btn-prev{left:8px}[data-v-34570adb] .btn-next,[data-v-34570adb] .btn-prev{border-radius:100%;position:fixed;top:50%;scale:1;color:var(--admin-dashboard-btn-color)}[data-v-34570adb] .btn-next{right:8px}@media (min-width:768px){[data-v-34570adb] .el-pagination.is-background .btn-next,[data-v-34570adb] .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-34570adb] .el-pagination.is-background .btn-next:hover,[data-v-34570adb] .el-pagination.is-background .btn-prev:hover{transform:translateY(-10%);box-shadow:var(--admin-dashboard-btn-hover-shadow)}}.question-icon[data-v-34570adb]{margin:0 3px}.breadcrumb[data-v-34570adb]{padding:8px 12px;background-color:var(--el-bg-color);border-radius:6px;font-size:.95em;box-shadow:var(--admin-dashboard-stats-shadow);transition:all .3s ease}.breadcrumb[data-v-34570adb]:hover{transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-home-icon[data-v-34570adb]{font-size:14px;color:#38bdf8;transition:color .2s ease}.breadcrumb-home-icon[data-v-34570adb]:hover{color:var(--admin-purple)}[data-v-34570adb] .el-breadcrumb__item{cursor:pointer}[data-v-34570adb] .el-breadcrumb__inner:hover{color:var(--el-color-primary)}.mobile-directory-trigger[data-v-34570adb]{display:none;align-items:center;gap:6px;padding:6px 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-34570adb]:active{background:var(--el-fill-color)}.mobile-directory-icon[data-v-34570adb]{font-size:12px;color:#38bdf8}.mobile-directory-path[data-v-34570adb]{font-size:12px;font-weight:500;color:var(--el-text-color-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-34570adb]{font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-34570adb]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-34570adb]{display:flex}.desktop-only[data-v-34570adb]{display:none!important}.breadcrumb-container[data-v-34570adb]{padding:0;margin-left:0}}.drag-select-overlay[data-v-34570adb]{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/776.cc79148e.css.gz b/frontend-dist/css/776.cc79148e.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..d474afb9451dab8cbeddfc7d615927ca5322fd79 GIT binary patch literal 14125 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.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.191d79e8.css.gz b/frontend-dist/css/app.191d79e8.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..d94c5ac1b1e396528ac34a45a61d439938694c32 GIT binary patch literal 4991 zcmV-_6M*a=iwFP!000023cXzIkF&aR|5wrzt+cr^xyHPNBvN&6D^=}>_Ez`keqI@D z2wj2^klpNA?f+ic=EZ;wBQNq;8IQ*^!11E>d)+dwVWw_jv$aipbboZYuj?r!tv+|1T*I&ecf7zXdP?Al9}xt|&QMSN5C5s{5EGDe+eo;f$VZdao^cO8J ze|#615YFYm;?6H@u+;RErpcu~9Uz=CZScNix0;q#mgeskz2m61a8#!s^t&N;QFsiT zpOBHS?<+2oG(W*}I~F{LIC@V?cFT#?FvJ1>{G4JI-74!Nt=-kjfA?yc~#(&=5=Sin%$y{72zynw^|B0m5kNjmK7!qAD53yD=9Ha zXc^sWSWu0ek^AgfCzpC`8o-6ZUz68@RDy zao?cgzA2MX&;tneHm6OmIH6Wi(vOsWT5+1yv^<3+pHoh&>QxYlHSETm$WRO^#Tmrh zii}}mWocDg5iW^&8V5Z&D+w)6c5&ZSEKA8|>!1UTA`j}R@2v^!X7*lj-|+7yzO<%S z%_!IlX?z&b5?ozE_Sh_Xo^EZpT4Hr3R#h3}G^17;vAp$EIf1if(X1sTB~Fq#-|%;O zdO2UGxNo?Alx(&xJkmIxp>EZfA-u2;L4Ke3Azy_#&Rd@HbT%2Iz*SA<+H!})CB-In z^rQn-{MHv#O@xVCeHx*59E5SuFNg>RB@(;<$Uhl;4b_F>Ua=XvD^7E(PV0=$rvhwK zCyK!K5MW9pMS$d8r<6k5Sc0dc@qM{+Nya{#gNDhP$K&~(Ccr-Ckk~Aau5ZKNUAZUZVV;msP zX!Je_b=NrK@K!c1a`1uexd7P?*gHl8-Kx5sZ~*MU0SLKZZwq~{jLOz5^88 z2PRGf&D1jYOgLB!GmHIK$=&y=7Cb&H*hl9=U1x^1!*idS4)5=@Vhu{5owo2cDlsbDFB6VHaDbWCC=_SLT1SVEhK9H+Y} zGjfTERn@qz7V?0eXS5L87*Z@c3o5zj4pCf+p5a_~X)=)D6ax*qOXGlto|$n}-z+Se zL1A^(&{_#foh|dAj=*RO$0Tyr5=O2SX3+Ac*JOUp{5h^+PY|uKT8$H{x+Mv%WaZww zmN+Iakq??@-PW|ob^ilYRqLl-YcD>;_-t9#JI&~zR@qX>KkB{el3uT!{@P-u3G7=H z#R*Tv8C~t%11572D#KJ?Ek`vntrPK&8+D|`tt>Kn+J?@Nkg&TP;ySv_bqzelfkwo0 zhin}~f4Js`aJtwy+Q3Euu-yRcZGYY2T9w}(BB#pxCfZIFZ*Y{8y)oB z!G_4tp&U~fMEO14&{pG}1WqVB1Nj5ns`*=zHx;F3w$7ADKOJ}XvnRNGUxC!x5&r=0 zr8<~a)o}@;9c!@)riD`M5UABkS^?I=y+04vs?%8u)dn#pQLq5iT57vs8`*@!9;WM1 zTI~QDly+A6IfPbg&RLYUQ)vdJRn=LK(9TI7lpZsL3kdBD=Ln(gD3=l11yVgit7@V{ zXycfM5z!*F+ZfZ391OVZgmWz#8^pxnTLU@7ZX9ns?*(jeK-?J3A+y^kria*@!(&G% zrt1hqQg#NXnBEwv9nd>}3{pD~={CJzWCsAbuDlxfnszLD2EIkwiKAc#`0YR!gJ>Dr zJt7HQx)AJ-{t9TEH2MJ^_|beEu3;?n2| zSUPwPmPYfibmNWyxxj(*V6JKs`v`$}p22ej*!3tb-S?gs&X>?%0ZGdk41nVU*9Ch& zScynar-Giwq`S7z(u9K5Xf*U^;pooWpM;}L;*BS2`w29mguoEdm|< zUIbbTfCmpD(9VMhv=HDxApbZ3Ev~o_$iFA?XKyV4ZF^4u(9Sae^zX%=?MdNhfN{4m zI>tuE(sdEI9SYG^ zM2iTnEKfpr0m0=(w|#H`f^Bg(3*llX@~F2S!VLqWqR2)Fx05@Da3@Wa1^8CGf6YU< zlOk<3e5)O79>N{e(yQUyffXKyZXeK72j8w|pM!9wzsI{4)dN#*lxO zkzCcX51_a<<)8If?2HLl!m$$x-fk_3JUho#NbV~2)&987`V&BR6)d}G%0~g+Rs0iB zce3fM2Xt2%&j{*DPk$8G^*rxcQ1=;iwZN`}`9}}zPVdbFyY^Gat|NO$cGFXwRKwm9 z@+<2-56Hijz;6^sQ53lc19H|K;S88pci)VhsX)I$N*wWz8Dy5n=L2v&;5uOMy9*ez zrUT$ViZZvWva$iN4q%4CV*qnoTL+I~%eMOrwmf*?&IBtT2yrHhHH4M5fbJMp*2+;~ zWi5dUD--Gmcm`G`*v0W2tb9DiK6U3{^W#B>qGq@9 zmCN0A@Bhw_Ox{2qt#06{WAPyROi6t?-FV7W?$oR}4d6VW6}6db)*+f^X_yRZXwpU-(Pj|B0ht#ee^e9uQ;#zSKT-NMQ>Dn(>V&urezZ%?W`Ln?7``oQI@0Dj{% z%cSlSd86g-JdAywsQTFUxt#GlI%#T|*2(+XH##*b=)3&^g*c=4v-k}IQQlVVFBv4b zI0eQ1Je-0Uy3wP%hB|eoXY#dLiM>$`Hm|r3Ld@@eD4`SC@1#~yrdM2k4W^kDmf}e| zuC9->J4d&&V&$n|shGW@2wybO^-H{*Oh{Qqu6z zZr5Ba1~>iBp8ErnM_2)oX}CX2T%7nnk`3zEHp-ROOXZ_haJYpizSjC;VDRF$D&IZo zo2q$nmT}{5D6Z(d+KsUXhZ4QbOLNktR$leUfR9)nr{$Gb-QRtcWJ9Qn%b&koDM|6>wO8ig z2gQB&t!|j@Dzrzq$?n)ne75d#*Rg3zEN93$+D=vX(WF9c?p(-yojG5ozveS?eSKZkNKzGz*AFm?YXcW|Xo_PRl)>F&|Yq@+3R z&f1R}U2vW^&*!z13)<|_oisGR1||LBQl|O)3I6=-t1RUvc+#7M(>Egc_Fk;4;zWHm zaIb+3VM%%ETdsg|8iT#kiZ2GkbLDWF0|p^ne0zIqb?$zpY7;0kl9<^e^Wxiwe&}1C zjXgG7At0&_@$j>B4UJb?kamhi^ze|`A<{Or?QV5)yuz3%jf7E$^5#`=9c^1AZfm~+h*(=8Ora#a0!NFT)|>Y4yf01-6PR!&EGoFOA=6|s`Ev|iwQ zF*1{1Zb_2niTEMIuBCG%aAt&08WQ}`Qrm7AU|*#+hvZYcv;J(S575O;`FHG}BJ+v% zxG48eITOdvQAUy;(_N%lmKIf7^+~qdbq@YfB-wQ{(-zZm-y9r)5VuxqE=|dLX1qmK zf1UP0lgBxS#?MkA7>56F_eWa|lNdSYz_$cONzBEmYaTIb@&?xAO)sb@_BMA2JmPq*HZbbe{=GqohA3o*Yv=d8T-Bbn!GdsplQr+v&&GJNCp*t#|5` z)B5N`e)#q#I_#zaWc$4ZY&?o%$7HBBZb89~dfU3v{01InczY9Pf5pAz)cR@u z^z6Kh5Pi&l?ytSQ;j(0(r;x_1q+>x#=13JJgj=Yn%7v>JU7(5>C7tYf^#At z`tEb6*S&kC5=@>Y@Veht8j#7iIL35=*G2h23t@Rs!xgvZ^; zJVKp*!RBsS7gnaf@kdd!dAbi;a!5LpbCZQO6tC;E%4%!#f|do%NgDAVe?Ot|ZG2Cw z{%T#~=$)Hq@N4AioyIQa`;9#Y$#P~A.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.b00690f7.css.gz b/frontend-dist/css/app.b00690f7.css.gz deleted file mode 100644 index e4aeb8f5111ef3d53d1d07c7e5a933bc2314d1ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4067 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 diff --git a/frontend-dist/css/chunk-vendors.f9cd4701.css.gz b/frontend-dist/css/chunk-vendors.f9cd4701.css.gz index 273b9df0735bee2240fcc0db8962f843088f9cfa..4e504129fde5618f98bba28ce438fc5799380cd0 100644 GIT binary patch delta 19 YcmbR2GuekrzMF#q1emxsa&f8w04wGLaR2}S delta 19 YcmbR2GuekrzMF#q1ek<3a&f8w04x&&dH?_b diff --git a/frontend-dist/fonts/Pacifico-Regular.dc63ac94.woff2 b/frontend-dist/fonts/Pacifico-Regular.dc63ac94.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dacb70822f0d8d9741ba5779f35c2a1ccad56b87 GIT binary patch literal 51632 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±b2xpuTB zn~Nj%0doVH)bJ1`F&QZZ2|1uFKbb5;296!EMwQ14O2Tr{RK#HjSt1~7bgO>A(p=YJ zR_in-{Q=<5*weVep}@Zsa2fGTtT}b&yzxVlfRzqUrwW{_b-jAy7k?}8HaUr7vv>v? z`Y{x|>-s=0lrDD9=Wj$rhB#7{E{CVOre(^?swS;|pon;63YA)^ZitMVT4jw&k$R4> z=+BqIU>&=z!&+&T(rs4bRd8hfdrbhAUu*bdJfFw?fh{)%QSUtFebw&Ak-NMf^IrRc ZW`A4ngYS15KQ#k6qo<*vJKw)h{y#Pt4Icmi diff --git a/frontend-dist/index.html b/frontend-dist/index.html index 8b0c6bcf..212b705e 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 9e836325862e64881c325d898d67c67c7299fbba..3987f018d5880935193f7be5387513ccba6d2359 100644 GIT binary patch literal 518 zcmV+h0{Q(PiwFP!000023YAmAirX*{{gtVD*h_53kYzU@8YOvsfO zxy|myDQlUB41bJns>HYK%R}~#`a!X4JPObh7z0=0@qLA+!(X7FdaT6ca6eGwS9N=5 z*j5H7r!hMQD;FF)<+G%f$Ep;y^e*fmqOXM06a?6aZ6%7tik&WcG)@(sI?9L8ot3L$ z@R%`;+GhU=?N!?S3kEcKij{cVZko+{eJdr{v8=%Ls(Te`Posgv6xF3WYGh0Ciukh= zwPeR0>$AaSu_Wap5e&8%50YDq0#ekKD4tWH?HG31guzfu`MPYkx8=6YpOdI%u|WSu zp@tzhror11*B8K}UnhTby6o0&wb|UQ%Uq`<7F!d~9+O36ag9DSDz~M%+v5G7FvW5p z4Vk%?fnF4Fq|nu0@g^c9igAW!WJt%2eRq9l#|8{x3O5XUiaQu04H*3ld&ibWhL37e zPs<`OsK%qo;gd&|@Dzh%U^@Ea!ic#nPF-d3dl2I$aOU{+57Qbq)v{QoEspp86F@WR Ig8u^m0PafuhX4Qo literal 521 zcmV+k0`~nMiwFP!000026O~g{VOIM_A>pL{a_fWt+YZ&EGN(k!40K}+hiw= zL*jPSe~)H5EIYeGz$KC`zh^(cxO$~Y@f;8g53Z>WFF5J@T8O4HD0Nc}$P$#1F(KDt zxsTSX|FSpq{8iHioIuxMDGkUJY-TNAKkH0`(4p@uH;yzI1Cv|(P z+0+^*t1vqTE9)&=>9VAx!+I^6%2~gIh^`h^kr!YhcC{!HOSY;QP+M6z>M0MtKP#6Z zILw$vWwQT-4l?cj1p|s4#ag`XuG{OfJQu7nsb~Y+1I?r6d+Fy9;cniI zQOFSTt8IJP-IV1s;L)#>KPo-%)@_x(-jwTHr6d+x6VDElL1gg~eQ4B{<(qBUZT^HQ zmIG-?&rRj&Q2|Htee)GBB0{1VXJ|);blli?JM?C3K@%o_!LX;egAgfTbTjNN8yXot z%1PcYi$E`1hdPH(4rRhq43>fE=#TXy=2da(S{1(s(RKo>k6-^Vt+rEB70a~6@!o#| Lt+L`Z{{sL3xoP$@ diff --git a/frontend-dist/js/198.7896d641.js b/frontend-dist/js/198.7896d641.js deleted file mode 100644 index 3534e7a6..00000000 --- a/frontend-dist/js/198.7896d641.js +++ /dev/null @@ -1,2 +0,0 @@ -(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[198],{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)},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 W(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 B(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,W(e,!1),0===e.strm.avail_out))return S;if(e.strstart-e.block_start>=e.w_size-T&&(W(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(W(e,!0),0===e.strm.avail_out?D:E):(e.strstart>e.block_start&&(W(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=X,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),B(n,n.gzhead.time>>16&255),B(n,n.gzhead.time>>24&255),B(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),B(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(B(n,255&n.gzhead.extra.length),B(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):(B(n,0),B(n,0),B(n,0),B(n,0),B(n,0),B(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),B(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));)B(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&&(B(n,255&e.adler),B(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&&(W(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(W(e,!0),0===e.strm.avail_out?D:E):e.last_lit&&(W(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&&(W(e,!1),0===e.strm.avail_out))return S}return e.insert=0,t===c?(W(e,!0),0===e.strm.avail_out?D:E):e.last_lit&&(W(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?(B(n,255&e.adler),B(n,e.adler>>8&255),B(n,e.adler>>16&255),B(n,e.adler>>24&255),B(n,255&e.total_in),B(n,e.total_in>>8&255),B(n,e.total_in>>16&255),B(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,B={bits:a.lenbits},W=o(0,a.lens,0,19,a.lencode,0,a.work,B),a.lenbits=B.bits,W){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,B={bits:a.lenbits},W=o(l,a.lens,0,a.nlen,a.lencode,0,a.work,B),a.lenbits=B.bits,W){e.msg="invalid literal/lengths set",a.mode=30;break}if(a.distbits=6,a.distcode=a.distdyn,B={bits:a.distbits},W=o(d,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,B),a.distbits=B.bits,W){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:W=1;break e;case 30:W=-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)&&W===c&&(W=-5),W)},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),W=new i.Buf16(16),B=null,P=0;for(F=0;F<=15;F++)z[F]=0;for(C=0;Cv?(y=B[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 B(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--)X(e,s,a);for(n=l;a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],X(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++,X(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*W(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?(B(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)},65067:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return rn}});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,W=o.A,B=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)(B,{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)(W,{"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,W=a(45130);const B={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)(W.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,W.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",B,[(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 j=V;const X={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)(W.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,W.D$)(()=>{},["stop"]))},[(0,c.Lk)("div",X,[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,W.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"},We={key:2,class:"empty-message"},Be={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",Be,[(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,W.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",We,(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),je=(a(10456),a(66810)),Xe=(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=Xe.xE,_=Xe.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:"user-plus",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,W.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-206e41fa"]]);var ct=dt,ht=a(54880),ut=(a(4318),a(77815)),ft=(a(72907),a(78507));a(213);const mt={class:"list-col list-col-checkbox"},pt=["src"],gt=["src"],bt=["title"],vt={class:"filename-start"},kt={class:"filename-end"},yt={class:"list-col list-col-tags"},_t={key:1,class:"list-empty"},wt={class:"list-col list-col-channel"},Ft={class:"list-col list-col-channel-name"},Ct={key:0,class:"channel-name-box"},Tt={key:1,class:"list-empty"},$t={class:"list-col list-col-address"},Lt={key:0,class:"address-box"},St={key:1,class:"list-empty"},xt={class:"list-col list-col-size"},Dt={class:"list-col list-col-date"},Et={class:"list-col list-col-actions"};function At(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=ft.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",mt,[(0,c.Lk)("span",{class:(0,h.C4)(["custom-checkbox",{checked:n.localSelected}]),onClick:t[0]||(t[0]=(0,W.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,pt)):s.isImage?((0,c.uX)(),(0,c.CE)("img",{key:2,src:a.fileLink,class:"list-preview-img",loading:"lazy",decoding:"async"},null,8,gt)):((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",vt,(0,h.v_)(s.fileNameStart),1),(0,c.Lk)("span",kt,(0,h.v_)(s.fileNameEnd),1)],8,bt)]),(0,c.Lk)("div",yt,[!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",_t,"-"))]),(0,c.Lk)("div",wt,(0,h.v_)(s.isFolder?"-":a.item.metadata?.Channel||a.item.channelTag||"-"),1),(0,c.Lk)("div",Ft,[!s.isFolder&&a.item.metadata?.ChannelName?((0,c.uX)(),(0,c.CE)("div",Ct,(0,h.v_)(a.item.metadata.ChannelName),1)):((0,c.uX)(),(0,c.CE)("span",Tt,"-"))]),(0,c.Lk)("div",$t,[!s.isFolder&&a.item.metadata?.UploadIP?((0,c.uX)(),(0,c.CE)("div",Lt,(0,h.v_)(a.item.metadata.UploadIP),1)):((0,c.uX)(),(0,c.CE)("span",St,"-"))]),(0,c.Lk)("div",xt,(0,h.v_)(s.isFolder?"-":s.fileSizeDisplay),1),(0,c.Lk)("div",Dt,(0,h.v_)(s.uploadDate),1),(0,c.Lk)("div",Et,[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,W.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,W.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,W.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,W.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,W.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,W.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(r,{icon:"trash-alt"})])]),_:1},8,["content"])])],32)}var It={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 Ut=(0,I.A)(It,[["render",At],["__scopeId","data-v-3ef86404"]]);var zt=Ut,Wt=a(70683),Bt=(a(95385),a(98469));a(38736);const Pt={class:"file-short-info"},Rt={key:0,class:"success-tag"},Ot={key:1,class:"fail-tag"},Nt={key:2,class:"success-tag"},Mt={key:3,class:"primary-tag"},Vt={key:0,style:{"margin-left":"2px"}},jt={key:0,class:"skeleton-wrapper"},Xt={class:"error-text"},Kt=["src"],Zt={class:"error-text"},Gt={key:3,class:"file-preview"},Ht={class:"card-bottom-overlay"},qt={class:"file-name-row"},Qt={class:"file-name"},Yt={class:"action-bar"},Jt={class:"action-bar-left"},ea={class:"action-bar-right"};function ta(e,t,a,i,n,s){const r=Bt.dI,o=(0,c.g2)("font-awesome-icon"),l=Ze.Zq,d=ft.R7,u=Wt.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",Pt,["White"===a.item.metadata?.ListType?((0,c.uX)(),(0,c.CE)("div",Rt,(0,h.v_)(s.channelTag),1)):"Block"===a.item.metadata?.ListType||"adult"===a.item.metadata?.Label?((0,c.uX)(),(0,c.CE)("div",Ot,(0,h.v_)(s.channelTag),1)):((0,c.uX)(),(0,c.CE)("div",Nt,(0,h.v_)(s.channelTag),1)),a.item.metadata?.Tags&&a.item.metadata?.Tags.length>0?((0,c.uX)(),(0,c.CE)("div",Mt,[(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",Vt," (+"+(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",jt)):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",Xt,(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,Kt),[[W.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:"",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,W.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"image",class:"error-icon"}),(0,c.Lk)("span",Zt,(0,h.v_)(e.$t("dashboard.loadFailed")),1)])]),_:1},8,["src","preview-src-list"])):((0,c.uX)(),(0,c.CE)("div",Gt,[(0,c.bF)(o,{icon:"file",class:"file-icon"})])),(0,c.Lk)("div",Ht,[(0,c.Lk)("div",qt,[(0,c.Lk)("span",Qt,(0,h.v_)(s.displayName),1)]),(0,c.Lk)("div",Yt,[(0,c.Lk)("div",Jt,[(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,W.D$)(t=>e.$emit("detail"),["stop"]))},[(0,c.bF)(o,{icon:"info-circle"})])]),_:1},8,["disabled","content"])]),(0,c.Lk)("div",ea,[(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,W.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,W.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,W.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,W.D$)(t=>e.$emit("copy"),["stop"]))},[(0,c.bF)(o,{icon:"copy"})])]),_:1},8,["disabled","content"])])])])]),_:1})}var aa={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 ia=(0,I.A)(aa,[["render",ta],["__scopeId","data-v-efb50eda"]]);var na=ia;const sa={class:"card-bottom-overlay"},ra={class:"file-name-row"},oa={class:"file-name"},la={key:0,class:"action-bar"},da={class:"action-bar-right"};function ca(e,t,a,i,n,s){const r=Bt.dI,o=(0,c.g2)("font-awesome-icon"),l=ft.R7,d=Wt.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",sa,[(0,c.Lk)("div",ra,[(0,c.Lk)("span",oa,(0,h.v_)(s.folderName),1)]),a.showActions?((0,c.uX)(),(0,c.CE)("div",la,[t[9]||(t[9]=(0,c.Lk)("div",{class:"action-bar-left"},null,-1)),(0,c.Lk)("div",da,[(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,W.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,W.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,W.D$)(t=>e.$emit("delete"),["stop"]))},[(0,c.bF)(o,{icon:"trash-alt"})])]),_:1},8,["disabled","content"])])])):(0,c.Q3)("",!0)])]),_:1})}var ha={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 ua=(0,I.A)(ha,[["render",ca],["__scopeId","data-v-41b1a7c0"]]);var fa=ua;function ma(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 pa={name:"SkeletonLoader",props:{type:{type:String,default:"card",validator:e=>["card","list"].includes(e)},count:{type:Number,default:15}}};const ga=(0,I.A)(pa,[["render",ma],["__scopeId","data-v-5060702c"]]);var ba=ga,va=a(81095),ka=(a(77128),a(62086)),ya=(a(40670),a(88830),a(23597),a(49187),a(77788));a(72099);const _a={class:"el-dropdown-link filter-trigger"},wa={class:"filter-section"},Fa={class:"filter-title"},Ca={class:"filter-options"},Ta={class:"filter-section"},$a={class:"filter-title"},La={class:"filter-options"},Sa={class:"filter-section"},xa={class:"filter-title"},Da={class:"filter-options"},Ea={class:"filter-section"},Aa={class:"filter-title"},Ia={class:"filter-options"},Ua={class:"filter-section"},za={class:"filter-title"},Wa={class:"filter-options"},Ba={key:0,class:"filter-section"},Pa={class:"filter-title"},Ra={class:"filter-options"},Oa={key:0,class:"channel-divider"},Na={class:"channel-group-title"},Ma={class:"filter-actions"};function Va(e,t,a,i,n,s){const r=(0,c.g2)("font-awesome-icon"),o=ya.z_,d=Bt.dI,u=Bt.o5,f=l.S2,m=ka.Iy,p=ka.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",wa,[(0,c.Lk)("div",Fa,(0,h.v_)(e.$t("filter.accessStatus")),1),(0,c.Lk)("div",Ca,[(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",Ta,[(0,c.Lk)("div",$a,(0,h.v_)(e.$t("filter.blackWhiteList")),1),(0,c.Lk)("div",La,[(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",Sa,[(0,c.Lk)("div",xa,(0,h.v_)(e.$t("filter.reviewResult")),1),(0,c.Lk)("div",Da,[(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",Ea,[(0,c.Lk)("div",Aa,(0,h.v_)(e.$t("filter.fileType")),1),(0,c.Lk)("div",Ia,[(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",Ua,[(0,c.Lk)("div",za,(0,h.v_)(e.$t("filter.channelType")),1),(0,c.Lk)("div",Wa,[(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",Ba,[(0,c.Lk)("div",Pa,(0,h.v_)(e.$t("filter.channelName")),1),(0,c.Lk)("div",Ra,[(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",Oa)):(0,c.Q3)("",!0),(0,c.Lk)("div",Na,(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",Ma,[(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",_a,[(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 ja={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 Xa=(0,I.A)(ja,[["render",Va],["__scopeId","data-v-c3aeeea0"]]);var Ka=Xa,Za=a(97247);const Ga={class:"container"},Ha={class:"header-content"},qa={class:"search-area"},Qa={class:"search-card"},Ya={class:"actions"},Ja={class:"el-dropdown-link"},ei={class:"el-dropdown-link"},ti={class:"el-dropdown-link"},ai={class:"breadcrumb-container"},ii={class:"mobile-directory-path"},ni={class:"breadcrumb desktop-only"},si=["title"],ri={key:0,class:"content",ref:"cardContainerRef"},oi={key:1,class:"empty-state"},li={class:"empty-text"},di={class:"empty-hint"},ci={key:1,class:"list-view",ref:"listContainerRef"},hi={class:"list-header"},ui={class:"list-col list-col-checkbox"},fi={class:"list-col list-col-preview"},mi={class:"list-col list-col-name"},pi={class:"list-col list-col-tags"},gi={class:"list-col list-col-channel"},bi={class:"list-col list-col-channel-name"},vi={class:"list-col list-col-address"},ki={class:"list-col list-col-size"},yi={class:"list-col list-col-date"},_i={class:"list-col list-col-actions"},wi={key:1,class:"empty-state list-empty"},Fi={class:"empty-text"},Ci={class:"empty-hint"},Ti={class:"pagination-container"},$i={class:"pagination-center"},Li={class:"pagination-right"},Si={class:"page-total"},xi={class:"page-jump"},Di={class:"dialog-section"},Ei={class:"section-header"},Ai={class:"section-title"},Ii={class:"section-content"},Ui={class:"dialog-section"},zi={class:"section-header"},Wi={class:"section-title"},Bi={class:"section-content"},Pi={class:"setting-item"},Ri={class:"setting-label"},Oi={key:0,class:"setting-item"},Ni={class:"setting-label"},Mi={class:"dialog-action"};function Vi(e,t,a,i,n,s){const o=Za.A,u=(0,c.g2)("font-awesome-icon"),f=d.WK,m=Ka,p=ka.c6,g=ka.Iy,b=ka.dW,v=ft.R7,k=ht.bZ,y=va.WZ,_=va.vp,w=ba,F=fa,C=na,T=zt,$=ut.aQ,L=l.S2,S=ht.ZO,x=ht.lX,D=ct,E=je.ll,A=je.MQ,I=Ve.qi,U=r.kZ,B=Me,P=Ce,R=Q,O=j,N=z;return(0,c.uX)(),(0,c.CE)("div",Ga,[(0,c.bF)(x,null,{default:(0,c.k6)(()=>[(0,c.bF)(k,null,{default:(0,c.k6)(()=>[(0,c.Lk)("div",Ha,[(0,c.bF)(o,{activeTab:"dashboard"}),(0,c.Lk)("div",qa,[(0,c.Lk)("div",Qa,[(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,W.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",Ya,[(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",Ja,[(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.selectPage"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:s.selectPageIcon,class:"header-icon",onClick:s.handleSelectPage},null,8,["icon","onClick"])]),_:1},8,["disabled","content"]),(0,c.bF)(b,{onCommand:s.handleBatchAction,"hide-on-click":!1,disabled:0===n.selectedFiles.length},{dropdown:(0,c.k6)(()=>[(0,c.bF)(g,null,{default:(0,c.k6)(()=>[(0,c.bF)(p,{command:"copy"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"copy",class:"batch-action-item-icon"}),(0,c.eW)(" "+(0,h.v_)(e.$t("dashboard.copy")),1)]),_:1}),(0,c.bF)(p,{command:"delete"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"trash-alt",class:"batch-action-item-icon"}),(0,c.eW)(" "+(0,h.v_)(e.$t("dashboard.delete")),1)]),_:1}),(0,c.bF)(p,{command:"download"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"download",class:"batch-action-item-icon"}),(0,c.eW)(" "+(0,h.v_)(e.$t("dashboard.download")),1)]),_:1}),(0,c.bF)(p,{command:"move"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"file-export",class:"batch-action-item-icon"}),(0,c.eW)(" "+(0,h.v_)(e.$t("dashboard.move")),1)]),_:1}),(0,c.bF)(p,{command:"tagManagement"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"tags",class:"batch-action-item-icon"}),(0,c.eW)(" "+(0,h.v_)(e.$t("dashboard.tagManagement")),1)]),_:1}),(0,c.bF)(p,{command:"ban"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"ban",class:"batch-action-item-icon"}),(0,c.eW)(" "+(0,h.v_)(e.$t("dashboard.addToBlacklist")),1)]),_:1}),(0,c.bF)(p,{command:"white"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"user-plus",class:"batch-action-item-icon"}),(0,c.eW)(" "+(0,h.v_)(e.$t("dashboard.addToWhitelist")),1)]),_:1})]),_:1})]),default:(0,c.k6)(()=>[(0,c.Lk)("span",ei,[(0,c.bF)(u,{icon:"ellipsis-h",class:(0,h.C4)(["header-icon",{disabled:0===n.selectedFiles.length}])},null,8,["class"])])]),_:1},8,["onCommand","disabled"]),(0,c.bF)(v,{disabled:s.disableTooltip,content:e.$t("dashboard.linkFormat"),placement:"bottom"},{default:(0,c.k6)(()=>[(0,c.Lk)("span",ti,[(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:"main-container"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",ai,[(0,c.Lk)("div",{class:"mobile-directory-trigger",onClick:t[3]||(t[3]=e=>n.showMobileDirectoryDrawer=!0)},[(0,c.bF)(u,{icon:"folder-open",class:"mobile-directory-icon"}),(0,c.Lk)("span",ii,(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",ni,[(0,c.bF)(_,{separator:"/"},{default:(0,c.k6)(()=>[(0,c.bF)(y,{onClick:t[4]||(t[4]=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,si)]),"card"===n.viewMode?((0,c.uX)(),(0,c.CE)("div",ri,[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",oi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",li,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",di,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.adjustSearchHint"):e.$t("dashboard.uploadHint")),1)])):((0,c.uX)(!0),(0,c.CE)(c.FK,{key:2},(0,c.pI)(s.paginatedTableData,(e,t)=>((0,c.uX)(),(0,c.CE)(c.FK,{key:t},[s.isFolder(e)?((0,c.uX)(),(0,c.Wv)(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))],512)):((0,c.uX)(),(0,c.CE)("div",ci,[(0,c.Lk)("div",hi,[(0,c.Lk)("div",ui,[(0,c.Lk)("span",{class:(0,h.C4)(["custom-checkbox",{checked:s.isSelectAll,indeterminate:s.isIndeterminate}]),onClick:t[5]||(t[5]=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",fi,(0,h.v_)(e.$t("dashboard.preview")),1),(0,c.Lk)("div",mi,(0,h.v_)(e.$t("dashboard.fileName")),1),(0,c.Lk)("div",pi,(0,h.v_)(e.$t("dashboard.tags")),1),(0,c.Lk)("div",gi,(0,h.v_)(e.$t("dashboard.channelType")),1),(0,c.Lk)("div",bi,(0,h.v_)(e.$t("dashboard.channelNameCol")),1),(0,c.Lk)("div",vi,(0,h.v_)(e.$t("dashboard.uploadAddress")),1),(0,c.Lk)("div",ki,(0,h.v_)(e.$t("dashboard.fileSize")),1),(0,c.Lk)("div",yi,(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",wi,[(0,c.bF)(u,{icon:"folder-open",class:"empty-icon"}),(0,c.Lk)("p",Fi,(0,h.v_)(s.hasSearchOrFilter?e.$t("dashboard.noMatchingFiles"):e.$t("dashboard.currentDirEmpty")),1),(0,c.Lk)("p",Ci,(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))],512)),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",Ti,[(0,c.Lk)("div",$i,[(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",Li,[(0,c.Lk)("span",Si,(0,h.v_)(e.$t("dashboard.totalPages",{count:s.realTotalPages})),1),(0,c.Lk)("div",xi,[(0,c.Lk)("span",null,(0,h.v_)(e.$t("dashboard.jumpTo")),1),(0,c.bF)(f,{modelValue:n.jumpPage,"onUpdate:modelValue":t[6]||(t[6]=e=>n.jumpPage=e),size:"small",class:"jump-input",onKeyup:(0,W.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[23]||(t[23]=[(0,c.eW)("GO",-1)])]),_:1},8,["onClick"])])])])]),_:1})]),_:1}),(0,c.bF)(D,{modelValue:n.showdetailDialog,"onUpdate:modelValue":t[7]||(t[7]=e=>n.showdetailDialog=e),file:n.detailFile,fileLink:s.getFileLink(n.detailFile?.name),urls:s.allUrl,onDownload:t[8]||(t[8]=e=>s.handleDownload(n.detailFile?.name)),onTagManagement:t[9]||(t[9]=e=>s.handleTagManagement(n.detailFile?.name)),onBlock:t[10]||(t[10]=e=>s.handleBlock(n.detailFile?.name)),onWhite:t[11]||(t[11]=e=>s.handleWhite(n.detailFile?.name)),onDelete:t[12]||(t[12]=e=>s.handleDetailDelete(n.detailFile?.name)),onMetadataUpdated:s.handleMetadataUpdated,onFileRenamed:s.handleFileRenamed},null,8,["modelValue","file","fileLink","urls","onMetadataUpdated","onFileRenamed"]),(0,c.bF)(U,{title:e.$t("dashboard.linkFormat"),modelValue:n.showUrlDialog,"onUpdate:modelValue":t[17]||(t[17]=e=>n.showUrlDialog=e),width:s.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,c.k6)(()=>[(0,c.Lk)("div",Di,[(0,c.Lk)("div",Ei,[(0,c.Lk)("span",Ai,(0,h.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,c.Lk)("div",Ii,[(0,c.bF)(A,{modelValue:n.defaultUrlFormat,"onUpdate:modelValue":t[13]||(t[13]=e=>n.defaultUrlFormat=e),class:"radio-card-group grid-2x2"},{default:(0,c.k6)(()=>[(0,c.bF)(E,{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)(E,{label:"mdUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code",class:"radio-icon"}),t[24]||(t[24]=(0,c.Lk)("span",null,"Markdown",-1))]),_:1}),(0,c.bF)(E,{label:"htmlUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[25]||(t[25]=(0,c.Lk)("span",null,"HTML",-1))]),_:1}),(0,c.bF)(E,{label:"bbUrl",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[26]||(t[26]=(0,c.Lk)("span",null,"BBCode",-1))]),_:1}),(0,c.bF)(E,{label:"tgId",class:"radio-card"},{default:(0,c.k6)(()=>[(0,c.bF)(u,{icon:"paper-plane",class:"radio-icon"}),t[27]||(t[27]=(0,c.Lk)("span",null,"TG File ID",-1))]),_:1}),(0,c.bF)(E,{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",Ui,[(0,c.Lk)("div",zi,[(0,c.Lk)("span",Wi,(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",Bi,[(0,c.Lk)("div",Pi,[(0,c.Lk)("span",Ri,(0,h.v_)(e.$t("settings.enableCustom")),1),(0,c.bF)(I,{modelValue:n.useCustomUrl,"onUpdate:modelValue":t[14]||(t[14]=e=>n.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===n.useCustomUrl?((0,c.uX)(),(0,c.CE)("div",Oi,[(0,c.Lk)("span",Ni,(0,h.v_)(e.$t("settings.customPrefix")),1),(0,c.bF)(f,{modelValue:n.customUrlPrefix,"onUpdate:modelValue":t[15]||(t[15]=e=>n.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,c.Q3)("",!0)])]),(0,c.Lk)("div",Mi,[(0,c.bF)(L,{type:"primary",onClick:t[16]||(t[16]=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)(B,{modelValue:n.showTagDialog,"onUpdate:modelValue":t[18]||(t[18]=e=>n.showTagDialog=e),fileId:n.currentTagFile,onTagsUpdated:s.handleTagsUpdated},null,8,["modelValue","fileId","onTagsUpdated"]),(0,c.bF)(P,{modelValue:n.showBatchTagDialog,"onUpdate:modelValue":t[19]||(t[19]=e=>n.showBatchTagDialog=e),selectedFiles:n.selectedFiles,onTagsUpdated:s.handleBatchTagsUpdated},null,8,["modelValue","selectedFiles","onTagsUpdated"]),(0,c.bF)(R,{modelValue:n.showMobileActionModal,"onUpdate:modelValue":t[20]||(t[20]=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)(O,{modelValue:n.showMobileDirectoryDrawer,"onUpdate:modelValue":t[21]||(t[21]=e=>n.showMobileDirectoryDrawer=e),currentPath:n.currentPath,onNavigate:s.navigateToFolder,onGoBack:s.handleGoBack},null,8,["modelValue","currentPath","onNavigate","onGoBack"]),(0,c.bF)(N,{modelValue:n.showMoveDialog,"onUpdate:modelValue":t[22]||(t[22]=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 ji=a(60782),Xi=a(44813),Ki=a.n(Xi),Zi=a(54047),Gi=(a(58335),a(46638));class Hi{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(Gi.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(Gi.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 qi=new Hi;var Qi=a(62388),Yi=a(48903),Ji=a(90144);function en(e,t){return!(e.right<=t.left||e.left>=t.right||e.bottom<=t.top||e.top>=t.bottom)}function tn(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 an(e){const{modes:t,mainSelector:a=".main-container",viewMode:i,items:n}=e,s=(0,Ji.KR)(!1),r=(0,Ji.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,Ji.BA)(i);return t[e]||void 0}function v(){const e=(0,Ji.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,Ji.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,Ji.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=tn(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,Ji.BA)(e.containerRef);if(!t)return;const a=(0,Ji.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=en(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,Ji.BA)(n);e.forEach(e=>{e.selected=!1})}s.value=!0,r.value=tn(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=tn(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,Ji.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 nn={name:"AdminDashBoard",mixins:[Yi.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:Za.A,TagManagementDialog:Me,BatchTagDialog:Ce,SkeletonLoader:ba,FileCard:na,FolderCard:fa,FileListItem:zt,FileDetailDialog:ct,MobileActionSheet:Q,MobileDirectoryDrawer:j,FilterDropdown:Ka,MoveFileDialog:z,LanguageSwitcher:Zi.A},setup(){const e=(0,Ji.KR)(null),t=(0,Ji.KR)(null),a=(0,Ji.KR)("card"),i=(0,Ji.KR)([]),{isDragging:n,selectionRect:s}=an({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,ji.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),qi.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),qi.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 qi.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)},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,Qi.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();qi.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();qi.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(Ki()),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 qi.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=qi.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 qi.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 sn=(0,I.A)(nn,[["render",Vi],["__scopeId","data-v-f746277c"]]);var rn=sn},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=198.7896d641.js.map \ No newline at end of file diff --git a/frontend-dist/js/198.7896d641.js.gz b/frontend-dist/js/198.7896d641.js.gz deleted file mode 100644 index 15df0fd86a8164f93ec5b56fb6b245d85dc65397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57683 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 diff --git a/frontend-dist/js/198.7896d641.js.map b/frontend-dist/js/198.7896d641.js.map deleted file mode 100644 index aac9207c..00000000 --- a/frontend-dist/js/198.7896d641.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/198.7896d641.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./node_modules/jszip/dist/jszip.min.js","webpack://sanyue_imghub/./src/utils/pathValidator.js","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cb6d","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue","webpack://sanyue_imghub/./src/components/dashboard/MoveFileDialog.vue?cba1","webpack://sanyue_imghub/./src/components/dashboard/MobileDirectoryDrawer.vue?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?f5b3","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/FileListItem.vue?446a","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?29fd","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?411c","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?df89","webpack://sanyue_imghub/./src/utils/fileManager.js","webpack://sanyue_imghub/./src/utils/dashboard/rectIntersects.js","webpack://sanyue_imghub/./src/utils/dashboard/useDragSelect.js","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue","webpack://sanyue_imghub/./src/views/AdminDashBoard.vue?40d2"],"sourcesContent":["import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\n if (invalidChars.test(path)) {\n return { \n valid: false, \n error: i18n.global.t('validation.invalidCharacters') \n };\n }\n \n return { valid: true };\n}\n","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"move-file-dialog-wrapper\"\n};\nconst _hoisted_2 = {\n class: \"move-dialog-content\"\n};\nconst _hoisted_3 = {\n class: \"move-path-input-container\"\n};\nconst _hoisted_4 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_5 = {\n class: \"dialog-footer\"\n};\nconst _hoisted_6 = {\n class: \"move-drawer-content\"\n};\nconst _hoisted_7 = {\n class: \"move-path-section\"\n};\nconst _hoisted_8 = {\n class: \"move-path-label\"\n};\nconst _hoisted_9 = {\n class: \"move-path-input-row\"\n};\nconst _hoisted_10 = {\n class: \"move-dialog-hint\"\n};\nconst _hoisted_11 = {\n key: 0,\n class: \"embedded-tree-section\"\n};\nconst _hoisted_12 = {\n class: \"tree-section-header\"\n};\nconst _hoisted_13 = {\n class: \"tree-section-title\"\n};\nconst _hoisted_14 = {\n class: \"tree-container\"\n};\nconst _hoisted_15 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_16 = {\n class: \"error-text\"\n};\nconst _hoisted_17 = {\n class: \"node-label\"\n};\nconst _hoisted_18 = {\n class: \"drawer-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_dialog, {\n key: 0,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n width: \"500px\",\n \"show-close\": true,\n class: \"move-dialog\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_5, [_createVNode(_component_el_button, {\n onClick: $options.handleClose\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, {\n prepend: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1)]),\n _: 1\n }, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_DirectoryTreePicker, {\n \"current-directory\": $props.currentDirectory,\n source: \"admin\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-picker-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])]), _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.$t('moveFile.hint')), 1)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"])) : (_openBlock(), _createBlock(_component_el_drawer, {\n key: 1,\n modelValue: $options.dialogVisible,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $options.dialogVisible = $event),\n title: $props.isBatchMove ? _ctx.$t('moveFile.batchTitle') : _ctx.$t('moveFile.title'),\n direction: \"btt\",\n size: \"auto\",\n \"show-close\": true,\n class: \"move-drawer\",\n onClose: $options.handleClose\n }, {\n footer: _withCtx(() => [_createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_button, {\n onClick: $options.handleClose,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.cancel')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n type: \"primary\",\n loading: $data.loading,\n onClick: $options.handleConfirm,\n class: \"footer-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.confirm')), 1)]),\n _: 1\n }, 8, [\"loading\", \"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.$t('moveFile.targetDirectory')), 1), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_input, {\n modelValue: $data.targetPath,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.targetPath = $event),\n placeholder: _ctx.$t('moveFile.targetPlaceholder'),\n class: \"move-path-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"]), _createVNode(_component_el_button, {\n class: \"directory-picker-trigger\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showTreePicker = true)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]), _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t('moveFile.hintMobile')), 1)]), $data.showTreePicker ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('moveFile.selectDirectory')), 1), _createVNode(_component_el_button, {\n text: \"\",\n onClick: _cache[4] || (_cache[4] = $event => $data.showTreePicker = false)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })]), _withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_14, [$data.treeError ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_16, _toDisplayString($data.treeError), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('moveFile.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleTreeNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_17, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.treeLoading]])])) : _createCommentVNode(\"\", true)])]),\n _: 1\n }, 8, [\"modelValue\", \"title\", \"onClose\"]))]);\n}","import DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'MoveFileDialog',\n components: {\n DirectoryTreePicker\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentDirectory: {\n type: String,\n default: ''\n },\n isBatchMove: {\n type: Boolean,\n default: false\n },\n initialPath: {\n type: String,\n default: '/'\n }\n },\n emits: ['update:modelValue', 'confirm', 'close'],\n data() {\n return {\n targetPath: '/',\n loading: false,\n windowWidth: window.innerWidth,\n // 移动端内嵌树相关\n showTreePicker: false,\n treeData: [],\n treeLoading: false,\n treeError: '',\n treeProps: {\n children: 'children',\n label: 'name'\n }\n };\n },\n computed: {\n dialogVisible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n isDesktop() {\n return this.windowWidth > 768;\n }\n },\n watch: {\n modelValue(newVal) {\n if (newVal) {\n this.targetPath = this.initialPath || '/';\n this.showTreePicker = false;\n }\n },\n showTreePicker(newVal) {\n if (newVal && !this.isDesktop) {\n this.fetchDirectoryTree();\n }\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n handleDirectorySelect(path) {\n this.targetPath = path;\n },\n handleConfirm() {\n this.$emit('confirm', this.targetPath);\n },\n handleClose() {\n this.$emit('update:modelValue', false);\n this.$emit('close');\n },\n // 移动端内嵌树相关方法\n async fetchDirectoryTree() {\n this.treeLoading = true;\n this.treeError = '';\n try {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.treeError = this.$t('moveFile.authFailed');\n } else {\n this.treeError = this.$t('moveFile.serverError');\n }\n return;\n }\n const data = await response.json();\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n this.treeError = this.$t('moveFile.loadTreeFailed');\n } finally {\n this.treeLoading = false;\n }\n },\n handleTreeNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.targetPath = path;\n this.showTreePicker = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MoveFileDialog.vue?vue&type=template&id=7aaa437c&scoped=true\"\nimport script from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\nexport * from \"./MoveFileDialog.vue?vue&type=script&lang=js\"\n\nimport \"./MoveFileDialog.vue?vue&type=style&index=0&id=7aaa437c&scoped=true&lang=css\"\nimport \"./MoveFileDialog.vue?vue&type=style&index=1&id=7aaa437c&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7aaa437c\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Transition as _Transition, withCtx as _withCtx, Teleport as _Teleport, createBlock as _createBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"mobile-drawer-header\"\n};\nconst _hoisted_2 = {\n class: \"mobile-drawer-title\"\n};\nconst _hoisted_3 = {\n class: \"mobile-drawer-content\"\n};\nconst _hoisted_4 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createBlock(_Teleport, {\n to: \"body\"\n }, [_createVNode(_Transition, {\n name: \"drawer-slide\"\n }, {\n default: _withCtx(() => [$props.modelValue ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-overlay\",\n onClick: _cache[3] || (_cache[3] = (...args) => $options.close && $options.close(...args))\n }, [_createElementVNode(\"div\", {\n class: \"mobile-drawer\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t('mobileDirectory.title')), 1), _createVNode(_component_font_awesome_icon, {\n icon: \"times\",\n class: \"mobile-drawer-close\",\n onClick: $options.close\n }, null, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: !$props.currentPath\n }]),\n onClick: _cache[0] || (_cache[0] = $event => $options.navigate(''))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.rootDirectory')), 1)], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.pathParts, (folder, index) => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: _normalizeClass([\"mobile-drawer-item\", {\n active: index === $options.pathParts.length - 1\n }]),\n style: _normalizeStyle({\n paddingLeft: (index + 1) * 16 + 16 + 'px'\n }),\n onClick: $event => $options.navigate($options.pathParts.slice(0, index + 1).join('/'))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(folder), 1)], 14, _hoisted_4);\n }), 128)), $props.currentPath ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"mobile-drawer-back\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.goBack && $options.goBack(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"mobile-drawer-item-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('mobileDirectory.goBack')), 1)])) : _createCommentVNode(\"\", true)])])])) : _createCommentVNode(\"\", true)]),\n _: 1\n })]);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nexport default {\n name: 'MobileDirectoryDrawer',\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n currentPath: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'navigate', 'goBack'],\n computed: {\n pathParts() {\n return this.currentPath.split('/').filter(Boolean);\n }\n },\n methods: {\n close() {\n this.$emit('update:modelValue', false);\n },\n navigate(path) {\n this.$emit('navigate', path);\n this.close();\n },\n goBack() {\n this.$emit('goBack');\n this.close();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./MobileDirectoryDrawer.vue?vue&type=template&id=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: \"user-plus\",\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}","/**\n * File_ID 验证器模块\n * 提供 File_ID 格式验证功能,用于重命名操作的前端校验\n * 非法字符规则复用 pathValidator 的字符集\n */\n\n/**\n * 非法字符正则表达式\n * 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\n * 与 pathValidator.js 保持一致\n */\nconst INVALID_CHARS = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\n\n/**\n * 验证 File_ID 格式\n * @param {string} newFileId - 新的 File_ID\n * @param {string} currentFileId - 当前 File_ID\n * @returns {{ valid: boolean, error?: string }}\n */\nexport function validateFileId(newFileId, currentFileId) {\n // 1. 空值/纯空白检测\n if (!newFileId || newFileId.trim() === '') {\n return {\n valid: false,\n error: '文件名不能为空'\n };\n }\n\n // 2. 与当前 File_ID 相同检测\n if (newFileId === currentFileId) {\n return {\n valid: false,\n error: '文件名未发生变化'\n };\n }\n\n // 3. 路径穿越检测\n if (newFileId.includes('..')) {\n return {\n valid: false,\n error: '文件名不能包含路径穿越字符 \"..\"'\n };\n }\n\n // 3.5 单独的 . 路径段检测(仅检查 /./ 或开头 ./,不检查末尾以允许继续输入如 .123)\n if (/\\/\\.\\//.test(newFileId) || /^\\.\\//.test(newFileId)) {\n return {\n valid: false,\n error: '文件名不能包含单独的 \".\" 路径段'\n };\n }\n\n // 4. 非法字符检测(复用 pathValidator 的字符规则)\n if (INVALID_CHARS.test(newFileId)) {\n return {\n valid: false,\n error: '文件名包含非法字符,请使用合法的文件名格式'\n };\n }\n\n // 5. 连续斜杠检测\n if (newFileId.includes('//')) {\n return {\n valid: false,\n error: '文件名不能包含连续的斜杠'\n };\n }\n\n return { valid: true };\n}\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=206e41fa&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=206e41fa&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-206e41fa\"]])\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=3ef86404&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=3ef86404&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-3ef86404\"]])\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 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=efb50eda&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=efb50eda&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-efb50eda\"]])\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=41b1a7c0&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=41b1a7c0&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-41b1a7c0\"]])\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, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, 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: \"el-dropdown-link\"\n};\nconst _hoisted_9 = {\n class: \"breadcrumb-container\"\n};\nconst _hoisted_10 = {\n class: \"mobile-directory-path\"\n};\nconst _hoisted_11 = {\n class: \"breadcrumb desktop-only\"\n};\nconst _hoisted_12 = [\"title\"];\nconst _hoisted_13 = {\n key: 0,\n class: \"content\",\n ref: \"cardContainerRef\"\n};\nconst _hoisted_14 = {\n key: 1,\n class: \"empty-state\"\n};\nconst _hoisted_15 = {\n class: \"empty-text\"\n};\nconst _hoisted_16 = {\n class: \"empty-hint\"\n};\nconst _hoisted_17 = {\n key: 1,\n class: \"list-view\",\n ref: \"listContainerRef\"\n};\nconst _hoisted_18 = {\n class: \"list-header\"\n};\nconst _hoisted_19 = {\n class: \"list-col list-col-checkbox\"\n};\nconst _hoisted_20 = {\n class: \"list-col list-col-preview\"\n};\nconst _hoisted_21 = {\n class: \"list-col list-col-name\"\n};\nconst _hoisted_22 = {\n class: \"list-col list-col-tags\"\n};\nconst _hoisted_23 = {\n class: \"list-col list-col-channel\"\n};\nconst _hoisted_24 = {\n class: \"list-col list-col-channel-name\"\n};\nconst _hoisted_25 = {\n class: \"list-col list-col-address\"\n};\nconst _hoisted_26 = {\n class: \"list-col list-col-size\"\n};\nconst _hoisted_27 = {\n class: \"list-col list-col-date\"\n};\nconst _hoisted_28 = {\n class: \"list-col list-col-actions\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"empty-state list-empty\"\n};\nconst _hoisted_30 = {\n class: \"empty-text\"\n};\nconst _hoisted_31 = {\n class: \"empty-hint\"\n};\nconst _hoisted_32 = {\n class: \"pagination-container\"\n};\nconst _hoisted_33 = {\n class: \"pagination-center\"\n};\nconst _hoisted_34 = {\n class: \"pagination-right\"\n};\nconst _hoisted_35 = {\n class: \"page-total\"\n};\nconst _hoisted_36 = {\n class: \"page-jump\"\n};\nconst _hoisted_37 = {\n class: \"dialog-section\"\n};\nconst _hoisted_38 = {\n class: \"section-header\"\n};\nconst _hoisted_39 = {\n class: \"section-title\"\n};\nconst _hoisted_40 = {\n class: \"section-content\"\n};\nconst _hoisted_41 = {\n class: \"dialog-section\"\n};\nconst _hoisted_42 = {\n class: \"section-header\"\n};\nconst _hoisted_43 = {\n class: \"section-title\"\n};\nconst _hoisted_44 = {\n class: \"section-content\"\n};\nconst _hoisted_45 = {\n class: \"setting-item\"\n};\nconst _hoisted_46 = {\n class: \"setting-label\"\n};\nconst _hoisted_47 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_48 = {\n class: \"setting-label\"\n};\nconst _hoisted_49 = {\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_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.selectPage'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $options.selectPageIcon,\n class: \"header-icon\",\n onClick: $options.handleSelectPage\n }, null, 8, [\"icon\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_dropdown, {\n onCommand: $options.handleBatchAction,\n \"hide-on-click\": false,\n disabled: $data.selectedFiles.length === 0\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"copy\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\",\n class: \"batch-action-item-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboard.copy')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"delete\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\",\n class: \"batch-action-item-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboard.delete')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"download\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"download\",\n class: \"batch-action-item-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboard.download')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"move\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"file-export\",\n class: \"batch-action-item-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboard.move')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"tagManagement\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"tags\",\n class: \"batch-action-item-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboard.tagManagement')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"ban\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ban\",\n class: \"batch-action-item-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboard.addToBlacklist')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"white\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"user-plus\",\n class: \"batch-action-item-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('dashboard.addToWhitelist')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-h\",\n class: _normalizeClass([\"header-icon\", {\n disabled: $data.selectedFiles.length === 0\n }])\n }, null, 8, [\"class\"])])]),\n _: 1\n }, 8, [\"onCommand\", \"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('dashboard.linkFormat'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"span\", _hoisted_8, [_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: \"main-container\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", {\n class: \"mobile-directory-trigger\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showMobileDirectoryDrawer = true)\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"mobile-directory-icon\"\n }), _createElementVNode(\"span\", _hoisted_10, _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_11, [_createVNode(_component_el_breadcrumb, {\n separator: \"/\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_breadcrumb_item, {\n onClick: _cache[4] || (_cache[4] = $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_12)]), $data.viewMode === 'card' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [$data.loading ? (_openBlock(), _createBlock(_component_SkeletonLoader, {\n key: 0,\n type: \"card\",\n count: 15\n })) : $options.paginatedTableData.length === 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_15, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_16, _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))], 512)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"div\", _hoisted_19, [_createElementVNode(\"span\", {\n class: _normalizeClass([\"custom-checkbox\", {\n 'checked': $options.isSelectAll,\n 'indeterminate': $options.isIndeterminate\n }]),\n onClick: _cache[5] || (_cache[5] = $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_20, _toDisplayString(_ctx.$t('dashboard.preview')), 1), _createElementVNode(\"div\", _hoisted_21, _toDisplayString(_ctx.$t('dashboard.fileName')), 1), _createElementVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.$t('dashboard.tags')), 1), _createElementVNode(\"div\", _hoisted_23, _toDisplayString(_ctx.$t('dashboard.channelType')), 1), _createElementVNode(\"div\", _hoisted_24, _toDisplayString(_ctx.$t('dashboard.channelNameCol')), 1), _createElementVNode(\"div\", _hoisted_25, _toDisplayString(_ctx.$t('dashboard.uploadAddress')), 1), _createElementVNode(\"div\", _hoisted_26, _toDisplayString(_ctx.$t('dashboard.fileSize')), 1), _createElementVNode(\"div\", _hoisted_27, _toDisplayString(_ctx.$t('dashboard.uploadTime')), 1), _createElementVNode(\"div\", _hoisted_28, _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_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-open\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", _hoisted_30, _toDisplayString($options.hasSearchOrFilter ? _ctx.$t('dashboard.noMatchingFiles') : _ctx.$t('dashboard.currentDirEmpty')), 1), _createElementVNode(\"p\", _hoisted_31, _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))], 512)), $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_32, [_createElementVNode(\"div\", _hoisted_33, [_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_34, [_createElementVNode(\"span\", _hoisted_35, _toDisplayString(_ctx.$t('dashboard.totalPages', {\n count: $options.realTotalPages\n })), 1), _createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('dashboard.jumpTo')), 1), _createVNode(_component_el_input, {\n modelValue: $data.jumpPage,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $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[23] || (_cache[23] = [_createTextVNode(\"GO\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"])])])])]),\n _: 1\n })]),\n _: 1\n }), _createVNode(_component_FileDetailDialog, {\n modelValue: $data.showdetailDialog,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.showdetailDialog = $event),\n file: $data.detailFile,\n fileLink: $options.getFileLink($data.detailFile?.name),\n urls: $options.allUrl,\n onDownload: _cache[8] || (_cache[8] = $event => $options.handleDownload($data.detailFile?.name)),\n onTagManagement: _cache[9] || (_cache[9] = $event => $options.handleTagManagement($data.detailFile?.name)),\n onBlock: _cache[10] || (_cache[10] = $event => $options.handleBlock($data.detailFile?.name)),\n onWhite: _cache[11] || (_cache[11] = $event => $options.handleWhite($data.detailFile?.name)),\n onDelete: _cache[12] || (_cache[12] = $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[17] || (_cache[17] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"div\", _hoisted_38, [_createElementVNode(\"span\", _hoisted_39, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_40, [_createVNode(_component_el_radio_group, {\n modelValue: $data.defaultUrlFormat,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $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[24] || (_cache[24] = _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[25] || (_cache[25] = _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[26] || (_cache[26] = _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[27] || (_cache[27] = _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_41, [_createElementVNode(\"div\", _hoisted_42, [_createElementVNode(\"span\", _hoisted_43, _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_44, [_createElementVNode(\"div\", _hoisted_45, [_createElementVNode(\"span\", _hoisted_46, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_47, [_createElementVNode(\"span\", _hoisted_48, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_49, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[16] || (_cache[16] = $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[18] || (_cache[18] = $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[19] || (_cache[19] = $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[20] || (_cache[20] = $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[21] || (_cache[21] = $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[22] || (_cache[22] = $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}","// 文件管理器工具类\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { ElMessage } from 'element-plus';\nimport i18n from '@/locales';\n\nclass FileManager {\n constructor() {\n this.FILE_LIST_PATH = 'data/fileList.json';\n this.fileListCache = null;\n this.storageWarningShown = false;\n }\n\n // 从本地存储读取文件列表\n getLocalFileList() {\n const fileList = this.getMutableFileList();\n return {\n ...fileList,\n files: [...(fileList.files || [])],\n directories: [...(fileList.directories || [])],\n };\n }\n\n getMutableFileList() {\n if (this.fileListCache) {\n return this.fileListCache;\n }\n\n try {\n const fileList = localStorage.getItem(this.FILE_LIST_PATH);\n this.fileListCache = fileList ? JSON.parse(fileList) : this.createEmptyFileList();\n return this.fileListCache;\n } catch (error) {\n console.error('Error reading local file list:', error);\n this.fileListCache = this.createEmptyFileList();\n return this.fileListCache;\n }\n }\n\n // 更新内存缓存,并尽量持久化到 localStorage\n updateFileListCache(fileList) {\n this.fileListCache = fileList || this.createEmptyFileList();\n const persisted = this.persistFileListCache();\n\n return {\n cacheUpdated: true,\n persisted,\n };\n }\n\n persistFileListCache() {\n try {\n localStorage.setItem(this.FILE_LIST_PATH, JSON.stringify(this.fileListCache));\n return true;\n } catch (error) {\n this.handleStoragePersistError(error);\n return false;\n }\n }\n\n createEmptyFileList() {\n return { files: [], directories: [] };\n }\n\n handleStoragePersistError(error) {\n console.warn('File list is kept in memory because localStorage persistence failed:', error);\n\n try {\n localStorage.removeItem(this.FILE_LIST_PATH);\n } catch (removeError) {\n console.warn('Failed to remove stale file list cache:', removeError);\n }\n\n if (!this.storageWarningShown) {\n this.storageWarningShown = true;\n ElMessage.warning(i18n.global.t('dashboard.fileListMemoryCacheWarning'));\n }\n }\n\n // 添加新文件到列表\n addFile(newFile) {\n try {\n const fileList = this.getMutableFileList();\n fileList.files.push(newFile);\n return this.updateFileListCache(fileList).cacheUpdated;\n } catch (error) {\n console.error('Error adding file:', error);\n return false;\n }\n }\n\n // 添加新文件夹\n addFolder(folderName) {\n try {\n const fileList = this.getMutableFileList();\n if (!fileList.directories.includes(folderName)) {\n fileList.directories.push(folderName);\n return this.updateFileListCache(fileList).cacheUpdated;\n }\n return false; // 文件夹已存在\n } catch (error) {\n console.error('Error adding folder:', error);\n return false;\n }\n }\n\n // 移动文件或文件夹\n moveFile(oldPath, newPath, isFolder = false, currentPath = '') {\n try {\n let fileList = this.getMutableFileList();\n \n if (isFolder) {\n // 更新目录列表\n const oldFolderIndex = fileList.directories.indexOf(oldPath);\n if (oldFolderIndex !== -1) {\n fileList.directories.splice(oldFolderIndex, 1);\n }\n\n } else {\n // 移动单个文件\n const fileIndex = fileList.files.findIndex(file => file.name === oldPath);\n if (fileIndex !== -1) {\n // 从旧位置移除\n fileList.files.splice(fileIndex, 1);\n }\n\n }\n\n // 如果新路径包含当前目录的直接子目录,则添加直接子目录\n if (newPath.startsWith(currentPath)) {\n const pathArray = newPath.substring(currentPath.length).split('/');\n if (pathArray.length > 1) {\n const newFolder = currentPath + pathArray[0];\n if (!fileList.directories.includes(newFolder)) {\n fileList.directories.push(newFolder);\n }\n }\n }\n\n return this.updateFileListCache(fileList).cacheUpdated;\n } catch (error) {\n console.error('Error moving file:', error);\n return false;\n }\n }\n\n // 从列表中删除文件\n removeFile(fileName) {\n try {\n let fileList = this.getMutableFileList();\n fileList.files = fileList.files.filter(file => file.name !== fileName);\n return this.updateFileListCache(fileList).cacheUpdated;\n } catch (error) {\n console.error('Error removing file:', error);\n return false;\n }\n }\n\n // 从列表中删除文件夹(同时删除该文件夹下的所有文件)\n removeFolder(folderName) {\n try {\n let fileList = this.getMutableFileList();\n fileList.files = fileList.files.filter(file => !file.name.startsWith(folderName + '/'));\n fileList.directories = fileList.directories.filter(dir => dir !== folderName);\n return this.updateFileListCache(fileList).cacheUpdated;\n } catch (error) {\n console.error('Error removing folder:', error);\n return false;\n }\n }\n\n // 获取指定目录下的文件和子目录\n getFilesInFolder(folderName) {\n try {\n const fileList = this.getMutableFileList();\n const files = fileList.files.filter(file => file.name.startsWith(folderName + '/'));\n const subdirectories = fileList.directories.filter(dir => dir.startsWith(folderName + '/'));\n return { files, directories: subdirectories };\n } catch (error) {\n console.error('Error getting files in folder:', error);\n return { files: [], directories: [] };\n }\n }\n\n // 构建筛选参数URL\n buildFilterParams(filters) {\n let params = '';\n // 访问状态筛选(综合判断)\n if (filters.accessStatus && filters.accessStatus.length > 0) {\n params += `&accessStatus=${encodeURIComponent(filters.accessStatus.join(','))}`;\n }\n // 黑白名单筛选(直接使用 ListType 字段)\n if (filters.listType && filters.listType.length > 0) {\n params += `&listType=${encodeURIComponent(filters.listType.join(','))}`;\n }\n if (filters.label && filters.label.length > 0) {\n params += `&label=${encodeURIComponent(filters.label.join(','))}`;\n }\n if (filters.fileType && filters.fileType.length > 0) {\n params += `&fileType=${encodeURIComponent(filters.fileType.join(','))}`;\n }\n if (filters.channel && filters.channel.length > 0) {\n params += `&channel=${encodeURIComponent(filters.channel.join(','))}`;\n }\n if (filters.channelName && filters.channelName.length > 0) {\n params += `&channelName=${encodeURIComponent(filters.channelName.join(','))}`;\n }\n return params;\n }\n\n // 更新文件列表\n async refreshFileList(dir, search = '', includeTags = '', excludeTags = '', filters = {}) {\n search = search.trim();\n try {\n let url = `/api/manage/list?count=60&dir=${dir}&search=${encodeURIComponent(search)}`;\n if (includeTags) {\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\n }\n if (excludeTags) {\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\n }\n // 添加筛选参数(支持多选)\n url += this.buildFilterParams(filters);\n \n const response = await fetchWithAuth(url, {\n method: 'GET',\n });\n const newFileList = await response.json();\n if (!newFileList.isIndexedResponse) {\n ElMessage.warning(i18n.global.t('dashboard.indexingWarning'));\n }\n // 保存包含新字段的完整数据\n return this.updateFileListCache(newFileList).cacheUpdated;\n } catch (error) {\n console.error('Error refreshing file list:', error);\n return false;\n }\n }\n\n // 读取更多数据\n async loadMoreFiles(dir, search = '', includeTags = '', excludeTags = '', count = 60, filters = {}) {\n search = search.trim();\n try {\n const fileList = this.getMutableFileList();\n const start = fileList.files.length;\n\n let url = `/api/manage/list?dir=${dir}&start=${start}&count=${count}&search=${encodeURIComponent(search)}`;\n if (includeTags) {\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\n }\n if (excludeTags) {\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\n }\n // 添加筛选参数(支持多选)\n url += this.buildFilterParams(filters);\n\n const response = await fetchWithAuth(url, {\n method: 'GET',\n });\n \n const moreFiles = await response.json();\n fileList.files.push(...moreFiles.files);\n return this.updateFileListCache(fileList).cacheUpdated;\n } catch (error) {\n console.error('Error loading more files:', error);\n return { files: [], directories: [] };\n }\n }\n}\n\nexport const fileManager = new FileManager();\n","/**\n * 矩形工具函数\n * 用于框选(rubber-band selection)功能中的矩形计算和相交检测\n */\n\n/**\n * 判断两个矩形是否相交\n * @param {Object} rectA - { left, top, right, bottom }\n * @param {Object} rectB - { left, top, right, bottom }\n * @returns {boolean} 是否存在重叠区域\n */\nexport function rectIntersects(rectA, rectB) {\n return !(\n rectA.right <= rectB.left ||\n rectA.left >= rectB.right ||\n rectA.bottom <= rectB.top ||\n rectA.top >= rectB.bottom\n );\n}\n\n/**\n * 根据起始点和当前点计算选区矩形\n * @param {Object} start - { x, y } 起始鼠标坐标\n * @param {Object} current - { x, y } 当前鼠标坐标\n * @returns {Object} { left, top, width, height, right, bottom }\n */\nexport function calcSelectionRect(start, current) {\n const left = Math.min(start.x, current.x);\n const top = Math.min(start.y, current.y);\n const width = Math.abs(current.x - start.x);\n const height = Math.abs(current.y - start.y);\n return { left, top, width, height, right: left + width, bottom: top + height };\n}\n","import { ref, watch, onMounted, onBeforeUnmount, toValue } from 'vue';\nimport { rectIntersects, calcSelectionRect } from './rectIntersects.js';\n\n/**\n * Vue 3 Composable:框选(rubber-band selection)核心逻辑,支持多视图模式\n *\n * @param {Object} options\n * @param {Object} options.modes - Per-view-mode configuration\n * @param {Object} options.modes.card - Card view config\n * @param {import('vue').Ref} options.modes.card.containerRef\n * @param {string} options.modes.card.itemSelector - e.g. '.img-card'\n * @param {Object} options.modes.list - List view config\n * @param {import('vue').Ref} options.modes.list.containerRef\n * @param {string} options.modes.list.itemSelector - e.g. '.list-item'\n * @param {string} [options.mainSelector='.main-container'] - 主内容区域的 CSS 选择器,框选只能从该区域内开始\n * @param {import('vue').Ref} options.viewMode - 当前视图模式\n * @param {import('vue').Ref} options.items - 当前页的数据项(paginatedTableData)\n * @returns {{ isDragging: import('vue').Ref, selectionRect: import('vue').Ref }}\n */\nexport function useDragSelect(options) {\n const {\n modes,\n mainSelector = '.main-container',\n viewMode,\n items,\n } = options;\n\n // --- Reactive state ---\n const isDragging = ref(false);\n const selectionRect = ref({ left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 });\n\n // --- Internal (non-reactive) state ---\n let startPoint = null; // { x, y } viewport coordinates at mousedown\n let preSelectSnapshot = []; // boolean[] snapshot of items[i].selected before drag\n let isAppendMode = false; // whether Shift/Ctrl/Cmd was held at mousedown\n\n // --- Enable/disable state ---\n const MOBILE_BREAKPOINT = 768; // px – at or below this width, drag-select is disabled\n let listenerAttached = false; // tracks whether the container mousedown listener is active\n\n // --- Auto-scroll state ---\n const EDGE_THRESHOLD = 50; // px from viewport edge to trigger auto-scroll\n const SCROLL_SPEED = 10; // px per frame to scroll\n let autoScrollTimer = null; // requestAnimationFrame ID for auto-scroll\n\n // --- Text selection prevention state ---\n let savedUserSelect = ''; // saved document.body.style.userSelect before drag\n\n // ------------------------------------------------------------------\n // Mode resolution helper\n // ------------------------------------------------------------------\n\n /**\n * Returns the configuration for the current viewMode.\n * @returns {{ containerRef: import('vue').Ref, itemSelector: string } | undefined}\n */\n function getActiveConfig() {\n const mode = toValue(viewMode);\n return modes[mode] || undefined;\n }\n\n // ------------------------------------------------------------------\n // Enable / disable helpers\n // ------------------------------------------------------------------\n\n /**\n * Determine whether drag-select should be enabled.\n * Returns true when viewMode is 'card' or 'list' AND window width > 768px.\n */\n function shouldEnable() {\n const mode = toValue(viewMode);\n return (mode === 'card' || mode === 'list') && window.innerWidth > MOBILE_BREAKPOINT;\n }\n\n /**\n * Conditionally attach or detach the container listener based on shouldEnable().\n * Also cancels any active drag when detaching.\n */\n function syncListenerState() {\n if (shouldEnable()) {\n if (!listenerAttached) {\n attachContainerListener();\n }\n } else {\n if (listenerAttached) {\n cancelDrag();\n detachContainerListener();\n }\n }\n }\n\n // ------------------------------------------------------------------\n // Helpers\n // ------------------------------------------------------------------\n\n /**\n * 判断 mousedown 目标是否为可启动框选的空白区域。\n * 必须在主内容区域内,且不在卡片、交互元素上。\n */\n function isBlankArea(event) {\n const target = event.target;\n // 必须在主内容区域(el-main)内\n const mainArea = target.closest(mainSelector);\n if (!mainArea) return false;\n // 排除当前模式的可选元素\n const config = getActiveConfig();\n if (config) {\n const itemEl = target.closest(config.itemSelector);\n if (itemEl) {\n const container = toValue(config.containerRef);\n if (container && container.contains(itemEl)) {\n return false;\n }\n }\n }\n // 排除交互元素(按钮、输入框、链接、下拉菜单、分页等)\n const interactive = target.closest('button, a, input, .el-input, .el-dropdown, .el-checkbox, .el-breadcrumb, .el-pagination, .el-pager, .header-content, .breadcrumb-container');\n if (interactive) {\n return false;\n }\n return true;\n }\n\n /**\n * Determine whether a modifier key for append-select is pressed.\n */\n function hasAppendModifier(event) {\n return event.shiftKey || event.ctrlKey || event.metaKey;\n }\n\n /**\n * Save a snapshot of the current selected state for all items.\n */\n function saveSnapshot() {\n const currentItems = toValue(items);\n preSelectSnapshot = currentItems.map((item) => !!item.selected);\n }\n\n // ------------------------------------------------------------------\n // Auto-scroll helpers\n // ------------------------------------------------------------------\n\n /** The last known clientY during a drag – updated by onMouseMove. */\n let lastClientY = 0;\n\n /**\n * Start the auto-scroll loop. On each animation frame we check whether the\n * mouse is within EDGE_THRESHOLD of the top or bottom of the viewport and\n * scroll accordingly. The selection rectangle and card hit-testing are also\n * updated after each scroll step so the visual feedback stays in sync.\n */\n function startAutoScroll() {\n if (autoScrollTimer !== null) return; // already running\n\n function scrollStep() {\n const viewportHeight = window.innerHeight;\n let scrollDelta = 0;\n\n if (lastClientY >= viewportHeight - EDGE_THRESHOLD) {\n // Near bottom edge → scroll down\n scrollDelta = SCROLL_SPEED;\n } else if (lastClientY <= EDGE_THRESHOLD) {\n // Near top edge → scroll up\n scrollDelta = -SCROLL_SPEED;\n }\n\n if (scrollDelta !== 0) {\n window.scrollBy(0, scrollDelta);\n\n // After scrolling, the viewport-relative positions of cards change,\n // but the mouse hasn't moved. We need to adjust the start point so\n // the selection rectangle accounts for the scroll offset, then\n // re-run hit-testing.\n if (startPoint) {\n startPoint.y -= scrollDelta;\n selectionRect.value = calcSelectionRect(startPoint, { x: selectionRect.value.right >= startPoint.x ? selectionRect.value.right : selectionRect.value.left, y: lastClientY });\n updateSelection();\n }\n }\n\n // Continue the loop\n autoScrollTimer = requestAnimationFrame(scrollStep);\n }\n\n autoScrollTimer = requestAnimationFrame(scrollStep);\n }\n\n /**\n * Stop the auto-scroll loop and clean up the timer.\n */\n function stopAutoScroll() {\n if (autoScrollTimer !== null) {\n cancelAnimationFrame(autoScrollTimer);\n autoScrollTimer = null;\n }\n }\n\n // ------------------------------------------------------------------\n // Text selection prevention helpers\n // ------------------------------------------------------------------\n\n /**\n * Disable text selection on the document body during drag.\n */\n function disableTextSelection() {\n savedUserSelect = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n }\n\n /**\n * Restore the original text selection behavior on the document body.\n */\n function restoreTextSelection() {\n document.body.style.userSelect = savedUserSelect;\n }\n\n /**\n * Update the selected state of every item based on the current selection rectangle.\n */\n function updateSelection() {\n const config = getActiveConfig();\n if (!config) return;\n\n const container = toValue(config.containerRef);\n if (!container) return;\n\n const currentItems = toValue(items);\n const rect = selectionRect.value;\n\n // Build the selection rect in {left, top, right, bottom} format for intersection test\n const selRect = {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n };\n\n // Query all item DOM elements inside the container using the active mode's selector\n const itemElements = container.querySelectorAll(config.itemSelector);\n\n // Iterate over items and corresponding DOM elements\n currentItems.forEach((item, index) => {\n const itemEl = itemElements[index];\n if (!itemEl) return;\n\n const itemRect = itemEl.getBoundingClientRect();\n const itemBounds = {\n left: itemRect.left,\n top: itemRect.top,\n right: itemRect.right,\n bottom: itemRect.bottom,\n };\n\n const intersects = rectIntersects(selRect, itemBounds);\n\n if (isAppendMode) {\n // Append mode: keep original state, toggle on if intersects\n // If originally selected, stay selected regardless\n // If not originally selected, select if intersects\n if (preSelectSnapshot[index]) {\n item.selected = true;\n } else {\n item.selected = intersects;\n }\n } else {\n // Non-append mode: selected = intersects only\n item.selected = intersects;\n }\n });\n }\n\n // ------------------------------------------------------------------\n // Mouse event handlers\n // ------------------------------------------------------------------\n\n function onMouseDown(event) {\n // 仅响应鼠标左键\n if (event.button !== 0) return;\n\n // 点击在卡片上时不启动框选\n if (!isBlankArea(event)) return;\n\n // Record start point (viewport coordinates)\n startPoint = { x: event.clientX, y: event.clientY };\n\n // Determine append mode from modifier keys at the moment of mousedown\n isAppendMode = hasAppendModifier(event);\n\n // 保存选中状态快照\n saveSnapshot();\n\n // 非追加模式下先清除所有选中\n if (!isAppendMode) {\n const currentItems = toValue(items);\n currentItems.forEach((item) => {\n item.selected = false;\n });\n }\n\n // Start dragging\n isDragging.value = true;\n selectionRect.value = calcSelectionRect(startPoint, startPoint);\n\n // 防止文本选中\n disableTextSelection();\n\n // Attach document-level listeners for move and up\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n function onMouseMove(event) {\n if (!isDragging.value || !startPoint) return;\n\n const currentPoint = { x: event.clientX, y: event.clientY };\n\n // Track last clientY for auto-scroll\n lastClientY = event.clientY;\n\n // Update selection rectangle\n selectionRect.value = calcSelectionRect(startPoint, currentPoint);\n\n // Update card selection based on intersection\n updateSelection();\n\n // Start or continue auto-scroll if near viewport edges\n const viewportHeight = window.innerHeight;\n if (lastClientY <= EDGE_THRESHOLD || lastClientY >= viewportHeight - EDGE_THRESHOLD) {\n startAutoScroll();\n } else {\n stopAutoScroll();\n }\n }\n\n function onMouseUp(_event) {\n if (!isDragging.value) return;\n\n // 停止自动滚动\n stopAutoScroll();\n\n // 恢复文本选中\n restoreTextSelection();\n\n // End dragging\n isDragging.value = false;\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\n startPoint = null;\n\n // Clean up document-level listeners\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n // ------------------------------------------------------------------\n // Lifecycle: attach / detach container listener\n // ------------------------------------------------------------------\n\n function attachContainerListener() {\n if (!listenerAttached) {\n document.addEventListener('mousedown', onMouseDown);\n listenerAttached = true;\n }\n }\n\n function detachContainerListener() {\n if (listenerAttached) {\n document.removeEventListener('mousedown', onMouseDown);\n listenerAttached = false;\n }\n }\n\n /**\n * Force-stop any in-progress drag (e.g. when viewMode changes).\n */\n function cancelDrag() {\n if (isDragging.value) {\n stopAutoScroll();\n restoreTextSelection();\n isDragging.value = false;\n selectionRect.value = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 };\n startPoint = null;\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n }\n\n // 监听 viewMode 变化,启用/禁用框选\n // Always cancel any in-progress drag when viewMode changes (Requirement 2.3),\n // then re-evaluate whether listeners should be attached for the new mode.\n watch(\n () => toValue(viewMode),\n () => {\n cancelDrag();\n syncListenerState();\n }\n );\n\n // --- Window resize handler ---\n function onWindowResize() {\n syncListenerState();\n }\n\n onMounted(() => {\n // 仅在满足条件时启用\n if (shouldEnable()) {\n attachContainerListener();\n }\n // Always listen for resize to dynamically enable/disable\n window.addEventListener('resize', onWindowResize);\n });\n\n onBeforeUnmount(() => {\n cancelDrag();\n restoreTextSelection();\n stopAutoScroll();\n detachContainerListener();\n window.removeEventListener('resize', onWindowResize);\n });\n\n return {\n isDragging,\n selectionRect,\n };\n}\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 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 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 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=f746277c&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=f746277c&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-f746277c\"]])\n\nexport default __exports__"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","key","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","visible","popoverVisible","$event","placement","width","trigger","transition","reference","onClick","$slots","undefined","default","error","icon","type","size","fetchDirectoryTree","$t","_","ref","data","treeData","props","treeProps","currentDirectory","onNodeClick","handleNodeClick","node","path","expanded","name","loading","args","openDrawer","modelValue","drawerVisible","direction","title","String","source","validator","value","includes","children","label","windowWidth","window","innerWidth","computed","this","watch","newVal","setTimeout","$refs","treeRef","store","nodesMap","treeRefMobile","$nextTick","setCurrentKey","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","methods","response","fetchWithAuth","method","ok","status","json","axios","get","withAuthCode","tree","err","console","startsWith","$emit","__exports__","e","module","exports","s","a","o","h","u","r","t","l","n","Error","code","i","call","length","d","c","p","encode","f","getTypeOf","charCodeAt","push","charAt","join","decode","substr","replace","uint8array","Uint8Array","Array","indexOf","compressedSize","uncompressedSize","crc32","compression","compressedContent","prototype","getContentWorker","Promise","resolve","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","flush","cleanUp","raw","level","onData","pako","A","fromCharCode","file","O","utf8encode","I","m","g","b","v","y","w","k","x","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","B","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","shift","CENTRAL_DIRECTORY_END","prepareNextSource","previous","isPaused","pause","resume","registerPrevious","end","generatedError","lock","generateWorker","platform","forEach","options","_compressWorker","arguments","files","Object","create","root","clone","loadAsync","support","defaults","version","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","reject","prepareContent","then","load","all","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","from","allocBuffer","alloc","fill","isBuffer","Date","toUpperCase","parseInt","slice","substring","lastIndexOf","toString","filter","test","folder","remove","generate","generateInternalStream","mimeType","toLowerCase","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","index","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","max","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","Math","min","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","hasOwnProperty","nodestream","_internalType","_outputType","_mimeType","newBlob","concat","apply","set","_worker","objectMode","array","string","arraybuffer","ArrayBuffer","nodebuffer","blob","Blob","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","floor","buffer","byteLength","split","pop","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","FileReader","onload","target","result","onerror","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","id","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","abs","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","async","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","port1","onmessage","port2","postMessage","global","TypeError","state","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","finally","constructor","catch","race","immediate","assign","chunkSize","windowBits","memLevel","strategy","to","gzip","msg","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","input","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","L","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","j","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","last","havedict","flags","check","total","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","q","J","getPrototypeOf","process","nextTick","importScripts","random","attachEvent","Function","callback","clearImmediate","validateFolderPath","strict","trim","valid","i18n","dotPattern","invalidChars","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_component_el_input","_component_DirectoryTreePicker","_component_el_dialog","dialogVisible","isBatchMove","onClose","handleClose","footer","handleConfirm","targetPath","placeholder","prepend","onSelect","handleDirectorySelect","showTreePicker","treeError","handleTreeNodeClick","treeLoading","components","DirectoryTreePicker","Boolean","initialPath","emits","val","close","active","currentPath","navigate","pathParts","style","paddingLeft","goBack","isFolder","handleAction","action","_component_el_tag","_component_el_tab_pane","_component_el_alert","_component_el_tabs","dialogWidth","activeTab","count","fileCount","inputTag","onKeyup","handleAddInputTag","onInput","handleInputChange","clearable","showSuggestions","suggestions","tag","selectSuggestion","tagsToAdd","closable","removeFromToAdd","executeAddTags","disabled","commonTags","handleRemoveCommonTag","description","center","handleClearAllTags","selectedFiles","required","debounceTimer","selectedFilesOnly","fileIds","map","loadCommonTags","resetData","newTab","tagPromises","encodeURIComponent","responses","allTags","tags","every","clearTimeout","fetchSuggestions","prefix","warning","splice","headers","body","JSON","stringify","success","updated","confirm","confirmButtonText","cancelButtonText","executeClearTags","info","_component_Loading","_component_el_icon","handleAddTag","currentTags","handleRemoveTag","popularTags","handleAddPopularTag","loadingPopularTags","Loading","fileId","loadFileTags","loadPopularTags","message","_component_el_image","_component_el_descriptions_item","_component_el_descriptions","_component_el_form_item","_component_el_form","isEditing","round","startEdit","openRenameDialog","saveMetadata","editSaving","cancelEdit","onTabClick","handleTabClick","urls","originUrl","readonly","handleUrlClick","mdUrl","htmlUrl","bbUrl","metadata","TgFileId","tgId","S3Location","S3CdnFileUrl","isVideo","src","fileLink","autoplay","muted","loop","openImageLink","isAudio","controls","isImage","fit","lazy","border","column","descColumn","editForm","FileName","FileType","fileSizeDisplay","imageDimensions","Width","Height","orientationIcon","uploadTime","Channel","ChannelName","accessTagType","accessType","Label","UploadIP","UploadAddress","Tags","showRenameDialog","closeRenameDialog","submitRename","renameSaving","renameValidation","onSubmit","renameForm","newFileId","validateRenameInput","INVALID_CHARS","validateFileId","currentFileId","fileType","endsWith","TimeStamp","toLocaleString","listType","ListType","height","ratio","sizeBytes","FileSizeBytes","sizeMB","FileSize","toFixed","handleVideoClick","video","paused","play","select","navigator","clipboard","writeText","open","oldFileId","_component_el_tooltip","onTouchstart","onTouchend","onTouchmove","localSelected","toggleSelect","handlePreviewClick","preload","decoding","displayName","fileNameStart","fileNameEnd","item","tagIndex","background","getTagColor","channelTag","uploadDate","content","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","requestFullscreen","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","isFullscreen","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","currentTime","isEnter","folderName","showActions","Number","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_component_el_badge","_component_el_checkbox_group","_component_el_dropdown_menu","_component_el_dropdown","dropdown","localFilters","accessStatus","handleFilterChange","accessStatusOptions","option","listTypeOptions","labelOptions","fileTypeOptions","channel","channelOptions","channelNameOptions","channelName","groupedChannelNames","group","typeLabel","channels","clearFilters","activeFilterCount","hidden","filters","values","reduce","arr","groups","handler","newFilters","isArray","deep","_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","_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_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","command","sortIcon","selectPageIcon","handleSelectPage","handleBatchAction","showUrlDialog","viewMode","toggleViewMode","handleLogout","showMobileDirectoryDrawer","separator","navigateToFolder","paginatedTableData","hasSearchOrFilter","isSearchMode","onEnter","enterFolder","onCopy","handleFolderCopy","onMove","handleMove","onDelete","handleDelete","handleFolderTouchStart","handleTouchEnd","getFileLink","onDetail","openDetailDialog","handleCopy","onDownload","handleDownload","handleTouchStart","isSelectAll","isIndeterminate","handleSelectAllPage","onFolderCopy","isDragging","position","left","selectionRect","top","layout","filteredTableData","pageSize","currentPage","pagerCount","onCurrentChange","handlePageChange","refreshFileList","refreshLoading","ceil","loadMoreData","realTotalPages","jumpPage","handleJumpPage","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","onAction","handleMobileAction","onNavigate","onGoBack","handleGoBack","showMoveDialog","moveTargetPath","onConfirm","confirmMove","FileManager","FILE_LIST_PATH","fileListCache","storageWarningShown","getLocalFileList","fileList","getMutableFileList","directories","localStorage","getItem","parse","createEmptyFileList","updateFileListCache","persisted","persistFileListCache","cacheUpdated","setItem","handleStoragePersistError","warn","removeItem","removeError","ElMessage","addFile","newFile","addFolder","moveFile","oldPath","newPath","oldFolderIndex","fileIndex","findIndex","pathArray","newFolder","removeFile","removeFolder","getFilesInFolder","subdirectories","buildFilterParams","params","search","includeTags","excludeTags","url","newFileList","isIndexedResponse","loadMoreFiles","start","moreFiles","fileManager","rectIntersects","rectA","rectB","right","bottom","calcSelectionRect","current","useDragSelect","modes","mainSelector","items","startPoint","preSelectSnapshot","isAppendMode","MOBILE_BREAKPOINT","listenerAttached","EDGE_THRESHOLD","SCROLL_SPEED","autoScrollTimer","savedUserSelect","getActiveConfig","toValue","shouldEnable","syncListenerState","attachContainerListener","cancelDrag","detachContainerListener","isBlankArea","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","MobileActionSheet","MobileDirectoryDrawer","FilterDropdown","MoveFileDialog","LanguageSwitcher","setup","cardContainerRef","listContainerRef","viewModeRef","itemsRef","card","list","totalPages","sortedData","sortData","fullList","detailDialogWidth","ExternalLink","rootUrl","tableColumnNum","tablePreviewSpan","selectPage","selectedPageFiles","some","userConfig","urlPrefix","location","origin","selectedCount","newData","newOption","newFormat","$store","commit","parentPath","colors","formatFileSize","bytes","isNaN","units","searchText","excludeTagRegex","match","includeTagRegex","log","extractChannelNames","typeLabels","telegram","cfr2","s3","discord","huggingface","webdav","entries","channelList","localeCompare","link","href","download","click","tab","$message","$confirm","updateStats","find","handleBatchDelete","promises","results","successNum","handleBatchCopy","folders","$loading","allFiles","links","generateFileLink","copyToClipboardFallback","textarea","clip","execCommand","fetchFileList","num","init","videoElement","fetch","credentials","authType","$router","handleBatchDownload","handleBatchMove","handleBatchTagManagement","handleBatchBlock","handleBatchWhite","validation","executeBatchMove","executeSingleMove","newKey","tempData","refreshLocalFileList","zip","fileNameCount","downloadPromises","extension","baseName","URL","createObjectURL","flag","videoExtensions","audioExtensions","imageExtensions","filename","page","loadMoreDataUntilPage","targetPage","targetIndex","currentFolderCount","currentFileCount","neededFileCount","relativePath","maxLength","startLength","endLength","getFileNameStart","dotIndex","keepLength","getFileNameEnd","ext","folderPath","Set","folderItems","fileItems","totalCount","adminLoggedIn","updatedMetadata","isExternal","baseUrl","initializeBackground","adminUrlSettings","savedViewMode"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/198.7896d641.js.map.gz b/frontend-dist/js/198.7896d641.js.map.gz deleted file mode 100644 index 06a1591f066d5a7648cac0750b4cdb6d55101a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143323 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 diff --git a/frontend-dist/js/226.f6040a84.js b/frontend-dist/js/226.ec43855c.js similarity index 99% rename from frontend-dist/js/226.f6040a84.js rename to frontend-dist/js/226.ec43855c.js index d6846b51..af65b040 100644 --- a/frontend-dist/js/226.f6040a84.js +++ b/frontend-dist/js/226.ec43855c.js @@ -1,2 +1,2 @@ "use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[226],{7835:function(e,t,a){e.exports=a.p+"img/background-light.f17603bc.jpg"},10732:function(e,t,a){e.exports=a.p+"img/background.ea1b7ee7.jpg"},48903:function(e,t,a){var n=a(60782);t.A={data(){return{bingWallPaperIndex:0,customWallPaperIndex:0,backgroundInterval:null,backgroundInitParams:null}},computed:{...(0,n.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 a=document.createElement("img");a.id="bg2",a.className="background-image2",a.alt="Background Image",e.insertBefore(t,e.firstChild),e.insertBefore(a,e.firstChild)},initializeBackground(e,t=".login",a=!1,n=!1){this.backgroundInitParams={configKey:e,containerSelector:t,useDefaultBackground:a,autoCreateElements:n};const s=document.querySelector(t);this.prepareBackgroundContainer(s),n&&(!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):a&&this.setupDefaultWallpaper(i,t)},setupBingWallpaper(e,t,a){this.$store.dispatch("fetchBingWallPapers").then(()=>{0!==this.bingWallPapers.length&&(this.loadBackgroundImage(e,this.bingWallPapers[this.bingWallPaperIndex]?.url,a),this.backgroundInterval=setInterval(()=>{this.switchBingWallpaper(e,t)},this.bkInterval))})},setupCustomWallpaperCarousel(e,t,a,n){this.loadBackgroundImage(e,a[this.customWallPaperIndex],n),this.backgroundInterval=setInterval(()=>{this.switchCustomWallpaper(e,t,a)},this.bkInterval)},setupSingleCustomWallpaper(e,t,a){this.loadBackgroundImage(e,t,a)},setupDefaultWallpaper(e,t){const n=this.useDarkMode,s=a(n?10732:7835);this.loadBackgroundImage(e,s,t)},loadBackgroundImage(e,t,a){e.style.zIndex=-1,e.style.opacity=0;const n=document.querySelector(a);this.prepareBackgroundContainer(n);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 a=0!=e.style.opacity,n=a?e:t,s=a?t:e;this.bingWallPaperIndex=(this.bingWallPaperIndex+1)%this.bingWallPapers.length;const i=this.bingWallPapers[this.bingWallPaperIndex]?.url;n.style.zIndex=-2,s.style.zIndex=-1;const o=new Image;o.onload=()=>{s.src=i,setTimeout(()=>{s.style.opacity=this.bkOpacity,setTimeout(()=>{n.style.opacity=0},1200)},50)},o.src=i},switchCustomWallpaper(e,t,a){const n=0!=e.style.opacity,s=n?e:t,i=n?t:e;this.customWallPaperIndex=(this.customWallPaperIndex+1)%a.length;const o=a[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"),a=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)),a&&(a.style.transition="none",a.style.opacity=0,a.src="",setTimeout(()=>{a&&(a.style.transition="opacity 1.2s ease-in-out")},50))):(t&&(t.style.opacity=0,setTimeout(()=>{t&&(t.src="")},1200)),a&&(a.style.opacity=0,setTimeout(()=>{a&&(a.src="")},1200)))},smoothThemeTransition(e,t=".login",n=!1,s=!1){const i=this.userConfig?.[e];if(!n||void 0!==i)return void this.reinitializeBackground(e,t,n,s);const o=document.getElementById("bg1"),r=document.getElementById("bg2");if(!o||!r)return void this.reinitializeBackground(e,t,n,s);const l=0!=o.style.opacity?o:r,c=0!=o.style.opacity?r:o,d=this.useDarkMode,u=a(d?10732:7835),g=new Image;g.onload=()=>{c.src=u,c.onload=()=>{l.style.opacity=0,setTimeout(()=>{c.style.opacity=this.bkOpacity},50)}},g.onerror=()=>{console.warn("主题背景图预加载失败,回退到直接切换"),this.reinitializeBackground(e,t,n,s)},g.src=u},reinitializeBackground(e,t=".login",a=!1,n=!1){this.clearBackgroundInterval(),this.clearBackgroundImages(!0),this.bingWallPaperIndex=0,this.customWallPaperIndex=0,setTimeout(()=>{this.initializeBackground(e,t,a,n)},100)}}}},68226:function(e,t,a){a.r(t),a.d(t,{default:function(){return B}});var n=a(80047),s=(a(85331),a(99648),a(56768));const i={class:"not-found-container"},o=["innerHTML"],r={class:"not-found-content"},l={class:"back-button-wrapper"},c={class:"error-animation"},d={class:"error-image"},u=["src"],g={class:"error-info"},m={class:"error-actions"},p={class:"help-links"},h={class:"quick-links"};function k(e,t,a,k,b,y){const I=(0,s.g2)("font-awesome-icon"),f=n.S2;return(0,s.uX)(),(0,s.CE)("div",i,[(0,s.Lk)("div",{class:"background-wrapper",innerHTML:e.backgroundImagesTemplate},null,8,o),(0,s.Lk)("div",r,[(0,s.Lk)("div",l,[(0,s.bF)(f,{class:"back-button",onClick:y.goHome,circle:"",size:"large"},{default:(0,s.k6)(()=>[(0,s.bF)(I,{icon:"home"})]),_:1},8,["onClick"])]),(0,s.Lk)("div",c,[t[3]||(t[3]=(0,s.Lk)("div",{class:"error-number"},[(0,s.Lk)("span",{class:"four"},"4"),(0,s.Lk)("span",{class:"zero"},"0"),(0,s.Lk)("span",{class:"four"},"4")],-1)),(0,s.Lk)("div",d,[(0,s.Lk)("img",{src:y.errorImage,alt:"404",class:"floating-image"},null,8,u)])]),(0,s.Lk)("div",g,[t[10]||(t[10]=(0,s.Lk)("h1",{class:"error-title"},"页面走丢了",-1)),t[11]||(t[11]=(0,s.Lk)("p",{class:"error-description"}," 抱歉,您访问的页面可能已被删除、更名或暂时不可用 ",-1)),(0,s.Lk)("div",m,[(0,s.bF)(f,{type:"primary",size:"large",class:"action-btn primary-btn",onClick:y.goHome},{default:(0,s.k6)(()=>[(0,s.bF)(I,{icon:"home",class:"btn-icon"}),t[4]||(t[4]=(0,s.eW)(" 返回首页 ",-1))]),_:1},8,["onClick"]),(0,s.bF)(f,{size:"large",class:"action-btn secondary-btn",onClick:y.goBack},{default:(0,s.k6)(()=>[(0,s.bF)(I,{icon:"arrow-left",class:"btn-icon"}),t[5]||(t[5]=(0,s.eW)(" 返回上页 ",-1))]),_:1},8,["onClick"])]),(0,s.Lk)("div",p,[t[9]||(t[9]=(0,s.Lk)("p",{class:"help-text"},"也许您想要:",-1)),(0,s.Lk)("div",h,[(0,s.Lk)("a",{href:"javascript:void(0)",onClick:t[0]||(t[0]=(...e)=>y.goHome&&y.goHome(...e)),class:"quick-link"},[(0,s.bF)(I,{icon:"cloud-upload-alt"}),t[6]||(t[6]=(0,s.eW)(" 图片上传 ",-1))]),(0,s.Lk)("a",{href:"javascript:void(0)",onClick:t[1]||(t[1]=(...e)=>y.goDashboard&&y.goDashboard(...e)),class:"quick-link"},[(0,s.bF)(I,{icon:"tachometer-alt"}),t[7]||(t[7]=(0,s.eW)(" 管理面板 ",-1))]),(0,s.Lk)("a",{href:"javascript:void(0)",onClick:t[2]||(t[2]=(...e)=>y.refreshPage&&y.refreshPage(...e)),class:"quick-link"},[(0,s.bF)(I,{icon:"redo"}),t[8]||(t[8]=(0,s.eW)(" 刷新页面 ",-1))])])])])]),t[12]||(t[12]=(0,s.Fv)('
',1))])}a(44114);var b=a(60782),y=a(48903),I={name:"NotFound",mixins:[y.A],computed:{...(0,b.L8)(["useDarkMode","userConfig"]),errorImage(){return a(96682)}},mounted(){this.initializeBackground("uploadBkImg",".not-found-container",!1,!0)},beforeUnmount(){this.clearBackgroundInterval()},methods:{goHome(){this.$router.push("/")},goBack(){window.history.length>1?this.$router.go(-1):this.$router.push("/")},goDashboard(){this.$router.push("/dashboard")},refreshPage(){window.location.reload()}}},f=a(71241);const v=(0,f.A)(I,[["render",k],["__scopeId","data-v-5437e264"]]);var B=v},96682:function(e,t,a){e.exports=a.p+"img/404.8ed11fb3.png"}}]); -//# sourceMappingURL=226.f6040a84.js.map \ No newline at end of file +//# sourceMappingURL=226.ec43855c.js.map \ No newline at end of file diff --git a/frontend-dist/js/226.ec43855c.js.gz b/frontend-dist/js/226.ec43855c.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..17a75d89a70c1ed9c985704c018819ef2a240c06 GIT binary patch literal 3448 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 avD;YR-q>)>mjiQvhW`iWkZ|n{DF6UUywtD& literal 0 HcmV?d00001 diff --git a/frontend-dist/js/226.ec43855c.js.map b/frontend-dist/js/226.ec43855c.js.map new file mode 100644 index 00000000..d11fbd5f --- /dev/null +++ b/frontend-dist/js/226.ec43855c.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/226.ec43855c.js","mappings":"oRAOA,KACEA,IAAAA,GACE,MAAO,CACLC,mBAAoB,EACpBC,qBAAsB,EACtBC,mBAAoB,KAEpBC,qBAAsB,KAE1B,EACAC,SAAU,KACLC,EAAAA,EAAAA,IAAW,CAAC,aAAc,iBAAkB,gBAC/CC,UAAAA,GACE,OAAOC,KAAKC,YAAYF,YAAc,GACxC,EACAG,SAAAA,GACE,OAAOF,KAAKC,YAAYC,WAAa,CACvC,EAEAC,wBAAAA,GACE,MAAO,8JAIT,EAEAC,sBAAAA,GACE,MAAO,0yBA4BT,GAGFC,MAAO,CAELC,WAAAA,CAAYC,EAAQC,GAEdD,IAAWC,GAAUR,KAAKJ,sBAC5BI,KAAKS,UAAU,KACbT,KAAKU,sBACHV,KAAKJ,qBAAqBe,UAC1BX,KAAKJ,qBAAqBgB,kBAC1BZ,KAAKJ,qBAAqBiB,qBAC1Bb,KAAKJ,qBAAqBkB,qBAIlC,GAGFC,OAAAA,GAEEf,KAAKgB,wBACP,EAEAC,aAAAA,GAEMjB,KAAKL,oBACPuB,cAAclB,KAAKL,oBAGrBK,KAAKmB,uBAAsB,GAE3BnB,KAAKoB,wBACP,EAEAC,QAAS,CAIPL,sBAAAA,GACE,MAAMM,EAAU,4BAChB,IAAKC,SAASC,eAAeF,GAAU,CACrC,MAAMG,EAAQF,SAASG,cAAc,SACrCD,EAAME,GAAKL,EACXG,EAAMG,YAAc5B,KAAKI,uBACzBmB,SAASM,KAAKC,YAAYL,EAC5B,CACF,EAKAL,sBAAAA,GACE,MAAME,EAAU,4BACVS,EAAgBR,SAASC,eAAeF,GAC1CS,GACFA,EAAcC,QAElB,EAMAC,wBAAAA,CAAyBC,GACvB,IAAKA,EAEH,YADAC,QAAQC,KAAK,cAKf,GAAIb,SAASC,eAAe,QAAUD,SAASC,eAAe,OAC5D,OAIF,MAAMa,EAAMd,SAASG,cAAc,OACnCW,EAAIV,GAAK,MACTU,EAAIC,UAAY,oBAChBD,EAAIE,IAAM,mBAGV,MAAMC,EAAMjB,SAASG,cAAc,OACnCc,EAAIb,GAAK,MACTa,EAAIF,UAAY,oBAChBE,EAAID,IAAM,mBAGVL,EAAUO,aAAaJ,EAAKH,EAAUQ,YACtCR,EAAUO,aAAaD,EAAKN,EAAUQ,WACxC,EAQAC,oBAAAA,CAAqBhC,EAAWC,EAAoB,SAAUC,GAAuB,EAAOC,GAAqB,GAE/Gd,KAAKJ,qBAAuB,CAC1Be,YACAC,oBACAC,uBACAC,sBAIF,MAAMoB,EAAYX,SAASqB,cAAchC,GACzCZ,KAAK6C,2BAA2BX,GAE5BpB,KACEoB,GAAeX,SAASC,eAAe,QAAWD,SAASC,eAAe,QAC5ExB,KAAKiC,yBAAyBC,IAIlC,MAAMG,EAAMd,SAASC,eAAe,OAC9BgB,EAAMjB,SAASC,eAAe,OAEpC,IAAKa,IAAQG,EAEX,YADAL,QAAQC,KAAK,4DAIf,MAAMU,EAAmB9C,KAAKC,aAAaU,GAElB,SAArBmC,EACF9C,KAAK+C,mBAAmBV,EAAKG,EAAK5B,GACzBoC,MAAMC,QAAQH,IAAqBA,EAAiBI,OAAS,EACtElD,KAAKmD,6BAA6Bd,EAAKG,EAAKM,EAAkBlC,GACrDoC,MAAMC,QAAQH,IAAiD,IAA5BA,EAAiBI,OAC7DlD,KAAKoD,2BAA2Bf,EAAKS,EAAiB,GAAIlC,GACjDC,GACTb,KAAKqD,sBAAsBhB,EAAKzB,EAEpC,EAKAmC,kBAAAA,CAAmBV,EAAKG,EAAK5B,GAC3BZ,KAAKsD,OAAOC,SAAS,uBAAuBC,KAAK,KACZ,IAA/BxD,KAAKyD,eAAeP,SAExBlD,KAAK0D,oBAAoBrB,EAAKrC,KAAKyD,eAAezD,KAAKP,qBAAqBkE,IAAK/C,GAEjFZ,KAAKL,mBAAqBiE,YAAY,KACpC5D,KAAK6D,oBAAoBxB,EAAKG,IAC7BxC,KAAKD,cAEZ,EAKAoD,4BAAAA,CAA6Bd,EAAKG,EAAKsB,EAAYlD,GACjDZ,KAAK0D,oBAAoBrB,EAAKyB,EAAW9D,KAAKN,sBAAuBkB,GAErEZ,KAAKL,mBAAqBiE,YAAY,KACpC5D,KAAK+D,sBAAsB1B,EAAKG,EAAKsB,IACpC9D,KAAKD,WACV,EAKAqD,0BAAAA,CAA2Bf,EAAK2B,EAAcpD,GAC5CZ,KAAK0D,oBAAoBrB,EAAK2B,EAAcpD,EAC9C,EAKAyC,qBAAAA,CAAsBhB,EAAKzB,GAEzB,MAAMqD,EAASjE,KAAKM,YACd4D,EACFC,EADiBF,EACT,MACA,MAEZjE,KAAK0D,oBAAoBrB,EAAK6B,EAActD,EAC9C,EAKA8C,mBAAAA,CAAoBU,EAAYC,EAAUzD,GAExCwD,EAAW3C,MAAM6C,QAAU,EAC3BF,EAAW3C,MAAM8C,QAAU,EAC3B,MAAMrC,EAAYX,SAASqB,cAAchC,GACzCZ,KAAK6C,2BAA2BX,GAEhC,MAAMsC,EAAYA,KAChBC,sBAAsB,KACpBA,sBAAsB,KACpBL,EAAW3C,MAAM8C,QAAUvE,KAAKE,eAKhCwE,EAAU,IAAIC,MACpBD,EAAQE,OAAS,KACfR,EAAWS,IAAMR,EACjBG,KAEFE,EAAQI,QAAU,KAChBV,EAAWS,IAAMR,EACjBG,KAEFE,EAAQG,IAAMR,CAChB,EAEAxB,0BAAAA,CAA2BX,GACzB,IAAKA,EAAW,OAEhB,MAAM6C,EAAgBC,OAAOC,iBAAiB/C,GACf,WAA3B6C,EAAcG,WAChBhD,EAAUT,MAAMyD,SAAW,YAGA,SAAzBH,EAAcT,SAChBpC,EAAUT,MAAM6C,OAAS,KAG3BpC,EAAUT,MAAM0D,UAAY,SAC9B,EAKAtB,mBAAAA,CAAoBxB,EAAKG,GACvB,GAAmC,IAA/BxC,KAAKyD,eAAeP,OAAc,OAEtC,MAAMkC,EAAoC,GAArB/C,EAAIZ,MAAM8C,QACzBc,EAAQD,EAAe/C,EAAMG,EAC7B8C,EAASF,EAAe5C,EAAMH,EAEpCrC,KAAKP,oBAAsBO,KAAKP,mBAAqB,GAAKO,KAAKyD,eAAeP,OAC9E,MAAMqC,EAAUvF,KAAKyD,eAAezD,KAAKP,qBAAqBkE,IAG9D0B,EAAM5D,MAAM6C,QAAU,EACtBgB,EAAO7D,MAAM6C,QAAU,EAEvB,MAAMI,EAAU,IAAIC,MACpBD,EAAQE,OAAS,KACfU,EAAOT,IAAMU,EAGbC,WAAW,KACTF,EAAO7D,MAAM8C,QAAUvE,KAAKE,UAG5BsF,WAAW,KACTH,EAAM5D,MAAM8C,QAAU,GACrB,OACF,KAELG,EAAQG,IAAMU,CAChB,EAKAxB,qBAAAA,CAAsB1B,EAAKG,EAAKsB,GAC9B,MAAMsB,EAAoC,GAArB/C,EAAIZ,MAAM8C,QACzBc,EAAQD,EAAe/C,EAAMG,EAC7B8C,EAASF,EAAe5C,EAAMH,EAEpCrC,KAAKN,sBAAwBM,KAAKN,qBAAuB,GAAKoE,EAAWZ,OACzE,MAAMqC,EAAUzB,EAAW9D,KAAKN,sBAGhC2F,EAAM5D,MAAM6C,QAAU,EACtBgB,EAAO7D,MAAM6C,QAAU,EAEvB,MAAMI,EAAU,IAAIC,MACpBD,EAAQE,OAAS,KACfU,EAAOT,IAAMU,EAEbC,WAAW,KACTF,EAAO7D,MAAM8C,QAAUvE,KAAKE,UAE5BsF,WAAW,KACTH,EAAM5D,MAAM8C,QAAU,GACrB,OACF,KAELG,EAAQG,IAAMU,CAChB,EAKAE,uBAAAA,GACMzF,KAAKL,qBACPuB,cAAclB,KAAKL,oBACnBK,KAAKL,mBAAqB,KAE9B,EAMAwB,qBAAAA,CAAsBuE,GAAY,GAChC,MAAMrD,EAAMd,SAASC,eAAe,OAC9BgB,EAAMjB,SAASC,eAAe,OAEhCkE,GAEErD,IACFA,EAAIZ,MAAMkE,WAAa,OACvBtD,EAAIZ,MAAM8C,QAAU,EACpBlC,EAAIwC,IAAM,GAEVW,WAAW,KACLnD,IAAKA,EAAIZ,MAAMkE,WAAa,6BAC/B,KAEDnD,IACFA,EAAIf,MAAMkE,WAAa,OACvBnD,EAAIf,MAAM8C,QAAU,EACpB/B,EAAIqC,IAAM,GAEVW,WAAW,KACLhD,IAAKA,EAAIf,MAAMkE,WAAa,6BAC/B,OAIDtD,IACFA,EAAIZ,MAAM8C,QAAU,EACpBiB,WAAW,KACLnD,IAAKA,EAAIwC,IAAM,KAClB,OAEDrC,IACFA,EAAIf,MAAM8C,QAAU,EACpBiB,WAAW,KACLhD,IAAKA,EAAIqC,IAAM,KAClB,OAGT,EASAnE,qBAAAA,CAAsBC,EAAWC,EAAoB,SAAUC,GAAuB,EAAOC,GAAqB,GAChH,MAAMgC,EAAmB9C,KAAKC,aAAaU,GAG3C,IAAKE,QAA6C+E,IAArB9C,EAE3B,YADA9C,KAAK6F,uBAAuBlF,EAAWC,EAAmBC,EAAsBC,GAKlF,MAAMuB,EAAMd,SAASC,eAAe,OAC9BgB,EAAMjB,SAASC,eAAe,OAEpC,IAAKa,IAAQG,EAGX,YADAxC,KAAK6F,uBAAuBlF,EAAWC,EAAmBC,EAAsBC,GAKlF,MAAMgF,EAAiC,GAArBzD,EAAIZ,MAAM8C,QAAelC,EAAMG,EAC3C8C,EAA8B,GAArBjD,EAAIZ,MAAM8C,QAAe/B,EAAMH,EAGxC4B,EAASjE,KAAKM,YACdyF,EACF5B,EADkBF,EACV,MACA,MAGN+B,EAAa,IAAIrB,MACvBqB,EAAWpB,OAAS,KAElBU,EAAOT,IAAMkB,EAGbT,EAAOV,OAAS,KAEdkB,EAAUrE,MAAM8C,QAAU,EAG1BiB,WAAW,KACTF,EAAO7D,MAAM8C,QAAUvE,KAAKE,WAC3B,MAIP8F,EAAWlB,QAAU,KAEnB3C,QAAQC,KAAK,sBACbpC,KAAK6F,uBAAuBlF,EAAWC,EAAmBC,EAAsBC,IAGlFkF,EAAWnB,IAAMkB,CACnB,EAKAF,sBAAAA,CAAuBlF,EAAWC,EAAoB,SAAUC,GAAuB,EAAOC,GAAqB,GACjHd,KAAKyF,0BACLzF,KAAKmB,uBAAsB,GAC3BnB,KAAKP,mBAAqB,EAC1BO,KAAKN,qBAAuB,EAG5B8F,WAAW,KACTxF,KAAK2C,qBAAqBhC,EAAWC,EAAmBC,EAAsBC,IAC7E,IACL,G,mHCteJ,MAAMmF,EAAa,CACjBC,MAAO,uBAEHC,EAAa,CAAC,aACdC,EAAa,CACjBF,MAAO,qBAEHG,EAAa,CACjBH,MAAO,uBAEHI,EAAa,CACjBJ,MAAO,mBAEHK,EAAa,CACjBL,MAAO,eAEHM,EAAa,CAAC,OACdC,EAAa,CACjBP,MAAO,cAEHQ,EAAa,CACjBR,MAAO,iBAEHS,EAAc,CAClBT,MAAO,cAEHU,EAAc,CAClBV,MAAO,eAEF,SAASW,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACjDC,EAAuB,KAC7B,OAAO,WAAc,QAAoB,MAAOpB,EAAY,EAAC,QAAoB,MAAO,CACtFC,MAAO,qBACPoB,UAAWR,EAAK3G,0BACf,KAAM,EAAGgG,IAAa,QAAoB,MAAOC,EAAY,EAAC,QAAoB,MAAOC,EAAY,EAAC,QAAagB,EAAsB,CAC1InB,MAAO,cACPqB,QAASJ,EAASK,OAClBC,OAAQ,GACRC,KAAM,SACL,CACDC,SAAS,QAAS,IAAM,EAAC,QAAaP,EAA8B,CAClEQ,KAAM,WAERC,EAAG,GACF,EAAG,CAAC,eAAe,QAAoB,MAAOvB,EAAY,CAACS,EAAO,KAAOA,EAAO,IAAK,QAAoB,MAAO,CACjHb,MAAO,gBACN,EAAC,QAAoB,OAAQ,CAC9BA,MAAO,QACN,MAAM,QAAoB,OAAQ,CACnCA,MAAO,QACN,MAAM,QAAoB,OAAQ,CACnCA,MAAO,QACN,OAAQ,KAAK,QAAoB,MAAOK,EAAY,EAAC,QAAoB,MAAO,CACjF1B,IAAKsC,EAASW,WACdvF,IAAK,MACL2D,MAAO,kBACN,KAAM,EAAGM,QAAiB,QAAoB,MAAOC,EAAY,CAACM,EAAO,MAAQA,EAAO,KAAM,QAAoB,KAAM,CACzHb,MAAO,eACN,SAAU,IAAKa,EAAO,MAAQA,EAAO,KAAM,QAAoB,IAAK,CACrEb,MAAO,qBACN,8BAA+B,KAAK,QAAoB,MAAOQ,EAAY,EAAC,QAAaW,EAAsB,CAChHU,KAAM,UACNL,KAAM,QACNxB,MAAO,yBACPqB,QAASJ,EAASK,QACjB,CACDG,SAAS,QAAS,IAAM,EAAC,QAAaP,EAA8B,CAClEQ,KAAM,OACN1B,MAAO,aACLa,EAAO,KAAOA,EAAO,IAAK,QAAiB,UAAW,MAC1Dc,EAAG,GACF,EAAG,CAAC,aAAa,QAAaR,EAAsB,CACrDK,KAAM,QACNxB,MAAO,2BACPqB,QAASJ,EAASa,QACjB,CACDL,SAAS,QAAS,IAAM,EAAC,QAAaP,EAA8B,CAClEQ,KAAM,aACN1B,MAAO,aACLa,EAAO,KAAOA,EAAO,IAAK,QAAiB,UAAW,MAC1Dc,EAAG,GACF,EAAG,CAAC,eAAe,QAAoB,MAAOlB,EAAa,CAACI,EAAO,KAAOA,EAAO,IAAK,QAAoB,IAAK,CAChHb,MAAO,aACN,UAAW,KAAK,QAAoB,MAAOU,EAAa,EAAC,QAAoB,IAAK,CACnFqB,KAAM,qBACNV,QAASR,EAAO,KAAOA,EAAO,GAAK,IAAImB,IAASf,EAASK,QAAUL,EAASK,UAAUU,IACtFhC,MAAO,cACN,EAAC,QAAakB,EAA8B,CAC7CQ,KAAM,qBACJb,EAAO,KAAOA,EAAO,IAAK,QAAiB,UAAW,OAAO,QAAoB,IAAK,CACxFkB,KAAM,qBACNV,QAASR,EAAO,KAAOA,EAAO,GAAK,IAAImB,IAASf,EAASgB,aAAehB,EAASgB,eAAeD,IAChGhC,MAAO,cACN,EAAC,QAAakB,EAA8B,CAC7CQ,KAAM,mBACJb,EAAO,KAAOA,EAAO,IAAK,QAAiB,UAAW,OAAO,QAAoB,IAAK,CACxFkB,KAAM,qBACNV,QAASR,EAAO,KAAOA,EAAO,GAAK,IAAImB,IAASf,EAASiB,aAAejB,EAASiB,eAAeF,IAChGhC,MAAO,cACN,EAAC,QAAakB,EAA8B,CAC7CQ,KAAM,SACJb,EAAO,KAAOA,EAAO,IAAK,QAAiB,UAAW,cAAeA,EAAO,MAAQA,EAAO,KAAM,QAAmB,0VAAuW,KACje,C,mCCrGA,GACEsB,KAAM,WACNC,OAAQ,CAACC,EAAA,GACT1I,SAAU,KACL,QAAW,CAAC,cAAe,eAC9B,UAAAiI,GAEE,OAAO,EAAQ,MACjB,GAEF,OAAA/G,GAEEf,KAAK2C,qBAAqB,cAAe,wBAAwB,GAAO,EAC1E,EACA,aAAA1B,GAEEjB,KAAKyF,yBACP,EACApE,QAAS,CACP,MAAAmG,GACExH,KAAKwI,QAAQC,KAAK,IACpB,EACA,MAAAT,GACMhD,OAAO0D,QAAQxF,OAAS,EAC1BlD,KAAKwI,QAAQG,IAAI,GAEjB3I,KAAKwI,QAAQC,KAAK,IAEtB,EACA,WAAAN,GACEnI,KAAKwI,QAAQC,KAAK,aACpB,EACA,WAAAL,GACEpD,OAAO4D,SAASC,QAClB,I,WC9BJ,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASjC,GAAQ,CAAC,YAAY,qBAEzF,O","sources":["webpack://sanyue_imghub/./src/mixins/backgroundManager.js","webpack://sanyue_imghub/./src/views/NotFound.vue?1f11","webpack://sanyue_imghub/./src/views/NotFound.vue","webpack://sanyue_imghub/./src/views/NotFound.vue?5f0d"],"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 { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"not-found-container\"\n};\nconst _hoisted_2 = [\"innerHTML\"];\nconst _hoisted_3 = {\n class: \"not-found-content\"\n};\nconst _hoisted_4 = {\n class: \"back-button-wrapper\"\n};\nconst _hoisted_5 = {\n class: \"error-animation\"\n};\nconst _hoisted_6 = {\n class: \"error-image\"\n};\nconst _hoisted_7 = [\"src\"];\nconst _hoisted_8 = {\n class: \"error-info\"\n};\nconst _hoisted_9 = {\n class: \"error-actions\"\n};\nconst _hoisted_10 = {\n class: \"help-links\"\n};\nconst _hoisted_11 = {\n class: \"quick-links\"\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 return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"background-wrapper\",\n innerHTML: _ctx.backgroundImagesTemplate\n }, null, 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_button, {\n class: \"back-button\",\n onClick: $options.goHome,\n circle: \"\",\n size: \"large\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_5, [_cache[3] || (_cache[3] = _createElementVNode(\"div\", {\n class: \"error-number\"\n }, [_createElementVNode(\"span\", {\n class: \"four\"\n }, \"4\"), _createElementVNode(\"span\", {\n class: \"zero\"\n }, \"0\"), _createElementVNode(\"span\", {\n class: \"four\"\n }, \"4\")], -1)), _createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"img\", {\n src: $options.errorImage,\n alt: \"404\",\n class: \"floating-image\"\n }, null, 8, _hoisted_7)])]), _createElementVNode(\"div\", _hoisted_8, [_cache[10] || (_cache[10] = _createElementVNode(\"h1\", {\n class: \"error-title\"\n }, \"页面走丢了\", -1)), _cache[11] || (_cache[11] = _createElementVNode(\"p\", {\n class: \"error-description\"\n }, \" 抱歉,您访问的页面可能已被删除、更名或暂时不可用 \", -1)), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"large\",\n class: \"action-btn primary-btn\",\n onClick: $options.goHome\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"btn-icon\"\n }), _cache[4] || (_cache[4] = _createTextVNode(\" 返回首页 \", -1))]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n size: \"large\",\n class: \"action-btn secondary-btn\",\n onClick: $options.goBack\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"btn-icon\"\n }), _cache[5] || (_cache[5] = _createTextVNode(\" 返回上页 \", -1))]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_10, [_cache[9] || (_cache[9] = _createElementVNode(\"p\", {\n class: \"help-text\"\n }, \"也许您想要:\", -1)), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.goHome && $options.goHome(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload-alt\"\n }), _cache[6] || (_cache[6] = _createTextVNode(\" 图片上传 \", -1))]), _createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.goDashboard && $options.goDashboard(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"tachometer-alt\"\n }), _cache[7] || (_cache[7] = _createTextVNode(\" 管理面板 \", -1))]), _createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.refreshPage && $options.refreshPage(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _cache[8] || (_cache[8] = _createTextVNode(\" 刷新页面 \", -1))])])])])]), _cache[12] || (_cache[12] = _createStaticVNode(\"
\", 1))]);\n}","import \"core-js/modules/es.array.push.js\";\nimport { mapGetters } from 'vuex';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'NotFound',\n mixins: [backgroundManager],\n computed: {\n ...mapGetters(['useDarkMode', 'userConfig']),\n errorImage() {\n // 使用项目中已有的404图片\n return require('@/assets/404.png');\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('uploadBkImg', '.not-found-container', false, true);\n },\n beforeUnmount() {\n // 清理背景轮播定时器\n this.clearBackgroundInterval();\n },\n methods: {\n goHome() {\n this.$router.push('/');\n },\n goBack() {\n if (window.history.length > 1) {\n this.$router.go(-1);\n } else {\n this.$router.push('/');\n }\n },\n goDashboard() {\n this.$router.push('/dashboard');\n },\n refreshPage() {\n window.location.reload();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./NotFound.vue?vue&type=template&id=5437e264&scoped=true\"\nimport script from \"./NotFound.vue?vue&type=script&lang=js\"\nexport * from \"./NotFound.vue?vue&type=script&lang=js\"\n\nimport \"./NotFound.vue?vue&type=style&index=0&id=5437e264&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-5437e264\"]])\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","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","innerHTML","onClick","goHome","circle","size","default","icon","_","errorImage","type","goBack","href","args","goDashboard","refreshPage","name","mixins","backgroundManager","$router","push","history","go","location","reload","__exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/226.ec43855c.js.map.gz b/frontend-dist/js/226.ec43855c.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..71ac1192d73aa14c2a7a424dd23ec531c2b954da GIT binary patch literal 9256 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 K8%O+Ug#ZASyCDPs literal 0 HcmV?d00001 diff --git a/frontend-dist/js/226.f6040a84.js.gz b/frontend-dist/js/226.f6040a84.js.gz deleted file mode 100644 index edd31f2cd278bc070682ab4c5e42ab9d484215e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3449 zcmV-<4Tka`iwFP!000026YW~9p0jOrK)h>Q_7@r@zlB5;s7`~e_? z-h~cwcYBJZxdDf0an&=B)$)WbLI8g#=zu))&sjQcez zFyBMIO+(+G8zKL=8Vb}bGB$aUdQVZ?Ck!_5V=GgtlX5W8IP?fugC!P zaBv+DhCUKFBk6Rh(Jc15*Igsr)35A(U%n^mIxP^((ac}a=1dlm0tDgs-h zjN*B+v4t1K6CBZ0$7G3Sne{-!D8N-ht1J{y>k?mJuGP%-cw&x3JZWoti0jqrBBIrJ z8fqOb6{a`{bjvVu6rvUOsQ<$re?NPGD1!S)xP5z+3q>-j8Y8^sIHFQfp`ZO!SS4F8G;{&*IjX;EA{v!6VD;Qs~R_cPg zDD=fFjI3CWLcw-8Mgl+W8O1c{M6iRqjN_N6+K?_^ z&LWkH>tn>T7+314K~| z^J<_LfhOtdYaVk$iHF(4B7tW6;F_mnBc&mnY>k^oPzQ<*khz$64u--M_=ebFRA4Hc zMa^?T9A*Uj7fn zB-!pU;%SmQ^Rc;)IMu=Q*Z)0z|Mt{}Cuo3+@;DS`asEv>p))ukGtKZ2t>UES zi#b7T5*lDGw$-uH1;l2T@IWXpFczoL{B#5fC4wNI+{_tIhBOD5KI;(*Aad3$NS!sS z;Haii!5L*y$;NOg`q%;%MHw5xnvrbO;w-+$8q?TIFDfw4!4t{eJG1| zoj?YKVPEAO9hf9ge|2tDD%|uj?TP+nE4OziYcSOA9mH7}U|&(;#dIvmKB1MP^dg}> zA1~0;3FNI>TM|M^I#!Dlx6H2-Mg$AgN&2TalLvxvY%A0Ni|o6?30}Q znZ8Dp(8>BJL#BJU(qIZFNE4)rRYI`>MNMTJ(kGLC(crPYmNiJkFZPnWkxQ(hh!*>f zDhA_YL$hO(mWnWNkWR0}jlH}kNa9#An?RvoF2V?#DpQ*`6>3h^g6T+7DLb`hDoRNt zMQ2A+YGmP9;mz@@Ar8btujgDD-rEg(og8r;A4_f>ym&Ga`6Vez2HJYN(Q6lAgi>8w3tjHXsh2*`O#Y zCRQk#l6FAzs556(fNcg#0Fx4cc@AJc2XK7W*b-vod;kZl0p>B62rhPbv%A0222wvy z2U(D7jYCfXXB&BXpJohCPSEj8lnNdy`f3du2i|yoZ@< zg=7~5gPh?>acL~`3muPD`7Y}|GFQ+iHxgx?7o;#SvSWOPWAVr7DcE?t#-CIKUq&r9 zkLnd>bLbXLaGODIx$p@cqTxFXOx^tucnRazoml!IXM6fqsJH16 z_wIr0l4&KLlDE=KUdx=n?JkXfk97f7kkxCjJl7PQxcE}9L_b;W%O_S6;wXX}TlM>01}q*DV7g{nDk4#+LkY zabt61E7yUK)Fp}yC==DLx4 z534?*yK=an4Zj)^cQ+kxrm$+eiGg-u2Ogwx>zbq2U|{y@h7P)niYnU20UO{daTx^$ z>^jtZvEGagqLzmLX6Ob~Uw581bl{Oa010fVk>_^PkvwF{4OWU6%%HciS@uvZg6iSn z7Gw#t8EL-6%uhx-&lq|a7FY{FMt6MT?%D@tk3Gu<7`lYJKDK4jA~&%Oe8iPyGJjMQ zcQ*{>_A~m|;7DR)gFYKz5E*R)zHD0&+=4BTFad2jx*($qTcWkz9*=eT$0>m;HZ~0h z9pzd%MS~%tvvpk-%6ZTLc}DYVZelJyN%aD!hUHiaPk}8`) z@#Y7GEWsy;)4&|c>5i7i8;2$`Nl#;V28ShYMheQOaKL4+?Ug7`A)?@bTyOh0;k`m6stdhp)leRY2Z3Sk_~ zd#E@VVjB!O86bWz?|~_X@qw>)1l5vt^82zQpVwnk`W->zLmo-g8Zl^%1T*|oLkHT) zqYq@B``w+>Prpj^D)x4m*X;~t0_-yC6{;h1$vMy@J$Uyl zrIsCaC>`}uO!QKTcd3{xAKFN-I{MRpo!oygef_iP8~=OqyPtjc@S|ey=;sd^0&vvl zxNCz~&>o7t)Rx7XUNdHRiB@u8oTD?@d2`^tWhJkBQgw+Hlgmv)`5Aoz4VS$XZDU%_7)V(zcJM| z;4C@Ms%fNO+Su5t7e1mdsOCW&2DW#v$)pd=qDmUBS#YgZ_9(x!QOP}QPr_9CEQPaB zU>?6l2QJ92JkAQbF-mS_`$Rr(IaqjXly2-Xy=obDIk8zJDQ4-V^KyCqsAdBA%vHs` z$+5&omyHhWI!NEN>J2OHK=$Mj>zY^P@olvL$JCQ}?Y3bHy!>+DvLU|a0SFd+2(;U= zt86=a5mfeioEQHZwT8KcJ\n \"Background\n `\n },\n // 提供背景图片的CSS样式\n backgroundImagesStyles() {\n 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 `\n }\n },\n\n watch: {\n // 监听深色模式切换\n useDarkMode(newVal, oldVal) {\n // 只有在值真正改变且已经初始化过背景时才平滑切换主题\n if (newVal !== oldVal && this.backgroundInitParams) {\n this.$nextTick(() => {\n this.smoothThemeTransition(\n this.backgroundInitParams.configKey,\n this.backgroundInitParams.containerSelector,\n this.backgroundInitParams.useDefaultBackground,\n this.backgroundInitParams.autoCreateElements\n )\n })\n }\n }\n },\n\n mounted() {\n // 动态注入背景图片的CSS样式\n this.injectBackgroundStyles()\n },\n\n beforeUnmount() {\n // 组件销毁前清除定时器\n if (this.backgroundInterval) {\n clearInterval(this.backgroundInterval)\n }\n // 立即清除背景图片,不使用过渡效果\n this.clearBackgroundImages(true)\n // 移除动态注入的样式\n this.removeBackgroundStyles()\n },\n\n methods: {\n /**\n * 动态注入背景图片样式\n */\n injectBackgroundStyles() {\n const styleId = 'background-manager-styles'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = this.backgroundImagesStyles\n document.head.appendChild(style)\n }\n },\n\n /**\n * 移除动态注入的样式\n */\n removeBackgroundStyles() {\n const styleId = 'background-manager-styles'\n const existingStyle = document.getElementById(styleId)\n if (existingStyle) {\n existingStyle.remove()\n }\n },\n\n /**\n * 动态创建背景图片元素\n * @param {HTMLElement} container - 要插入背景图片的容器元素\n */\n createBackgroundElements(container) {\n if (!container) {\n console.warn('未提供有效的容器元素')\n return\n }\n\n // 检查是否已经存在背景图片元素\n if (document.getElementById('bg1') || document.getElementById('bg2')) {\n return\n }\n\n // 创建 bg1 元素\n const bg1 = document.createElement('img')\n bg1.id = 'bg1'\n bg1.className = 'background-image1'\n bg1.alt = 'Background Image'\n \n // 创建 bg2 元素\n const bg2 = document.createElement('img')\n bg2.id = 'bg2'\n bg2.className = 'background-image2'\n bg2.alt = 'Background Image'\n\n // 将元素插入到容器的开头\n container.insertBefore(bg1, container.firstChild)\n container.insertBefore(bg2, container.firstChild)\n },\n /**\n * 初始化背景图\n * @param {string} configKey - 用户配置中的背景图配置键名\n * @param {string} containerSelector - 容器选择器,用于设置透明背景\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\n */\n initializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n // 保存初始化参数,用于主题切换时重新初始化\n this.backgroundInitParams = {\n configKey,\n containerSelector,\n useDefaultBackground,\n autoCreateElements\n }\n\n // 如果需要自动创建元素且元素不存在,则创建\n const container = document.querySelector(containerSelector)\n this.prepareBackgroundContainer(container)\n\n if (autoCreateElements) {\n if (container && (!document.getElementById('bg1') || !document.getElementById('bg2'))) {\n this.createBackgroundElements(container)\n }\n }\n\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (!bg1 || !bg2) {\n console.warn('背景图元素 #bg1 或 #bg2 未找到,请确保页面中包含这些元素或启用 autoCreateElements')\n return\n }\n\n const backgroundConfig = this.userConfig?.[configKey]\n\n if (backgroundConfig === 'bing') {\n this.setupBingWallpaper(bg1, bg2, containerSelector)\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length > 1) {\n this.setupCustomWallpaperCarousel(bg1, bg2, backgroundConfig, containerSelector)\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length === 1) {\n this.setupSingleCustomWallpaper(bg1, backgroundConfig[0], containerSelector)\n } else if (useDefaultBackground) {\n this.setupDefaultWallpaper(bg1, containerSelector)\n }\n },\n\n /**\n * 设置 Bing 壁纸轮播\n */\n setupBingWallpaper(bg1, bg2, containerSelector) {\n this.$store.dispatch('fetchBingWallPapers').then(() => {\n if (this.bingWallPapers.length === 0) return\n\n this.loadBackgroundImage(bg1, this.bingWallPapers[this.bingWallPaperIndex]?.url, containerSelector)\n \n this.backgroundInterval = setInterval(() => {\n this.switchBingWallpaper(bg1, bg2)\n }, this.bkInterval)\n })\n },\n\n /**\n * 设置自定义壁纸轮播\n */\n setupCustomWallpaperCarousel(bg1, bg2, wallpapers, containerSelector) {\n this.loadBackgroundImage(bg1, wallpapers[this.customWallPaperIndex], containerSelector)\n \n this.backgroundInterval = setInterval(() => {\n this.switchCustomWallpaper(bg1, bg2, wallpapers)\n }, this.bkInterval)\n },\n\n /**\n * 设置单张自定义壁纸\n */\n setupSingleCustomWallpaper(bg1, wallpaperUrl, containerSelector) {\n this.loadBackgroundImage(bg1, wallpaperUrl, containerSelector)\n },\n\n /**\n * 设置默认壁纸\n */\n setupDefaultWallpaper(bg1, containerSelector) {\n // 根据当前深色模式状态选择背景图\n const isDark = this.useDarkMode\n const defaultImage = isDark \n ? require('@/assets/background.jpg') \n : require('@/assets/background-light.jpg')\n \n this.loadBackgroundImage(bg1, defaultImage, containerSelector)\n },\n\n /**\n * 加载背景图片\n */\n loadBackgroundImage(imgElement, imageSrc, containerSelector) {\n // 确保初始化时层级正确\n imgElement.style.zIndex = -1\n imgElement.style.opacity = 0\n const container = document.querySelector(containerSelector)\n this.prepareBackgroundContainer(container)\n\n const showImage = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n imgElement.style.opacity = this.bkOpacity\n })\n })\n }\n\n const preload = new Image()\n preload.onload = () => {\n imgElement.src = imageSrc\n showImage()\n }\n preload.onerror = () => {\n imgElement.src = imageSrc\n showImage()\n }\n preload.src = imageSrc\n },\n \n prepareBackgroundContainer(container) {\n if (!container) return\n\n const computedStyle = window.getComputedStyle(container)\n if (computedStyle.position === 'static') {\n container.style.position = 'relative'\n }\n\n if (computedStyle.zIndex === 'auto') {\n container.style.zIndex = '0'\n }\n\n container.style.isolation = 'isolate'\n },\n\n /**\n * 切换 Bing 壁纸\n */\n switchBingWallpaper(bg1, bg2) {\n if (this.bingWallPapers.length === 0) return\n\n const isBg1Current = bg1.style.opacity != 0\n const curBg = isBg1Current ? bg1 : bg2\n const nextBg = isBg1Current ? bg2 : bg1\n \n this.bingWallPaperIndex = (this.bingWallPaperIndex + 1) % this.bingWallPapers.length\n const nextUrl = this.bingWallPapers[this.bingWallPaperIndex]?.url\n\n // 【层级魔法】:让旧图垫底,新图置顶\n curBg.style.zIndex = -2\n nextBg.style.zIndex = -1\n\n const preload = new Image()\n preload.onload = () => {\n nextBg.src = nextUrl\n \n // 稍微延迟 50ms,确保浏览器把新图渲染到 DOM 上且层级已更新\n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity // 新图直接在顶层优雅淡入\n \n // 等新图 1.2s 完全覆盖后,在底下默默把旧图透明度归零,毫无视觉断层\n setTimeout(() => { \n curBg.style.opacity = 0 \n }, 1200)\n }, 50)\n }\n preload.src = nextUrl\n },\n\n /**\n * 切换自定义壁纸\n */\n switchCustomWallpaper(bg1, bg2, wallpapers) {\n const isBg1Current = bg1.style.opacity != 0\n const curBg = isBg1Current ? bg1 : bg2\n const nextBg = isBg1Current ? bg2 : bg1\n \n this.customWallPaperIndex = (this.customWallPaperIndex + 1) % wallpapers.length\n const nextUrl = wallpapers[this.customWallPaperIndex]\n\n // 旧图垫底,新图置顶\n curBg.style.zIndex = -2\n nextBg.style.zIndex = -1\n\n const preload = new Image()\n preload.onload = () => {\n nextBg.src = nextUrl\n \n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity\n \n setTimeout(() => { \n curBg.style.opacity = 0 \n }, 1200)\n }, 50)\n }\n preload.src = nextUrl\n },\n\n /**\n * 清除背景轮播定时器\n */\n clearBackgroundInterval() {\n if (this.backgroundInterval) {\n clearInterval(this.backgroundInterval)\n this.backgroundInterval = null\n }\n },\n\n /**\n * 清除背景图片显示(带过渡效果)\n * @param {boolean} immediate - 是否立即清除,不使用过渡效果\n */\n clearBackgroundImages(immediate = false) {\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (immediate) {\n // 立即清除,不使用过渡效果\n if (bg1) {\n bg1.style.transition = 'none'\n bg1.style.opacity = 0\n bg1.src = ''\n // 恢复过渡效果\n setTimeout(() => {\n if (bg1) bg1.style.transition = 'opacity 1.2s ease-in-out'\n }, 50)\n }\n if (bg2) {\n bg2.style.transition = 'none'\n bg2.style.opacity = 0\n bg2.src = ''\n // 恢复过渡效果\n setTimeout(() => {\n if (bg2) bg2.style.transition = 'opacity 1.2s ease-in-out'\n }, 50)\n }\n } else {\n // 使用过渡效果淡出\n if (bg1) {\n bg1.style.opacity = 0\n setTimeout(() => {\n if (bg1) bg1.src = ''\n }, 1200)\n }\n if (bg2) {\n bg2.style.opacity = 0\n setTimeout(() => {\n if (bg2) bg2.src = ''\n }, 1200)\n }\n }\n },\n\n /**\n * 平滑主题切换(用于响应主题模式变化)\n * @param {string} configKey - 用户配置中的背景图配置键名\n * @param {string} containerSelector - 容器选择器\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\n */\n smoothThemeTransition(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n const backgroundConfig = this.userConfig?.[configKey]\n \n // 如果不是默认背景配置,则直接重新初始化(自定义背景不受主题影响)\n if (!useDefaultBackground || backgroundConfig !== undefined) {\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n return\n }\n\n // 对于默认背景,执行平滑过渡\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (!bg1 || !bg2) {\n // 如果背景元素不存在,直接重新初始化\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n return\n }\n\n // 确定当前显示的背景和下一个背景\n const currentBg = bg1.style.opacity != 0 ? bg1 : bg2\n const nextBg = bg1.style.opacity != 0 ? bg2 : bg1\n\n // 获取新主题对应的背景图\n const isDark = this.useDarkMode\n const newThemeImage = isDark \n ? require('@/assets/background.jpg') \n : require('@/assets/background-light.jpg')\n\n // 预加载新背景图\n const preloadImg = new Image()\n preloadImg.onload = () => {\n // 设置下一个背景的图片源\n nextBg.src = newThemeImage\n \n // 等待图片加载完成后执行淡入淡出过渡\n nextBg.onload = () => {\n // 淡出当前背景\n currentBg.style.opacity = 0\n \n // 稍微延迟后淡入新背景,确保过渡效果平滑\n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity\n }, 50) // 50ms 延迟,让淡出效果先开始\n }\n }\n \n preloadImg.onerror = () => {\n // 如果预加载失败,回退到直接重新初始化\n console.warn('主题背景图预加载失败,回退到直接切换')\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n }\n \n preloadImg.src = newThemeImage\n },\n\n /**\n * 重新初始化背景图(用于响应配置变化)\n */\n reinitializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n this.clearBackgroundInterval()\n this.clearBackgroundImages(true) // 使用立即清除\n this.bingWallPaperIndex = 0\n this.customWallPaperIndex = 0\n \n // 延迟一小段时间确保清理完成\n setTimeout(() => {\n this.initializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n }, 100)\n }\n }\n}\n","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"not-found-container\"\n};\nconst _hoisted_2 = [\"innerHTML\"];\nconst _hoisted_3 = {\n class: \"not-found-content\"\n};\nconst _hoisted_4 = {\n class: \"back-button-wrapper\"\n};\nconst _hoisted_5 = {\n class: \"error-animation\"\n};\nconst _hoisted_6 = {\n class: \"error-image\"\n};\nconst _hoisted_7 = [\"src\"];\nconst _hoisted_8 = {\n class: \"error-info\"\n};\nconst _hoisted_9 = {\n class: \"error-actions\"\n};\nconst _hoisted_10 = {\n class: \"help-links\"\n};\nconst _hoisted_11 = {\n class: \"quick-links\"\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 return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"background-wrapper\",\n innerHTML: _ctx.backgroundImagesTemplate\n }, null, 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_button, {\n class: \"back-button\",\n onClick: $options.goHome,\n circle: \"\",\n size: \"large\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_5, [_cache[3] || (_cache[3] = _createElementVNode(\"div\", {\n class: \"error-number\"\n }, [_createElementVNode(\"span\", {\n class: \"four\"\n }, \"4\"), _createElementVNode(\"span\", {\n class: \"zero\"\n }, \"0\"), _createElementVNode(\"span\", {\n class: \"four\"\n }, \"4\")], -1)), _createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"img\", {\n src: $options.errorImage,\n alt: \"404\",\n class: \"floating-image\"\n }, null, 8, _hoisted_7)])]), _createElementVNode(\"div\", _hoisted_8, [_cache[10] || (_cache[10] = _createElementVNode(\"h1\", {\n class: \"error-title\"\n }, \"页面走丢了\", -1)), _cache[11] || (_cache[11] = _createElementVNode(\"p\", {\n class: \"error-description\"\n }, \" 抱歉,您访问的页面可能已被删除、更名或暂时不可用 \", -1)), _createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"large\",\n class: \"action-btn primary-btn\",\n onClick: $options.goHome\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"btn-icon\"\n }), _cache[4] || (_cache[4] = _createTextVNode(\" 返回首页 \", -1))]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n size: \"large\",\n class: \"action-btn secondary-btn\",\n onClick: $options.goBack\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"btn-icon\"\n }), _cache[5] || (_cache[5] = _createTextVNode(\" 返回上页 \", -1))]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_10, [_cache[9] || (_cache[9] = _createElementVNode(\"p\", {\n class: \"help-text\"\n }, \"也许您想要:\", -1)), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.goHome && $options.goHome(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload-alt\"\n }), _cache[6] || (_cache[6] = _createTextVNode(\" 图片上传 \", -1))]), _createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.goDashboard && $options.goDashboard(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"tachometer-alt\"\n }), _cache[7] || (_cache[7] = _createTextVNode(\" 管理面板 \", -1))]), _createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.refreshPage && $options.refreshPage(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _cache[8] || (_cache[8] = _createTextVNode(\" 刷新页面 \", -1))])])])])]), _cache[12] || (_cache[12] = _createStaticVNode(\"
\", 1))]);\n}","import \"core-js/modules/es.array.push.js\";\nimport { mapGetters } from 'vuex';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'NotFound',\n mixins: [backgroundManager],\n computed: {\n ...mapGetters(['useDarkMode', 'userConfig']),\n errorImage() {\n // 使用项目中已有的404图片\n return require('@/assets/404.png');\n }\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('uploadBkImg', '.not-found-container', false, true);\n },\n beforeUnmount() {\n // 清理背景轮播定时器\n this.clearBackgroundInterval();\n },\n methods: {\n goHome() {\n this.$router.push('/');\n },\n goBack() {\n if (window.history.length > 1) {\n this.$router.go(-1);\n } else {\n this.$router.push('/');\n }\n },\n goDashboard() {\n this.$router.push('/dashboard');\n },\n refreshPage() {\n window.location.reload();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./NotFound.vue?vue&type=template&id=5437e264&scoped=true\"\nimport script from \"./NotFound.vue?vue&type=script&lang=js\"\nexport * from \"./NotFound.vue?vue&type=script&lang=js\"\n\nimport \"./NotFound.vue?vue&type=style&index=0&id=5437e264&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-5437e264\"]])\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","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","innerHTML","onClick","goHome","circle","size","default","icon","_","errorImage","type","goBack","href","args","goDashboard","refreshPage","name","mixins","backgroundManager","$router","push","history","go","location","reload","__exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/226.f6040a84.js.map.gz b/frontend-dist/js/226.f6040a84.js.map.gz deleted file mode 100644 index bed5faaf3529c0e630c327cc19e68a07b651da77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9207 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 N{|_5ZXR?)n003ryDWU)X diff --git a/frontend-dist/js/309.bfaaa238.js b/frontend-dist/js/309.b7dca603.js similarity index 99% rename from frontend-dist/js/309.bfaaa238.js rename to frontend-dist/js/309.b7dca603.js index dc8f6fe2..750891f2 100644 --- a/frontend-dist/js/309.bfaaa238.js +++ b/frontend-dist/js/309.b7dca603.js @@ -1,2 +1,2 @@ "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.bfaaa238.js.map \ No newline at end of file +//# 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 new file mode 100644 index 0000000000000000000000000000000000000000..db2315786c086fcb28ef8d3ee00c6b3c3d26a893 GIT binary patch literal 4310 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 E0EdowtN;K2 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/309.b7dca603.js.map b/frontend-dist/js/309.b7dca603.js.map new file mode 100644 index 00000000..2608c77a --- /dev/null +++ b/frontend-dist/js/309.b7dca603.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/309.b7dca603.js","mappings":"wkBAOA,KACEA,IAAAA,GACE,MAAO,CACLC,mBAAoB,EACpBC,qBAAsB,EACtBC,mBAAoB,KAEpBC,qBAAsB,KAE1B,EACAC,SAAU,KACLC,EAAAA,EAAAA,IAAW,CAAC,aAAc,iBAAkB,gBAC/CC,UAAAA,GACE,OAAOC,KAAKC,YAAYF,YAAc,GACxC,EACAG,SAAAA,GACE,OAAOF,KAAKC,YAAYC,WAAa,CACvC,EAEAC,wBAAAA,GACE,MAAO,8JAIT,EAEAC,sBAAAA,GACE,MAAO,0yBA4BT,GAGFC,MAAO,CAELC,WAAAA,CAAYC,EAAQC,GAEdD,IAAWC,GAAUR,KAAKJ,sBAC5BI,KAAKS,UAAU,KACbT,KAAKU,sBACHV,KAAKJ,qBAAqBe,UAC1BX,KAAKJ,qBAAqBgB,kBAC1BZ,KAAKJ,qBAAqBiB,qBAC1Bb,KAAKJ,qBAAqBkB,qBAIlC,GAGFC,OAAAA,GAEEf,KAAKgB,wBACP,EAEAC,aAAAA,GAEMjB,KAAKL,oBACPuB,cAAclB,KAAKL,oBAGrBK,KAAKmB,uBAAsB,GAE3BnB,KAAKoB,wBACP,EAEAC,QAAS,CAIPL,sBAAAA,GACE,MAAMM,EAAU,4BAChB,IAAKC,SAASC,eAAeF,GAAU,CACrC,MAAMG,EAAQF,SAASG,cAAc,SACrCD,EAAME,GAAKL,EACXG,EAAMG,YAAc5B,KAAKI,uBACzBmB,SAASM,KAAKC,YAAYL,EAC5B,CACF,EAKAL,sBAAAA,GACE,MAAME,EAAU,4BACVS,EAAgBR,SAASC,eAAeF,GAC1CS,GACFA,EAAcC,QAElB,EAMAC,wBAAAA,CAAyBC,GACvB,IAAKA,EAEH,YADAC,QAAQC,KAAK,cAKf,GAAIb,SAASC,eAAe,QAAUD,SAASC,eAAe,OAC5D,OAIF,MAAMa,EAAMd,SAASG,cAAc,OACnCW,EAAIV,GAAK,MACTU,EAAIC,UAAY,oBAChBD,EAAIE,IAAM,mBAGV,MAAMC,EAAMjB,SAASG,cAAc,OACnCc,EAAIb,GAAK,MACTa,EAAIF,UAAY,oBAChBE,EAAID,IAAM,mBAGVL,EAAUO,aAAaJ,EAAKH,EAAUQ,YACtCR,EAAUO,aAAaD,EAAKN,EAAUQ,WACxC,EAQAC,oBAAAA,CAAqBhC,EAAWC,EAAoB,SAAUC,GAAuB,EAAOC,GAAqB,GAE/Gd,KAAKJ,qBAAuB,CAC1Be,YACAC,oBACAC,uBACAC,sBAIF,MAAMoB,EAAYX,SAASqB,cAAchC,GACzCZ,KAAK6C,2BAA2BX,GAE5BpB,KACEoB,GAAeX,SAASC,eAAe,QAAWD,SAASC,eAAe,QAC5ExB,KAAKiC,yBAAyBC,IAIlC,MAAMG,EAAMd,SAASC,eAAe,OAC9BgB,EAAMjB,SAASC,eAAe,OAEpC,IAAKa,IAAQG,EAEX,YADAL,QAAQC,KAAK,4DAIf,MAAMU,EAAmB9C,KAAKC,aAAaU,GAElB,SAArBmC,EACF9C,KAAK+C,mBAAmBV,EAAKG,EAAK5B,GACzBoC,MAAMC,QAAQH,IAAqBA,EAAiBI,OAAS,EACtElD,KAAKmD,6BAA6Bd,EAAKG,EAAKM,EAAkBlC,GACrDoC,MAAMC,QAAQH,IAAiD,IAA5BA,EAAiBI,OAC7DlD,KAAKoD,2BAA2Bf,EAAKS,EAAiB,GAAIlC,GACjDC,GACTb,KAAKqD,sBAAsBhB,EAAKzB,EAEpC,EAKAmC,kBAAAA,CAAmBV,EAAKG,EAAK5B,GAC3BZ,KAAKsD,OAAOC,SAAS,uBAAuBC,KAAK,KACZ,IAA/BxD,KAAKyD,eAAeP,SAExBlD,KAAK0D,oBAAoBrB,EAAKrC,KAAKyD,eAAezD,KAAKP,qBAAqBkE,IAAK/C,GAEjFZ,KAAKL,mBAAqBiE,YAAY,KACpC5D,KAAK6D,oBAAoBxB,EAAKG,IAC7BxC,KAAKD,cAEZ,EAKAoD,4BAAAA,CAA6Bd,EAAKG,EAAKsB,EAAYlD,GACjDZ,KAAK0D,oBAAoBrB,EAAKyB,EAAW9D,KAAKN,sBAAuBkB,GAErEZ,KAAKL,mBAAqBiE,YAAY,KACpC5D,KAAK+D,sBAAsB1B,EAAKG,EAAKsB,IACpC9D,KAAKD,WACV,EAKAqD,0BAAAA,CAA2Bf,EAAK2B,EAAcpD,GAC5CZ,KAAK0D,oBAAoBrB,EAAK2B,EAAcpD,EAC9C,EAKAyC,qBAAAA,CAAsBhB,EAAKzB,GAEzB,MAAMqD,EAASjE,KAAKM,YACd4D,EACFC,EADiBF,EACT,MACA,MAEZjE,KAAK0D,oBAAoBrB,EAAK6B,EAActD,EAC9C,EAKA8C,mBAAAA,CAAoBU,EAAYC,EAAUzD,GAExCwD,EAAW3C,MAAM6C,QAAU,EAC3BF,EAAW3C,MAAM8C,QAAU,EAC3B,MAAMrC,EAAYX,SAASqB,cAAchC,GACzCZ,KAAK6C,2BAA2BX,GAEhC,MAAMsC,EAAYA,KAChBC,sBAAsB,KACpBA,sBAAsB,KACpBL,EAAW3C,MAAM8C,QAAUvE,KAAKE,eAKhCwE,EAAU,IAAIC,MACpBD,EAAQE,OAAS,KACfR,EAAWS,IAAMR,EACjBG,KAEFE,EAAQI,QAAU,KAChBV,EAAWS,IAAMR,EACjBG,KAEFE,EAAQG,IAAMR,CAChB,EAEAxB,0BAAAA,CAA2BX,GACzB,IAAKA,EAAW,OAEhB,MAAM6C,EAAgBC,OAAOC,iBAAiB/C,GACf,WAA3B6C,EAAcG,WAChBhD,EAAUT,MAAMyD,SAAW,YAGA,SAAzBH,EAAcT,SAChBpC,EAAUT,MAAM6C,OAAS,KAG3BpC,EAAUT,MAAM0D,UAAY,SAC9B,EAKAtB,mBAAAA,CAAoBxB,EAAKG,GACvB,GAAmC,IAA/BxC,KAAKyD,eAAeP,OAAc,OAEtC,MAAMkC,EAAoC,GAArB/C,EAAIZ,MAAM8C,QACzBc,EAAQD,EAAe/C,EAAMG,EAC7B8C,EAASF,EAAe5C,EAAMH,EAEpCrC,KAAKP,oBAAsBO,KAAKP,mBAAqB,GAAKO,KAAKyD,eAAeP,OAC9E,MAAMqC,EAAUvF,KAAKyD,eAAezD,KAAKP,qBAAqBkE,IAG9D0B,EAAM5D,MAAM6C,QAAU,EACtBgB,EAAO7D,MAAM6C,QAAU,EAEvB,MAAMI,EAAU,IAAIC,MACpBD,EAAQE,OAAS,KACfU,EAAOT,IAAMU,EAGbC,WAAW,KACTF,EAAO7D,MAAM8C,QAAUvE,KAAKE,UAG5BsF,WAAW,KACTH,EAAM5D,MAAM8C,QAAU,GACrB,OACF,KAELG,EAAQG,IAAMU,CAChB,EAKAxB,qBAAAA,CAAsB1B,EAAKG,EAAKsB,GAC9B,MAAMsB,EAAoC,GAArB/C,EAAIZ,MAAM8C,QACzBc,EAAQD,EAAe/C,EAAMG,EAC7B8C,EAASF,EAAe5C,EAAMH,EAEpCrC,KAAKN,sBAAwBM,KAAKN,qBAAuB,GAAKoE,EAAWZ,OACzE,MAAMqC,EAAUzB,EAAW9D,KAAKN,sBAGhC2F,EAAM5D,MAAM6C,QAAU,EACtBgB,EAAO7D,MAAM6C,QAAU,EAEvB,MAAMI,EAAU,IAAIC,MACpBD,EAAQE,OAAS,KACfU,EAAOT,IAAMU,EAEbC,WAAW,KACTF,EAAO7D,MAAM8C,QAAUvE,KAAKE,UAE5BsF,WAAW,KACTH,EAAM5D,MAAM8C,QAAU,GACrB,OACF,KAELG,EAAQG,IAAMU,CAChB,EAKAE,uBAAAA,GACMzF,KAAKL,qBACPuB,cAAclB,KAAKL,oBACnBK,KAAKL,mBAAqB,KAE9B,EAMAwB,qBAAAA,CAAsBuE,GAAY,GAChC,MAAMrD,EAAMd,SAASC,eAAe,OAC9BgB,EAAMjB,SAASC,eAAe,OAEhCkE,GAEErD,IACFA,EAAIZ,MAAMkE,WAAa,OACvBtD,EAAIZ,MAAM8C,QAAU,EACpBlC,EAAIwC,IAAM,GAEVW,WAAW,KACLnD,IAAKA,EAAIZ,MAAMkE,WAAa,6BAC/B,KAEDnD,IACFA,EAAIf,MAAMkE,WAAa,OACvBnD,EAAIf,MAAM8C,QAAU,EACpB/B,EAAIqC,IAAM,GAEVW,WAAW,KACLhD,IAAKA,EAAIf,MAAMkE,WAAa,6BAC/B,OAIDtD,IACFA,EAAIZ,MAAM8C,QAAU,EACpBiB,WAAW,KACLnD,IAAKA,EAAIwC,IAAM,KAClB,OAEDrC,IACFA,EAAIf,MAAM8C,QAAU,EACpBiB,WAAW,KACLhD,IAAKA,EAAIqC,IAAM,KAClB,OAGT,EASAnE,qBAAAA,CAAsBC,EAAWC,EAAoB,SAAUC,GAAuB,EAAOC,GAAqB,GAChH,MAAMgC,EAAmB9C,KAAKC,aAAaU,GAG3C,IAAKE,QAA6C+E,IAArB9C,EAE3B,YADA9C,KAAK6F,uBAAuBlF,EAAWC,EAAmBC,EAAsBC,GAKlF,MAAMuB,EAAMd,SAASC,eAAe,OAC9BgB,EAAMjB,SAASC,eAAe,OAEpC,IAAKa,IAAQG,EAGX,YADAxC,KAAK6F,uBAAuBlF,EAAWC,EAAmBC,EAAsBC,GAKlF,MAAMgF,EAAiC,GAArBzD,EAAIZ,MAAM8C,QAAelC,EAAMG,EAC3C8C,EAA8B,GAArBjD,EAAIZ,MAAM8C,QAAe/B,EAAMH,EAGxC4B,EAASjE,KAAKM,YACdyF,EACF5B,EADkBF,EACV,MACA,MAGN+B,EAAa,IAAIrB,MACvBqB,EAAWpB,OAAS,KAElBU,EAAOT,IAAMkB,EAGbT,EAAOV,OAAS,KAEdkB,EAAUrE,MAAM8C,QAAU,EAG1BiB,WAAW,KACTF,EAAO7D,MAAM8C,QAAUvE,KAAKE,WAC3B,MAIP8F,EAAWlB,QAAU,KAEnB3C,QAAQC,KAAK,sBACbpC,KAAK6F,uBAAuBlF,EAAWC,EAAmBC,EAAsBC,IAGlFkF,EAAWnB,IAAMkB,CACnB,EAKAF,sBAAAA,CAAuBlF,EAAWC,EAAoB,SAAUC,GAAuB,EAAOC,GAAqB,GACjHd,KAAKyF,0BACLzF,KAAKmB,uBAAsB,GAC3BnB,KAAKP,mBAAqB,EAC1BO,KAAKN,qBAAuB,EAG5B8F,WAAW,KACTxF,KAAK2C,qBAAqBhC,EAAWC,EAAmBC,EAAsBC,IAC7E,IACL,G,uECteJ,MAAMmF,EAAa,CAAC,SACb,SAASC,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACvD,OAAO,WAAc,QAAoB,OAAQ,CAC/CC,MAAO,oBACPC,QAASP,EAAO,KAAOA,EAAO,GAAK,IAAIQ,IAASJ,EAASK,cAAgBL,EAASK,gBAAgBD,IAClGE,KAAM,SACNC,MAAOZ,EAAKa,GAAG,sBACd,EAAC,QAAaP,EAA8B,CAC7CQ,KAAM,QACNP,MAAO,eACJ,EAAGT,EACV,C,eCZA,GACEiB,KAAM,mBACNrH,SAAU,CACR,IAAAsH,GACE,MAA6B,UAAtBnH,KAAKoH,MAAMC,MACpB,GAEFhG,QAAS,CACP,YAAAwF,GACE,MAAMS,EAAOtH,KAAKmH,KAAO,KAAO,SAChC,QAAUG,EACZ,I,WCLJ,MAAMC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASrB,GAAQ,CAAC,YAAY,qBAEzF,O,2HCNA,IAAIsB,GAAgB,EAELC,eAAeC,EAAc/D,EAAKgE,EAAU,CAAC,GAKxDA,EAAQC,YAAc,UAEtBD,EAAQE,QAAU,IACXF,EAAQE,SAGf,MAAMC,QAAiBC,MAAMpE,EAAKgE,GAWlC,OATwB,MAApBG,EAASE,QAAmBR,IAC5BA,GAAgB,EAChBS,EAAAA,EAAMC,OAAO,oBAAoB,GAEjCC,EAAAA,EAAOC,KAAK,eAAeC,QAAQ,KAC/Bb,GAAgB,KAIjBM,CACX,C,oTC3BA,MAAM7B,EAAa,CACjBtE,GAAI,kBAEA2G,EAAa,CAAC,KAAM,KAAM,KAC1BC,EAAa,CAAC,KACdC,EAAa,CAAC,WACb,SAAStC,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACvD,OAAO,WAAc,QAAoB,MAAO,CAC9C9E,GAAI,cACJgF,QAASP,EAAO,KAAOA,EAAO,GAAK,IAAIQ,IAASJ,EAASiC,mBAAqBjC,EAASiC,qBAAqB7B,KAC3G,EAAC,QAAa,KAAa,CAC5BM,KAAM,YACNwB,KAAM,UACL,CACDC,SAAS,QAAS,IAAM,CAAEpC,EAAMqC,SA2EU,WAAc,QAAanC,EAA8B,CACjGoC,IAAK,YACL5B,KAAM,qBACNP,MAAO,YACPjF,MAAO,CACL,YAAa,QACb,MAAS,wCAjF6B,WAAc,QAAoB,MAAO,CACjFoH,IAAK,WACLnC,OAAO,QAAgB,CAAC,mBAAoB,CAC1C,KAAQH,EAAMtC,UAEhB6E,MAAO,QACPC,OAAQ,QACRC,QAAS,YACTC,KAAM,OACN,eAAgB,IAChB,iBAAkB,QAClB,kBAAmB,QACnBC,OAAQ,gBACP,EAAC,QAAoB,OAAQjD,EAAY,CAACG,EAAO,KAAOA,EAAO,IAAK,QAAoB,OAAQ,CACjG+C,EAAG,IACHC,EAAG,IACHN,MAAO,OACPC,OAAQ,OACRE,KAAM,SACL,MAAO,KAAK,QAAoB,SAAU,CAC3CvC,MAAO,uBACPuC,KAAM,QACNI,GAAI9C,EAAMtC,OAAS,MAAQ,OAC3BqF,GAAI/C,EAAMtC,OAAS,MAAQ,KAC3BsF,EAAGhD,EAAMtC,OAAS,IAAM,KACvB,KAAM,EAAGqE,MAAe,QAAoB,SAAU,CACvD5B,MAAO,uBACP2C,GAAI,KACJC,GAAI,KACJC,EAAGhD,EAAMtC,OAAS,IAAM,IACxBuF,KAAM,wBACL,KAAM,EAAGjB,IAAa,QAAoB,IAAK,CAChD7B,MAAO,iBACPwC,OAAQ,eACR3E,QAASgC,EAAMtC,OAAS,EAAI,GAC3B,IAAKmC,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAoB,OAAQ,CAC7DqD,GAAI,KACJC,GAAI,IACJC,GAAI,KACJC,GAAI,KACH,MAAO,IAAI,QAAoB,OAAQ,CACxCH,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,MACH,MAAO,IAAI,QAAoB,OAAQ,CACxCH,GAAI,OACJC,GAAI,OACJC,GAAI,OACJC,GAAI,QACH,MAAO,IAAI,QAAoB,OAAQ,CACxCH,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SACH,MAAO,IAAI,QAAoB,OAAQ,CACxCH,GAAI,IACJC,GAAI,KACJC,GAAI,IACJC,GAAI,MACH,MAAO,IAAI,QAAoB,OAAQ,CACxCH,GAAI,KACJC,GAAI,KACJC,GAAI,KACJC,GAAI,MACH,MAAO,IAAI,QAAoB,OAAQ,CACxCH,GAAI,OACJC,GAAI,QACJC,GAAI,OACJC,GAAI,SACH,MAAO,IAAI,QAAoB,OAAQ,CACxCH,GAAI,QACJC,GAAI,OACJC,GAAI,QACJC,GAAI,QACH,MAAO,MAAQ,EAAGpB,IAAc,MASnCqB,EAAG,KAEP,CCtGA,OACE3C,KAAM,aACN,IAAA1H,GACE,MAAO,CACLyE,OAAQjE,KAAKsD,OAAOwG,QAAQxJ,YAC5BsI,QAAS5I,KAAKsD,OAAOwG,QAAQC,YAEjC,EACA1I,QAAS,CACP,iBAAAoH,GAEMzI,KAAK4I,QAEP5I,KAAKiE,QAAS,EACdjE,KAAK4I,QAAS,EACd5I,KAAKsD,OAAO4E,OAAO,kBAAkB,GACrClI,KAAKsD,OAAO4E,OAAO,kBAAkB,IAC3BlI,KAAKiE,QAOfjE,KAAK4I,QAAS,EACd5I,KAAKsD,OAAO4E,OAAO,kBAAkB,KANrClI,KAAKiE,QAAS,EACdjE,KAAKsD,OAAO4E,OAAO,kBAAkB,GACrClI,KAAKsD,OAAO4E,OAAO,kBAAkB,GAMzC,I,WCpBJ,MAAMX,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAASrB,GAAQ,CAAC,YAAY,qBAEzF,Q,+CCRA,MAAM,EAAa,CACjBQ,MAAO,QAEH,EAAa,CACjBA,MAAO,sBAEF,SAAS,EAAOP,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACjDuD,EAA8B,KAC9BC,EAA8B,KAC9BC,EAAyB,KACzBC,EAA6B,EAC7BC,EAA8B,IACpC,OAAO,WAAc,QAAoB,MAAO,EAAY,EAAC,QAAoB,OAAQ,CACvF1D,MAAO,QACPC,QAASP,EAAO,KAAOA,EAAO,GAAK,IAAIQ,IAASJ,EAAS6D,kBAAoB7D,EAAS6D,oBAAoBzD,KACzG,EAAC,QAAaH,EAA8B,CAC7CQ,KAAMT,EAAS8D,SACf5D,MAAO,aACN,KAAM,EAAG,CAAC,UAAU,QAAiB,KAAM,QAAiBF,EAAS+D,WAAY,MAAM,QAAaL,EAAwB,CAC7HM,UAAWhE,EAASiE,eACpB/D,MAAO,gBACPI,KAAM,aACN4D,gBAAiBlE,EAASmE,sBAC1B,eAAgB,wBACf,CACDC,UAAU,QAAS,IAAM,EAAC,QAAaX,EAA6B,KAAM,CACxEtB,SAAS,QAAS,IAAM,CAAsB,cAArBtC,EAAOwE,YAA6B,WAAc,QAAab,EAA6B,CACnHnB,IAAK,EACLiC,QAAS,aACR,CACDnC,SAAS,QAAS,IAAM,EAAC,QAAalC,EAA8B,CAClEQ,KAAM,SACNxF,MAAO,CACL,eAAgB,MAChB,MAAS,WAET,QAAiB,KAAM,QAAiB0E,EAAKa,GAAG,iCAAkC,KACtF6C,EAAG,MACC,QAAoB,IAAI,GAA4B,mBAArBxD,EAAOwE,YAAkC,WAAc,QAAab,EAA6B,CACpInB,IAAK,EACLiC,QAAS,kBACR,CACDnC,SAAS,QAAS,IAAM,EAAC,QAAalC,EAA8B,CAClEQ,KAAM,WACNxF,MAAO,CACL,eAAgB,MAChB,MAAS,WAET,QAAiB,KAAM,QAAiB0E,EAAKa,GAAG,iCAAkC,KACtF6C,EAAG,MACC,QAAoB,IAAI,GAA4B,iBAArBxD,EAAOwE,YAAgC,WAAc,QAAab,EAA6B,CAClInB,IAAK,EACLiC,QAAS,gBACR,CACDnC,SAAS,QAAS,IAAM,EAAC,QAAalC,EAA8B,CAClEQ,KAAM,OACNxF,MAAO,CACL,eAAgB,MAChB,MAAS,WAET,QAAiB,KAAM,QAAiB0E,EAAKa,GAAG,iCAAkC,KACtF6C,EAAG,MACC,QAAoB,IAAI,IAAO,QAAaG,EAA6B,CAC7Ec,QAAS,IACR,CACDnC,SAAS,QAAS,IAAM,EAAC,QAAalC,EAA8B,CAClEQ,KAAM,SACNxF,MAAO,CACL,eAAgB,MAChB,MAAS,WAET,QAAiB,KAAM,QAAiB0E,EAAKa,GAAG,6BAA8B,KAClF6C,EAAG,MAELA,EAAG,MAELlB,SAAS,QAAS,IAAM,EAAC,QAAoB,OAAQ,EAAY,EAAC,QAAalC,EAA8B,CAC3GQ,KAAM,OACNP,MAAO,mBAETmD,EAAG,GACF,EAAG,CAAC,YAAa,qBAAqB,QAAaM,IAA6B,QAAaC,EAA6B,CAC3H1D,MAAO,4BAEX,C,aCnFA,GACEQ,KAAM,gBACN6D,MAAO,CACLF,UAAW,CACTG,KAAMC,OACNtC,QAAS,cAGbuC,WAAY,CACVC,gBAAe,EACfC,iBAAgB,KAElBvL,SAAU,CACR,SAAA0K,GACE,MAAuB,cAAnBvK,KAAK6K,UACA7K,KAAKgH,GAAG,gCACa,mBAAnBhH,KAAK6K,UACP7K,KAAKgH,GAAG,gCACa,iBAAnBhH,KAAK6K,UACP7K,KAAKgH,GAAG,gCAERhH,KAAKgH,GAAG,2BAEnB,EACA,QAAAsD,GACE,MAAuB,cAAnBtK,KAAK6K,UACA,SACqB,mBAAnB7K,KAAK6K,UACP,WACqB,iBAAnB7K,KAAK6K,UACP,OAEA,QAEX,GAEFxJ,QAAS,CACP,gBAAAgJ,GACEgB,SAASC,QACX,EACA,cAAAb,CAAec,GACbvL,KAAKwL,QAAQpD,KAAK,IAAImD,IACxB,EACA,qBAAAZ,CAAsBc,GACpB,MAAMC,EAAQnK,SAASqB,cAAc,uBACjC6I,EACFC,EAAMC,UAAUC,IAAI,aAEpBF,EAAMC,UAAU3J,OAAO,YAE3B,IC7CJ,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,O","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 new file mode 100644 index 0000000000000000000000000000000000000000..1b25cec6c2d9cec853cb6b06da102b52ee6675a8 GIT binary patch literal 11806 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 M02}~Fd6=;P0GALy0ssI2 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/309.bfaaa238.js.gz b/frontend-dist/js/309.bfaaa238.js.gz deleted file mode 100644 index 10b7099081de7de9d81f33e08348db05b0e29c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4310 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 E0AXQTC;$Ke diff --git a/frontend-dist/js/309.bfaaa238.js.map b/frontend-dist/js/309.bfaaa238.js.map deleted file mode 100644 index 49831388..00000000 --- a/frontend-dist/js/309.bfaaa238.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/309.bfaaa238.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":["/**\n * 背景图管理 Mixin\n * 用于统一管理页面背景图的加载和轮播逻辑\n */\n\nimport { mapGetters } from 'vuex'\n\nexport default {\n data() {\n return {\n bingWallPaperIndex: 0,\n customWallPaperIndex: 0,\n backgroundInterval: null, // 存储轮播定时器\n // 存储初始化参数,用于主题切换时重新初始化\n backgroundInitParams: null,\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'bingWallPapers', 'useDarkMode']),\n bkInterval() {\n return this.userConfig?.bkInterval || 3000\n },\n bkOpacity() {\n return this.userConfig?.bkOpacity || 1\n },\n // 提供背景图片元素的模板\n backgroundImagesTemplate() {\n return `\n \"Background\n \"Background\n `\n },\n // 提供背景图片的CSS样式\n backgroundImagesStyles() {\n 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 `\n }\n },\n\n watch: {\n // 监听深色模式切换\n useDarkMode(newVal, oldVal) {\n // 只有在值真正改变且已经初始化过背景时才平滑切换主题\n if (newVal !== oldVal && this.backgroundInitParams) {\n this.$nextTick(() => {\n this.smoothThemeTransition(\n this.backgroundInitParams.configKey,\n this.backgroundInitParams.containerSelector,\n this.backgroundInitParams.useDefaultBackground,\n this.backgroundInitParams.autoCreateElements\n )\n })\n }\n }\n },\n\n mounted() {\n // 动态注入背景图片的CSS样式\n this.injectBackgroundStyles()\n },\n\n beforeUnmount() {\n // 组件销毁前清除定时器\n if (this.backgroundInterval) {\n clearInterval(this.backgroundInterval)\n }\n // 立即清除背景图片,不使用过渡效果\n this.clearBackgroundImages(true)\n // 移除动态注入的样式\n this.removeBackgroundStyles()\n },\n\n methods: {\n /**\n * 动态注入背景图片样式\n */\n injectBackgroundStyles() {\n const styleId = 'background-manager-styles'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = this.backgroundImagesStyles\n document.head.appendChild(style)\n }\n },\n\n /**\n * 移除动态注入的样式\n */\n removeBackgroundStyles() {\n const styleId = 'background-manager-styles'\n const existingStyle = document.getElementById(styleId)\n if (existingStyle) {\n existingStyle.remove()\n }\n },\n\n /**\n * 动态创建背景图片元素\n * @param {HTMLElement} container - 要插入背景图片的容器元素\n */\n createBackgroundElements(container) {\n if (!container) {\n console.warn('未提供有效的容器元素')\n return\n }\n\n // 检查是否已经存在背景图片元素\n if (document.getElementById('bg1') || document.getElementById('bg2')) {\n return\n }\n\n // 创建 bg1 元素\n const bg1 = document.createElement('img')\n bg1.id = 'bg1'\n bg1.className = 'background-image1'\n bg1.alt = 'Background Image'\n \n // 创建 bg2 元素\n const bg2 = document.createElement('img')\n bg2.id = 'bg2'\n bg2.className = 'background-image2'\n bg2.alt = 'Background Image'\n\n // 将元素插入到容器的开头\n container.insertBefore(bg1, container.firstChild)\n container.insertBefore(bg2, container.firstChild)\n },\n /**\n * 初始化背景图\n * @param {string} configKey - 用户配置中的背景图配置键名\n * @param {string} containerSelector - 容器选择器,用于设置透明背景\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\n */\n initializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n // 保存初始化参数,用于主题切换时重新初始化\n this.backgroundInitParams = {\n configKey,\n containerSelector,\n useDefaultBackground,\n autoCreateElements\n }\n\n // 如果需要自动创建元素且元素不存在,则创建\n const container = document.querySelector(containerSelector)\n this.prepareBackgroundContainer(container)\n\n if (autoCreateElements) {\n if (container && (!document.getElementById('bg1') || !document.getElementById('bg2'))) {\n this.createBackgroundElements(container)\n }\n }\n\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (!bg1 || !bg2) {\n console.warn('背景图元素 #bg1 或 #bg2 未找到,请确保页面中包含这些元素或启用 autoCreateElements')\n return\n }\n\n const backgroundConfig = this.userConfig?.[configKey]\n\n if (backgroundConfig === 'bing') {\n this.setupBingWallpaper(bg1, bg2, containerSelector)\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length > 1) {\n this.setupCustomWallpaperCarousel(bg1, bg2, backgroundConfig, containerSelector)\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length === 1) {\n this.setupSingleCustomWallpaper(bg1, backgroundConfig[0], containerSelector)\n } else if (useDefaultBackground) {\n this.setupDefaultWallpaper(bg1, containerSelector)\n }\n },\n\n /**\n * 设置 Bing 壁纸轮播\n */\n setupBingWallpaper(bg1, bg2, containerSelector) {\n this.$store.dispatch('fetchBingWallPapers').then(() => {\n if (this.bingWallPapers.length === 0) return\n\n this.loadBackgroundImage(bg1, this.bingWallPapers[this.bingWallPaperIndex]?.url, containerSelector)\n \n this.backgroundInterval = setInterval(() => {\n this.switchBingWallpaper(bg1, bg2)\n }, this.bkInterval)\n })\n },\n\n /**\n * 设置自定义壁纸轮播\n */\n setupCustomWallpaperCarousel(bg1, bg2, wallpapers, containerSelector) {\n this.loadBackgroundImage(bg1, wallpapers[this.customWallPaperIndex], containerSelector)\n \n this.backgroundInterval = setInterval(() => {\n this.switchCustomWallpaper(bg1, bg2, wallpapers)\n }, this.bkInterval)\n },\n\n /**\n * 设置单张自定义壁纸\n */\n setupSingleCustomWallpaper(bg1, wallpaperUrl, containerSelector) {\n this.loadBackgroundImage(bg1, wallpaperUrl, containerSelector)\n },\n\n /**\n * 设置默认壁纸\n */\n setupDefaultWallpaper(bg1, containerSelector) {\n // 根据当前深色模式状态选择背景图\n const isDark = this.useDarkMode\n const defaultImage = isDark \n ? require('@/assets/background.jpg') \n : require('@/assets/background-light.jpg')\n \n this.loadBackgroundImage(bg1, defaultImage, containerSelector)\n },\n\n /**\n * 加载背景图片\n */\n loadBackgroundImage(imgElement, imageSrc, containerSelector) {\n // 确保初始化时层级正确\n imgElement.style.zIndex = -1\n imgElement.style.opacity = 0\n const container = document.querySelector(containerSelector)\n this.prepareBackgroundContainer(container)\n\n const showImage = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n imgElement.style.opacity = this.bkOpacity\n })\n })\n }\n\n const preload = new Image()\n preload.onload = () => {\n imgElement.src = imageSrc\n showImage()\n }\n preload.onerror = () => {\n imgElement.src = imageSrc\n showImage()\n }\n preload.src = imageSrc\n },\n \n prepareBackgroundContainer(container) {\n if (!container) return\n\n const computedStyle = window.getComputedStyle(container)\n if (computedStyle.position === 'static') {\n container.style.position = 'relative'\n }\n\n if (computedStyle.zIndex === 'auto') {\n container.style.zIndex = '0'\n }\n\n container.style.isolation = 'isolate'\n },\n\n /**\n * 切换 Bing 壁纸\n */\n switchBingWallpaper(bg1, bg2) {\n if (this.bingWallPapers.length === 0) return\n\n const isBg1Current = bg1.style.opacity != 0\n const curBg = isBg1Current ? bg1 : bg2\n const nextBg = isBg1Current ? bg2 : bg1\n \n this.bingWallPaperIndex = (this.bingWallPaperIndex + 1) % this.bingWallPapers.length\n const nextUrl = this.bingWallPapers[this.bingWallPaperIndex]?.url\n\n // 【层级魔法】:让旧图垫底,新图置顶\n curBg.style.zIndex = -2\n nextBg.style.zIndex = -1\n\n const preload = new Image()\n preload.onload = () => {\n nextBg.src = nextUrl\n \n // 稍微延迟 50ms,确保浏览器把新图渲染到 DOM 上且层级已更新\n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity // 新图直接在顶层优雅淡入\n \n // 等新图 1.2s 完全覆盖后,在底下默默把旧图透明度归零,毫无视觉断层\n setTimeout(() => { \n curBg.style.opacity = 0 \n }, 1200)\n }, 50)\n }\n preload.src = nextUrl\n },\n\n /**\n * 切换自定义壁纸\n */\n switchCustomWallpaper(bg1, bg2, wallpapers) {\n const isBg1Current = bg1.style.opacity != 0\n const curBg = isBg1Current ? bg1 : bg2\n const nextBg = isBg1Current ? bg2 : bg1\n \n this.customWallPaperIndex = (this.customWallPaperIndex + 1) % wallpapers.length\n const nextUrl = wallpapers[this.customWallPaperIndex]\n\n // 旧图垫底,新图置顶\n curBg.style.zIndex = -2\n nextBg.style.zIndex = -1\n\n const preload = new Image()\n preload.onload = () => {\n nextBg.src = nextUrl\n \n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity\n \n setTimeout(() => { \n curBg.style.opacity = 0 \n }, 1200)\n }, 50)\n }\n preload.src = nextUrl\n },\n\n /**\n * 清除背景轮播定时器\n */\n clearBackgroundInterval() {\n if (this.backgroundInterval) {\n clearInterval(this.backgroundInterval)\n this.backgroundInterval = null\n }\n },\n\n /**\n * 清除背景图片显示(带过渡效果)\n * @param {boolean} immediate - 是否立即清除,不使用过渡效果\n */\n clearBackgroundImages(immediate = false) {\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (immediate) {\n // 立即清除,不使用过渡效果\n if (bg1) {\n bg1.style.transition = 'none'\n bg1.style.opacity = 0\n bg1.src = ''\n // 恢复过渡效果\n setTimeout(() => {\n if (bg1) bg1.style.transition = 'opacity 1.2s ease-in-out'\n }, 50)\n }\n if (bg2) {\n bg2.style.transition = 'none'\n bg2.style.opacity = 0\n bg2.src = ''\n // 恢复过渡效果\n setTimeout(() => {\n if (bg2) bg2.style.transition = 'opacity 1.2s ease-in-out'\n }, 50)\n }\n } else {\n // 使用过渡效果淡出\n if (bg1) {\n bg1.style.opacity = 0\n setTimeout(() => {\n if (bg1) bg1.src = ''\n }, 1200)\n }\n if (bg2) {\n bg2.style.opacity = 0\n setTimeout(() => {\n if (bg2) bg2.src = ''\n }, 1200)\n }\n }\n },\n\n /**\n * 平滑主题切换(用于响应主题模式变化)\n * @param {string} configKey - 用户配置中的背景图配置键名\n * @param {string} containerSelector - 容器选择器\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\n */\n smoothThemeTransition(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n const backgroundConfig = this.userConfig?.[configKey]\n \n // 如果不是默认背景配置,则直接重新初始化(自定义背景不受主题影响)\n if (!useDefaultBackground || backgroundConfig !== undefined) {\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n return\n }\n\n // 对于默认背景,执行平滑过渡\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (!bg1 || !bg2) {\n // 如果背景元素不存在,直接重新初始化\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n return\n }\n\n // 确定当前显示的背景和下一个背景\n const currentBg = bg1.style.opacity != 0 ? bg1 : bg2\n const nextBg = bg1.style.opacity != 0 ? bg2 : bg1\n\n // 获取新主题对应的背景图\n const isDark = this.useDarkMode\n const newThemeImage = isDark \n ? require('@/assets/background.jpg') \n : require('@/assets/background-light.jpg')\n\n // 预加载新背景图\n const preloadImg = new Image()\n preloadImg.onload = () => {\n // 设置下一个背景的图片源\n nextBg.src = newThemeImage\n \n // 等待图片加载完成后执行淡入淡出过渡\n nextBg.onload = () => {\n // 淡出当前背景\n currentBg.style.opacity = 0\n \n // 稍微延迟后淡入新背景,确保过渡效果平滑\n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity\n }, 50) // 50ms 延迟,让淡出效果先开始\n }\n }\n \n preloadImg.onerror = () => {\n // 如果预加载失败,回退到直接重新初始化\n console.warn('主题背景图预加载失败,回退到直接切换')\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n }\n \n preloadImg.src = newThemeImage\n },\n\n /**\n * 重新初始化背景图(用于响应配置变化)\n */\n reinitializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n this.clearBackgroundInterval()\n this.clearBackgroundImages(true) // 使用立即清除\n this.bingWallPaperIndex = 0\n this.customWallPaperIndex = 0\n \n // 延迟一小段时间确保清理完成\n setTimeout(() => {\n this.initializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n }, 100)\n }\n }\n}\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'\nimport router from '@/router'\n\nlet isRedirecting = false;\n\nexport default async function fetchWithAuth(url, options = {}) {\n // 开发环境下添加 /api 前缀\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\n\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\n options.credentials = 'include';\n\n options.headers = {\n ...options.headers,\n };\n\n const response = await fetch(url, options);\n\n if (response.status === 401 && !isRedirecting) {\n isRedirecting = true;\n store.commit('setAdminLoggedIn', false);\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\n router.push('/adminLogin').finally(() => {\n isRedirecting = false;\n });\n }\n\n return response;\n}\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.bfaaa238.js.map.gz b/frontend-dist/js/309.bfaaa238.js.map.gz deleted file mode 100644 index 37731ea6df8563c302be1245c21c771ee549e188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11744 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 C5Bt===e)}o.r(t),o.d(t,"canvastoDataURL",function(){return i}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return d}),o.d(t,"dataURLtoImage",function(){return c}),o.d(t,"downloadFile",function(){return u}),o.d(t,"filetoDataURL",function(){return p}),o.d(t,"imagetoCanvas",function(){return m}),o.d(t,"urltoBlob",function(){return g}),o.d(t,"urltoImage",function(){return f}),o.d(t,"compress",function(){return b}),o.d(t,"compressAccurately",function(){return v}),o.d(t,"EImageType",function(){return a}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(a||(a={}));var l=function(e,t,o,a){return new(o||(o=Promise))(function(s,l){function i(e){try{r(a.next(e))}catch(e){l(e)}}function n(e){try{r(a.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((a=a.apply(e,t||[])).next())})};function i(e,t=.92,o=a.JPEG){return l(this,void 0,void 0,function*(){return s(o)||(o=a.JPEG),e.toDataURL(o,t)})}function n(e,t=.92,o=a.JPEG){return new Promise(a=>e.toBlob(e=>a(e),o,t))}var r=function(e,t,o,a){return new(o||(o=Promise))(function(s,l){function i(e){try{r(a.next(e))}catch(e){l(e)}}function n(e){try{r(a.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((a=a.apply(e,t||[])).next())})};function d(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let a=o[0].match(/:(.*?);/)[1];const l=atob(o[1]);let i=l.length;const n=new Uint8Array(i);for(;i--;)n[i]=l.charCodeAt(i);return s(t)&&(a=t),new Blob([n],{type:a})})}function c(e){return new Promise((t,o)=>{const a=new Image;a.onload=()=>t(a),a.onerror=()=>o(new Error("dataURLtoImage(): dataURL is illegal")),a.src=e})}function u(e,t){const o=document.createElement("a");o.href=window.URL.createObjectURL(e),o.download=t||Date.now().toString(36),document.body.appendChild(o);const a=document.createEvent("MouseEvents");a.initEvent("click",!1,!1),o.dispatchEvent(a),document.body.removeChild(o)}function p(e){return new Promise(t=>{const o=new FileReader;o.onloadend=e=>t(e.target.result),o.readAsDataURL(e)})}var h=function(e,t,o,a){return new(o||(o=Promise))(function(s,l){function i(e){try{r(a.next(e))}catch(e){l(e)}}function n(e){try{r(a.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((a=a.apply(e,t||[])).next())})};function m(e,t={}){return h(this,void 0,void 0,function*(){const o=Object.assign({},t),a=document.createElement("canvas"),s=a.getContext("2d");let l,i;for(const e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e]=Number(o[e]));if(o.scale){const t=o.scale>0&&o.scale<10?o.scale:1;i=e.width*t,l=e.height*t}else i=o.width||o.height*e.width/e.height||e.width,l=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(a.height=i,a.width=l):(a.height=l,a.width=i),o.orientation){case 3:s.rotate(180*Math.PI/180),s.drawImage(e,-a.width,-a.height,a.width,a.height);break;case 6:s.rotate(90*Math.PI/180),s.drawImage(e,0,-a.width,a.height,a.width);break;case 8:s.rotate(270*Math.PI/180),s.drawImage(e,-a.height,0,a.height,a.width);break;case 2:s.translate(a.width,0),s.scale(-1,1),s.drawImage(e,0,0,a.width,a.height);break;case 4:s.translate(a.width,0),s.scale(-1,1),s.rotate(180*Math.PI/180),s.drawImage(e,-a.width,-a.height,a.width,a.height);break;case 5:s.translate(a.width,0),s.scale(-1,1),s.rotate(90*Math.PI/180),s.drawImage(e,0,-a.width,a.height,a.width);break;case 7:s.translate(a.width,0),s.scale(-1,1),s.rotate(270*Math.PI/180),s.drawImage(e,-a.height,0,a.height,a.width);break;default:s.drawImage(e,0,0,a.width,a.height)}return a})}function g(e){return fetch(e).then(e=>e.blob())}function f(e){return new Promise((t,o)=>{const a=new Image;a.onload=()=>t(a),a.onerror=()=>o(new Error("urltoImage(): Image failed to load, please check the image URL")),a.src=e})}var y=function(e,t,o,a){return new(o||(o=Promise))(function(s,l){function i(e){try{r(a.next(e))}catch(e){l(e)}}function n(e){try{r(a.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((a=a.apply(e,t||[])).next())})};function b(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compress(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({quality:t})),t.quality=Number(t.quality),Number.isNaN(t.quality))return e;const o=yield p(e);let l=o.split(",")[0].match(/:(.*?);/)[1],n=a.JPEG;s(t.type)&&(n=t.type,l=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield i(u,t.quality,n),g=yield d(h,l);return g.size>e.size?e:g})}function v(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({size:t})),t.size=Number(t.size),Number.isNaN(t.size))return e;if(1024*t.size>e.size)return e;t.accuracy=Number(t.accuracy),(!t.accuracy||t.accuracy<.8||t.accuracy>.99)&&(t.accuracy=.95);const o=t.size*(2-t.accuracy)*1024,l=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=a.JPEG;s(t.type)&&(h=t.type,u=t.type);const g=yield c(r),f=yield m(g,Object.assign({},t));let y,b=.5;const v=[null,null];for(let e=1;e<=7;e++){y=yield i(f,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...v].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-l)-Math.abs(.75*t.length-l))[0]);break}if(ot))break;v[0]=y,b+=Math.pow(.5,e+1)}}const k=yield d(y,u);return k.size>e.size?e:k})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},18785:function(e,t,o){"use strict";o(85331)},19104:function(e,t,o){"use strict";o(85331)},19454:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return So}});var a=o(78507),s=(o(85331),o(213),o(80047)),l=(o(99648),o(56768)),i=o(24232);const n={class:"history-header"},r={class:"header-left"},d={class:"record-count"},c={class:"header-right"},u={class:"timeline-header"},p={class:"date-label"},h={key:0,class:"grid-view"},m={class:"grid-preview"},g=["src"],f=["src"],y={key:2,class:"file-icon-wrapper"},b={class:"grid-overlay"},v={class:"grid-actions"},k={class:"grid-info"},C=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],$=["src"],T={key:2,class:"file-icon-wrapper-small"},S={class:"list-info"},_=["title"],x=["title"],M={class:"list-meta"},A={class:"upload-time"},E={class:"list-actions"},R={key:0,class:"load-more-container"},D={key:0,class:"loading-indicator"},I={key:1,class:"load-more-hint"},N={key:1,class:"no-more-hint"},P={key:1,class:"empty-state"};function z(e,t,o,z,V,W){const H=(0,l.g2)("font-awesome-icon"),B=s.S2,Q=a.R7;return(0,l.uX)(),(0,l.CE)("div",{class:(0,i.C4)(["history-container",{active:o.show}])},[(0,l.Lk)("div",n,[(0,l.Lk)("div",r,[(0,l.Lk)("h2",null,(0,i.v_)(e.$t("uploadHistory.title")),1),(0,l.Lk)("span",d,(0,i.v_)(e.$t("uploadHistory.totalRecords",{count:V.totalCount})),1)]),(0,l.Lk)("div",c,[(0,l.bF)(Q,{content:e.$t("uploadHistory.switchView"),placement:"bottom"},{default:(0,l.k6)(()=>[(0,l.bF)(B,{circle:"",onClick:W.toggleViewMode},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"grid"===V.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,l.bF)(Q,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom"},{default:(0,l.k6)(()=>[(0,l.bF)(B,{circle:"",type:"danger",onClick:W.clearHistory},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,l.bF)(B,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"times"})]),_:1})])]),V.historyList.length>0?((0,l.uX)(),(0,l.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>W.handleScroll&&W.handleScroll(...e))},[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(W.groupedHistory,e=>((0,l.uX)(),(0,l.CE)("div",{key:e.date,class:"history-group"},[(0,l.Lk)("div",u,[t[4]||(t[4]=(0,l.Lk)("div",{class:"timeline-dot"},null,-1)),(0,l.Lk)("span",p,(0,i.v_)(e.date),1)]),"grid"===V.viewMode?((0,l.uX)(),(0,l.CE)("div",h,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(e.items,e=>((0,l.uX)(),(0,l.CE)("div",{key:e.time,class:"grid-item"},[(0,l.Lk)("div",m,[W.isImage(e.name)?((0,l.uX)(),(0,l.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,g)):W.isVideo(e.name)?((0,l.uX)(),(0,l.CE)("video",{key:1,src:e.url,muted:""},null,8,f)):((0,l.uX)(),(0,l.CE)("div",y,[(0,l.bF)(H,{icon:"file",class:"file-icon"})])),(0,l.Lk)("div",b,[(0,l.Lk)("div",v,[(0,l.bF)(B,{circle:"",size:"default",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"copy"})]),_:1},8,["onClick"]),(0,l.bF)(B,{circle:"",size:"default",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,l.bF)(B,{circle:"",size:"default",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,l.Lk)("div",k,[(0,l.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,C),(0,l.Lk)("div",w,(0,i.v_)(W.formatTime(e.time)),1)])]))),128))])):((0,l.uX)(),(0,l.CE)("div",F,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(e.items,e=>((0,l.uX)(),(0,l.CE)("div",{key:e.time,class:"list-item"},[(0,l.Lk)("div",L,[W.isImage(e.name)?((0,l.uX)(),(0,l.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,U)):W.isVideo(e.name)?((0,l.uX)(),(0,l.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,l.uX)(),(0,l.CE)("div",T,[(0,l.bF)(H,{icon:"file"})]))]),(0,l.Lk)("div",S,[(0,l.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,_),(0,l.Lk)("div",{class:"file-url",title:e.url},(0,i.v_)(e.url),9,x)]),(0,l.Lk)("div",M,[(0,l.Lk)("div",A,(0,i.v_)(W.formatTime(e.time)),1)]),(0,l.Lk)("div",E,[(0,l.bF)(B,{circle:"",size:"small",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"copy"})]),_:1},8,["onClick"]),(0,l.bF)(B,{circle:"",size:"small",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,l.bF)(B,{circle:"",size:"small",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,l.k6)(()=>[(0,l.bF)(H,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),W.hasMore?((0,l.uX)(),(0,l.CE)("div",R,[V.loadingMore?((0,l.uX)(),(0,l.CE)("div",D,[(0,l.bF)(H,{icon:"spinner",spin:""}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadHistory.loading")),1)])):((0,l.uX)(),(0,l.CE)("div",I,(0,i.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):V.historyList.length>0?((0,l.uX)(),(0,l.CE)("div",N,(0,i.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,l.Q3)("",!0)],544)):((0,l.uX)(),(0,l.CE)("div",P,[(0,l.bF)(H,{icon:"history",class:"empty-icon"}),(0,l.Lk)("p",null,(0,i.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701),o(33110),o(58335);var V={name:"UploadHistory",props:{show:{type:Boolean,default:!1}},data(){return{historyList:[],allHistory:[],viewMode:"grid",pageSize:30,currentPage:0,loadingMore:!1,totalCount:0}},watch:{show(e){e&&this.resetAndLoad()}},computed:{hasMore(){return this.historyList.length{const o=new Date(t.time),a=`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")}`;e[a]||(e[a]=[]),e[a].push(t)}),Object.keys(e).sort((e,t)=>new Date(t)-new Date(e)).map(t=>({date:t,items:e[t]}))}},mounted(){const e=localStorage.getItem("historyViewMode");e&&(this.viewMode=e)},methods:{resetAndLoad(){this.historyList=[],this.currentPage=0,this.loadAllHistory(),this.loadMore()},loadAllHistory(){try{const e=JSON.parse(localStorage.getItem("uploadHistory")||"[]");this.allHistory=e.sort((e,t)=>t.time-e.time),this.totalCount=this.allHistory.length}catch(e){console.error("Failed to load history",e),this.allHistory=[],this.totalCount=0}},loadMore(){!this.loadingMore&&this.hasMore&&(this.loadingMore=!0,setTimeout(()=>{const e=this.currentPage*this.pageSize,t=e+this.pageSize,o=this.allHistory.slice(e,t);this.historyList=[...this.historyList,...o],this.currentPage++,this.loadingMore=!1},50))},handleScroll(e){const t=e.target,o=t.scrollTop,a=t.scrollHeight,s=t.clientHeight;a-o-s<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm(this.$t("uploadHistory.clearConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success(this.$t("uploadHistory.recordsCleared"))}).catch(()=>{})},deleteItem(e){this.$confirm(this.$t("uploadHistory.deleteConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=this.historyList.filter(t=>t.time!==e.time),this.allHistory=this.allHistory.filter(t=>t.time!==e.time),this.totalCount=this.allHistory.length;try{localStorage.setItem("uploadHistory",JSON.stringify(this.allHistory)),this.$message.success(this.$t("uploadHistory.recordDeleted"))}catch(t){console.error("Failed to update history",t)}}).catch(()=>{})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},formatTime(e){const t=new Date(e),o=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),s=String(t.getDate()).padStart(2,"0"),l=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${a}-${s} ${l}:${i}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success(this.$t("uploadHistory.linkCopied"))}).catch(()=>{this.$message.error(this.$t("uploadHistory.copyFailed"))})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(96682)}}},W=o(71241);const H=(0,W.A)(V,[["render",z],["__scopeId","data-v-550797ce"]]);var B=H,Q=o(86975),X=o(9267),q=(o(15616),o(81418)),j=(o(50333),o(74757)),O=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(34396),o(4885),o(53676));const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},ae={class:"setting-item"},se={class:"setting-label"},le={key:0,class:"setting-item"},ie={class:"setting-label"},ne={class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"dialog-section"},pe={class:"section-header"},he={class:"section-title"},me={class:"section-content"},ge={class:"dialog-section"},fe={class:"section-header"},ye={class:"section-title"},be={class:"section-content"},ve={class:"setting-item"},ke={class:"setting-label"},Ce={class:"setting-item"},we={class:"setting-label"},Fe={key:0,class:"setting-item slider-item"},Le={class:"setting-label"},Ue={class:"slider-wrapper"},$e={class:"slider-input-wrapper"},Te={key:1,class:"setting-item slider-item"},Se={class:"setting-label"},_e={class:"slider-wrapper"},xe={class:"slider-input-wrapper"},Me={key:0,class:"dialog-section"},Ae={class:"section-header"},Ee={class:"section-title"},Re={class:"section-content"},De={class:"setting-item"},Ie={class:"setting-label"},Ne={class:"dialog-action"};function Pe(e,t,o,n,r,d){const c=Y.A,u=J.ll,p=J.MQ,h=(0,l.g2)("font-awesome-icon"),m=a.R7,g=K.P9,f=K.AV,y=G.WK,b=O.qi,v=j.B8,k=q.lq,C=s.S2,w=X.kZ;return(0,l.uX)(),(0,l.Wv)(w,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[12]||(t[12]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",Z,[(0,l.Lk)("div",ee,[(0,l.Lk)("span",te,(0,i.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,l.Lk)("div",oe,[(0,l.Lk)("div",ae,[(0,l.Lk)("span",se,(0,i.v_)(e.$t("uploadSettings.channelType")),1),(0,l.bF)(p,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{label:"telegram",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"telegram",class:"channel-icon channel-brand-telegram"}),t[13]||(t[13]=(0,l.Lk)("span",null,"TG",-1))]),_:1}),(0,l.bF)(u,{label:"cfr2",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"cfr2",class:"channel-icon channel-brand-cfr2"}),t[14]||(t[14]=(0,l.Lk)("span",null,"R2",-1))]),_:1}),(0,l.bF)(u,{label:"s3",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"s3",class:"channel-icon channel-brand-s3"}),t[15]||(t[15]=(0,l.Lk)("span",null,"S3",-1))]),_:1}),(0,l.bF)(u,{label:"discord",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"discord",class:"channel-icon channel-brand-discord"}),t[16]||(t[16]=(0,l.Lk)("span",null,"DC",-1))]),_:1}),(0,l.bF)(u,{label:"huggingface",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"huggingface",class:"channel-icon channel-brand-huggingface"}),t[17]||(t[17]=(0,l.Lk)("span",null,"HF",-1))]),_:1}),(0,l.bF)(u,{label:"webdav",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"webdav",class:"channel-icon channel-brand-webdav"}),t[18]||(t[18]=(0,l.Lk)("span",null,"WD",-1))]),_:1})]),_:1},8,["model-value"])]),o.currentChannelList.length>1?((0,l.uX)(),(0,l.CE)("div",le,[(0,l.Lk)("span",ie,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.bF)(f,{"model-value":o.channelName,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,l.k6)(()=>[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(o.currentChannelList,e=>((0,l.uX)(),(0,l.Wv)(g,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,l.Q3)("",!0),(0,l.Lk)("div",ne,[(0,l.Lk)("span",re,(0,i.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,l.bF)(y,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,l.Lk)("div",de,[(0,l.Lk)("span",ce,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.bF)(b,{"model-value":o.autoRetry,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,l.Lk)("div",ue,[(0,l.Lk)("div",pe,[(0,l.Lk)("span",he,(0,i.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,l.Lk)("div",me,[(0,l.bF)(p,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{label:"default",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"cog",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,l.bF)(u,{label:"index",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"hashtag",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,l.bF)(u,{label:"origin",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"file-signature",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,l.bF)(u,{label:"short",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"compress-alt",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,l.Lk)("div",ge,[(0,l.Lk)("div",fe,[(0,l.Lk)("span",ye,(0,i.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,l.bF)(m,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",be,[(0,l.Lk)("div",ve,[(0,l.Lk)("span",ke,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.bF)(b,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,l.Lk)("div",Ce,[(0,l.Lk)("span",we,(0,i.v_)(e.$t("uploadSettings.fileCompress")),1),(0,l.bF)(b,{"model-value":o.customerCompress,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,l.uX)(),(0,l.CE)("div",Fe,[(0,l.Lk)("span",Le,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",Ue,[(0,l.bF)(v,{"model-value":o.compressBar,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,l.Lk)("div",$e,[(0,l.bF)(k,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("update:compressBar",t)),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["model-value"]),t[19]||(t[19]=(0,l.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,l.Q3)("",!0),o.customerCompress?((0,l.uX)(),(0,l.CE)("div",Te,[(0,l.Lk)("span",Se,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",_e,[(0,l.bF)(v,{"model-value":o.compressQuality,"onUpdate:modelValue":t[8]||(t[8]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["model-value","max","format-tooltip"]),(0,l.Lk)("div",xe,[(0,l.bF)(k,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["model-value","max"]),t[20]||(t[20]=(0,l.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,l.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,l.uX)(),(0,l.CE)("div",Me,[(0,l.Lk)("div",Ae,[(0,l.Lk)("span",Ee,(0,i.v_)(e.$t("uploadSettings.serverCompress")),1),(0,l.bF)(m,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",Re,[(0,l.Lk)("div",De,[(0,l.Lk)("span",Ie,(0,i.v_)(e.$t("uploadSettings.enableCompress")),1),(0,l.bF)(b,{"model-value":o.serverCompress,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,l.Q3)("",!0),(0,l.Lk)("div",Ne,[(0,l.bF)(C,{type:"primary",onClick:t[11]||(t[11]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}var ze={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},methods:{handleUploadFolderInput(e){e&&!e.startsWith("/")&&(e="/"+e),this.$emit("update:uploadFolder",e)}},props:{modelValue:{type:Boolean,default:!1},uploadChannel:{type:String,default:"telegram"},channelName:{type:String,default:""},currentChannelList:{type:Array,default:()=>[]},uploadFolder:{type:String,default:""},autoRetry:{type:Boolean,default:!0},uploadNameType:{type:String,default:"default"},convertToWebp:{type:Boolean,default:!1},customerCompress:{type:Boolean,default:!0},compressBar:{type:Number,default:5},compressQuality:{type:Number,default:4},serverCompress:{type:Boolean,default:!0}},emits:["update:modelValue","update:uploadChannel","update:channelName","update:uploadFolder","update:autoRetry","update:uploadNameType","update:convertToWebp","update:customerCompress","update:compressBar","update:compressQuality","update:serverCompress"],computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const Ve=(0,W.A)(ze,[["render",Pe]]);var We=Ve,He=o(88559),Be=(o(85970),o(813)),Qe=(o(34896),o(69655)),Xe=(o(2893),o(74253));o(79899);const qe={class:"upload-list-item"},je=["href"],Oe={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ge=["src"],Ke=["src"],Je={key:2,style:{width:"10vw","border-radius":"12px"}},Ye={class:"upload-list-item-content"},Ze={class:"upload-list-item-name-wrapper"},et={key:0,class:"upload-list-item-url"},tt={class:"upload-list-item-url-row"},ot={class:"upload-list-item-url-row"},at={key:1,class:"upload-list-item-progress"},st={class:"upload-list-item-action"};function lt(e,t,o,a,s,n){const r=(0,l.g2)("font-awesome-icon"),d=Xe.$g,c=G.WK,u=Qe.ve,p=(0,l.g2)("Link"),h=Be.tk,m=(0,l.g2)("Delete");return(0,l.uX)(),(0,l.CE)("div",qe,[(0,l.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,l.uX)(),(0,l.CE)("video",Oe,[(0,l.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ge),t[7]||(t[7]=(0,l.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,l.uX)(),(0,l.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:o.file.url,onError:t[0]||(t[0]=t=>e.$emit("preview-error",o.file))},null,40,Ke)):((0,l.uX)(),(0,l.CE)("div",Je,[(0,l.bF)(r,{icon:"file",class:"file-icon"})]))],8,je),(0,l.Lk)("div",Ye,[(0,l.Lk)("div",Ze,[(0,l.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,l.uX)(),(0,l.CE)("div",et,[(0,l.Lk)("div",tt,[(0,l.bF)(c,{modelValue:o.file.finalURL,"onUpdate:modelValue":t[1]||(t[1]=e=>o.file.finalURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[8]||(t[8]=[(0,l.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,l.bF)(c,{modelValue:o.file.mdURL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.file.mdURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[9]||(t[9]=[(0,l.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,l.Lk)("div",ot,[(0,l.bF)(c,{modelValue:o.file.htmlURL,"onUpdate:modelValue":t[3]||(t[3]=e=>o.file.htmlURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[10]||(t[10]=[(0,l.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,l.bF)(c,{modelValue:o.file.ubbURL,"onUpdate:modelValue":t[4]||(t[4]=e=>o.file.ubbURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[11]||(t[11]=[(0,l.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,l.uX)(),(0,l.CE)("div",at,[(0,l.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,l.Lk)("div",st,[(0,l.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,l.bF)(h,null,{default:(0,l.k6)(()=>[(0,l.bF)(p)]),_:1})]),(0,l.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,l.bF)(h,null,{default:(0,l.k6)(()=>[(0,l.bF)(m)]),_:1})])])])}var it=o(57477);const nt=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],rt=["mp4","webm","ogg","mkv"];var dt={name:"UploadFileItem",components:{Link:it.Link,Delete:it.Delete},props:{file:{type:Object,required:!0}},emits:["copy","remove","preview-error"],computed:{urlSize(){return window.innerWidth<768?"small":"default"}},methods:{isImage(e){const t=e.split(".").pop().toLowerCase();return nt.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return rt.includes(t)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let a,s;o>0?(a=e.substring(0,o),s=e.substring(o)):(a=e,s="");const l=s.length+4,i=t-l-3;return i<=0?e.substring(0,t-3)+"...":a.substring(0,i)+"..."+a.slice(-4)+s},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("uploadForm.copyFailed")})})}}};const ct=(0,W.A)(dt,[["render",lt],["__scopeId","data-v-4848c2b0"]]);var ut=ct,pt=o(62086),ht=(o(40670),o(88830),o(23597),o(70683)),mt=(o(95385),o(3261),o(47358));const gt={class:"upload-form"},ft={class:"upload-card-glow",ref:"uploadCardGlow"},yt=["innerHTML"],bt={key:0,class:"upload-card"},vt={class:"paste-card-actions"},kt={class:"upload-list-dashboard-action"},Ct={class:"modern-action-group"},wt={class:"modern-dropdown-item-content"},Ft={class:"modern-action-btn modern-action-btn-danger"};function Lt(e,t,n,r,d,c){const u=(0,l.g2)("CameraFilled"),p=Be.tk,h=mt.j5,m=G.WK,g=s.S2,f=J.Zh,y=J.MQ,b=ht.Ik,v=(0,l.g2)("List"),k=(0,l.g2)("Checked"),C=(0,l.g2)("Failed"),w=Xe.$g,F=(0,l.g2)("font-awesome-icon"),L=a.R7,U=O.qi,$=pt.c6,T=pt.Iy,S=pt.dW,_=ut,x=He.kA;return(0,l.uX)(),(0,l.CE)("div",gt,[(0,l.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[0]||(t[0]=(...e)=>c.handleUploadCardMouseMove&&c.handleUploadCardMouseMove(...e)),onMouseleave:t[1]||(t[1]=(...e)=>c.handleUploadCardMouseLeave&&c.handleUploadCardMouseLeave(...e))},[(0,l.Lk)("div",ft,null,512),"default"===n.uploadMethod?((0,l.uX)(),(0,l.Wv)(h,{key:0,class:(0,i.C4)(["upload-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}]),drag:"",multiple:"","http-request":c.uploadFile,onSuccess:c.handleSuccess,"on-error":c.handleError,"before-upload":c.beforeUpload,"on-progress":c.handleProgress,"file-list":d.fileList,"show-file-list":!1},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:(0,i.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,l.k6)(()=>[(0,l.bF)(u)]),_:1},8,["class"]),(0,l.Lk)("div",{class:(0,i.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText")},null,10,yt)]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,l.Q3)("",!0)],32),"paste"===n.uploadMethod?((0,l.uX)(),(0,l.CE)("div",bt,[(0,l.bF)(b,{class:(0,i.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,l.k6)(()=>[(0,l.bF)(m,{modelValue:d.pastedUrls,"onUpdate:modelValue":t[2]||(t[2]=e=>d.pastedUrls=e),class:"upload-card-textarea",placeholder:e.$t("upload.pasteUrlPlaceholder"),type:"textarea",rows:d.fileList.length?4:14},null,8,["modelValue","placeholder","rows"]),(0,l.Lk)("div",vt,[(0,l.bF)(g,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,l.bF)(y,{modelValue:d.pasteUploadMethod,"onUpdate:modelValue":t[3]||(t[3]=e=>d.pasteUploadMethod=e),class:"paste-card-method-group",size:c.pasteCardMethodButtonSize},{default:(0,l.k6)(()=>[(0,l.bF)(f,{label:"save"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.pasteSave")),1)]),_:1}),(0,l.bF)(f,{label:"external"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.pasteExternal")),1)]),_:1})]),_:1},8,["modelValue","size"])])]),_:1},8,["class"])])):(0,l.Q3)("",!0),(0,l.bF)(b,{class:(0,i.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length,"is-uploading":d.uploading}])},{default:(0,l.k6)(()=>[(0,l.Lk)("div",{class:(0,i.C4)(["upload-list-container",{"upload-list-busy":d.fileList.length}])},[(0,l.bF)(x,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",{class:(0,i.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,l.bF)(w,{class:"upload-list-dashboard-title"},{default:(0,l.k6)(()=>[(0,l.bF)(p,null,{default:(0,l.k6)(()=>[(0,l.bF)(v)]),_:1}),(0,l.eW)((0,i.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,l.bF)(p,null,{default:(0,l.k6)(()=>[(0,l.bF)(k)]),_:1}),(0,l.eW)((0,i.v_)(c.uploadSuccessCount)+" ",1),(0,l.bF)(p,null,{default:(0,l.k6)(()=>[(0,l.bF)(C)]),_:1}),(0,l.eW)((0,i.v_)(c.uploadErrorCount),1)]),_:1}),(0,l.Lk)("div",kt,[(0,l.Lk)("div",Ct,[(0,l.bF)(L,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.Lk)("button",{class:"modern-action-btn modern-action-btn-copy",onClick:t[4]||(t[4]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,l.bF)(F,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,l.bF)(L,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(S,null,{dropdown:(0,l.k6)(()=>[(0,l.bF)(T,{class:"modern-dropdown-menu"},{default:(0,l.k6)(()=>[(0,l.bF)($,null,{default:(0,l.k6)(()=>[(0,l.Lk)("div",wt,[(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadForm.autoRetry")),1),(0,l.bF)(U,{modelValue:d.autoReUpload,"onUpdate:modelValue":t[6]||(t[6]=e=>d.autoReUpload=e),onChange:c.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,l.k6)(()=>[(0,l.Lk)("button",{class:"modern-action-btn modern-action-btn-retry",onClick:t[5]||(t[5]=(...e)=>c.retryError&&c.retryError(...e))},[(0,l.bF)(F,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,l.bF)(L,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(S,null,{dropdown:(0,l.k6)(()=>[(0,l.bF)(T,{class:"modern-dropdown-menu"},{default:(0,l.k6)(()=>[(0,l.bF)($,{onClick:c.clearFileList},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,l.bF)($,{onClick:c.clearSuccessList},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,l.k6)(()=>[(0,l.Lk)("button",Ft,[(0,l.bF)(F,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(d.fileList.slice().reverse(),e=>((0,l.uX)(),(0,l.Wv)(_,{key:e.name,file:e,onCopy:c.handleCopy,onRemove:c.handleRemove,onPreviewError:t[7]||(t[7]=e=>e.url=o(96682))},null,8,["file","onCopy","onRemove"]))),128))]),_:1},8,["onScroll"])],2)]),_:1},8,["class"])])}o(16573),o(78100),o(77936),o(20116),o(18237),o(79577),o(41549),o(49797),o(49631),o(35623),o(64979),o(14603),o(47566),o(98721);var Ut=o(457),$t=o(76334),Tt=o(60782);function St(e,t,o){const a=o+e;return{finalURL:a,mdURL:`![${t}](${a})`,htmlURL:`${t}`,ubbURL:`[img]${a}[/img]`}}function _t(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function xt(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=St(e.srcID,e.name,t);Object.assign(e,o)})}const Mt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),At=(e,t)=>e>>>t|e<<32-t;function Et(e,t){const o=new Uint32Array(64);for(let u=0;u<16;u++)o[u]=e[4*u]<<24|e[4*u+1]<<16|e[4*u+2]<<8|e[4*u+3];for(let u=16;u<64;u++){const e=At(o[u-15],7)^At(o[u-15],18)^o[u-15]>>>3,t=At(o[u-2],17)^At(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[a,s,l,i,n,r,d,c]=t;for(let u=0;u<64;u++){const e=At(n,6)^At(n,11)^At(n,25),t=n&r^~n&d,p=c+e+t+Mt[u]+o[u]>>>0,h=At(a,2)^At(a,13)^At(a,22),m=a&s^a&l^s&l,g=h+m>>>0;c=d,d=r,r=n,n=i+p>>>0,i=l,l=s,s=a,a=p+g>>>0}t[0]=t[0]+a>>>0,t[1]=t[1]+s>>>0,t[2]=t[2]+l>>>0,t[3]=t[3]+i>>>0,t[4]=t[4]+n>>>0,t[5]=t[5]+r>>>0,t[6]=t[6]+d>>>0,t[7]=t[7]+c>>>0}function Rt(){let e=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),t=new Uint8Array(64),o=0,a=0;return{update(s){a+=s.length;let l=0;if(o>0){const a=64-o,i=Math.min(a,s.length);t.set(s.subarray(0,i),o),o+=i,l=i,64===o&&(Et(t,e),o=0)}while(l+64<=s.length)Et(s.subarray(l,l+64),e),l+=64;l56&&(t.fill(0,o,64),Et(t,e),o=0),t.fill(0,o,56);const l=new DataView(t.buffer);l.setUint32(56,Math.floor(s/4294967296),!1),l.setUint32(60,s>>>0,!1),Et(t,e);let i="";for(let t=0;t<8;t++)i+=e[t].toString(16).padStart(8,"0");return i}}}async function Dt(e){const t=Rt(),o=4194304;let a=0;while(athis.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){xt(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&xt(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,Tt.L8)(["storeAutoReUpload"]),uploadSuccessCount(){return this.fileList.filter(e=>"done"===e.status||"success"===e.status).length},uploadErrorCount(){return this.fileList.filter(e=>"exception"===e.status).length},uploadingCount(){return this.fileList.filter(e=>"uploading"===e.status).length},waitingCount(){return this.uploadQueue.length},urlSize(){return window.innerWidth<768?"small":"default"},disableTooltip(){return window.innerWidth<768},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},pasteCardMethodButtonSize(){return this.fileList.length||window.innerWidth<768?"small":"medium"}},mounted(){document.addEventListener("paste",this.handlePaste),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),this.uploadQueue=[],this.fileList=[],this.activeUploads=0},methods:{truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let a,s;o>0?(a=e.substring(0,o),s=e.substring(o)):(a=e,s="");const l=s.length+4,i=t-l-3;return i<=0?e.substring(0,t-3)+"...":a.substring(0,i)+"..."+a.slice(-4)+s},uploadFile(e){if(!this.fileList.find(t=>t.uid===e.file.uid))return;if(this.activeUploads>=this.maxConcurrentUploads){this.uploadQueue.push(e);const t=this.fileList.find(t=>t.uid===e.file.uid);return void(t&&(t.status="waiting"))}this.activeUploads++;const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.status="uploading");const o=this.fileList.find(t=>t.uid===e.file.uid),a=o?.uploadChannel||this.uploadChannel;if("external"===a)return void this.uploadSingleFile(e);if("huggingface"===a){const t=20971520;return void(e.file.size>=t?this.uploadToHuggingFaceDirect(e):this.uploadSingleFile(e))}if("discord"===a){const t=9437184;return void(e.file.size>t?this.uploadFileInChunks(e):this.uploadSingleFile(e))}const s=20971520;e.file.size>s?this.uploadFileInChunks(e):this.uploadSingleFile(e)},processUploadQueue(){if(0===this.uploadQueue.length||this.activeUploads>=this.maxConcurrentUploads)return;const e=this.uploadQueue.shift();e&&this.fileList.find(t=>t.uid===e.file.uid)?this.uploadFile(e):this.processUploadQueue()},onUploadComplete(){this.activeUploads=Math.max(0,this.activeUploads-1),this.processUploadQueue(),0===this.activeUploads&&0===this.uploadQueue.length&&(this.uploading=!1)},async uploadSingleFile(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.serverCompress,a=t.uploadChannel||this.uploadChannel,s=this.autoRetry&&"external"!==a,l="external"===a?"default":this.uploadNameType,i=new AbortController;this.abortControllers.set(e.file.uid,i);const n=new FormData;if(n.append("file",e.file),"external"===a&&n.append("url",e.file.url),"huggingface"===a)try{console.log("Computing SHA256 for HuggingFace upload...");const t=await Dt(e.file);n.append("sha256",t),console.log("SHA256 computed:",t)}catch(r){console.error("Failed to compute SHA256:",r)}(0,Ut.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+a+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+l+"&autoRetry="+s+"&uploadFolder="+encodeURIComponent(this.uploadFolder),method:"post",data:n,withAuthCode:!0,signal:i.signal,onUploadProgress:t=>{const o=Math.round(t.loaded/t.total*100);e.onProgress({percent:o,file:e.file})}}).then(t=>{e.onSuccess(t,e.file)}).catch(t=>{"CanceledError"!==t.name&&"ERR_CANCELED"!==t.code?t.response&&401!==t.response.status?(this.exceptionList.push(e),e.onError(t,e.file)):t.response||(this.exceptionList.push(e),e.onError(t,e.file)):console.log("上传已取消:",e.file.name)}).finally(()=>{this.abortControllers.delete(e.file.uid),this.onUploadComplete()})},async uploadFileInChunks(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.uploadChannel||this.uploadChannel,a=new AbortController;this.abortControllers.set(e.file.uid,a);const s="discord"===o?9437184:16777216,l=e.file.size,i=e.file.type||"application/octet-stream",n=Math.ceil(l/s),r=t.serverCompress,d=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType;let u=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),u=await Dt(e.file),console.log("SHA256 computed:",u)}catch(p){console.error("Failed to compute SHA256:",p)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",i),t.append("totalChunks",n.toString());const h=await(0,Ut.A)({url:"/upload?serverCompress="+r+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+d+"&uploadFolder="+encodeURIComponent(this.uploadFolder)+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!h.data.success)throw new Error(this.$t("uploadForm.chunkInitFailed")+": "+h.data.message);const m=h.data.uploadId;console.log("分块上传初始化成功,uploadId:",m);const g=this.fileList.find(t=>t.uid===e.file.uid);g&&(g.totalChunks=n,g.uploadId=m);const f=3,y=new Array(n).fill(0);let b=0,v=!1,k="",C=!1;const w=async t=>{if(v||C)return;const u=t*s,h=Math.min(u+s,l),g=e.file.slice(u,h),f=new FormData;f.append("file",g,`${e.file.name}.part${t.toString().padStart(3,"0")}`),f.append("chunkIndex",t.toString()),f.append("totalChunks",n.toString()),f.append("uploadId",m),f.append("originalFileName",e.file.name),f.append("originalFileType",i);let b=0;const w=3;while(b{if(v||C)return;const a=Math.round(o.loaded/o.total*100);y[t]=a;const s=Math.round(y.reduce((e,t)=>e+t,0)/n);e.onProgress({percent:s,file:e.file})}})}catch(p){if("CanceledError"===p.name||"ERR_CANCELED"===p.code)return C=!0,void console.log("分块上传已取消:",e.file.name);if(b++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${b}/${w}):`,p),b>=w)throw v=!0,k=`分块 ${t+1}/${n} 上传失败: ${p.message}`,new Error(k);await new Promise(e=>setTimeout(e,2e3*b))}}},F=[];for(let e=0;e{while(bt.uid===e.file.uid);t&&t.uploadId&&this.cleanupUploadResources(t.uploadId,t.totalChunks).then(()=>{console.log(`已清理分块上传失败的资源: ${t.uploadId}`)}).catch(e=>{console.warn("清理分块上传失败资源时出错:",e)}),p.response&&401!==p.response.status?(this.exceptionList.push(e),e.onError(p,e.file)):p.response||(this.exceptionList.push(e),e.onError(p,e.file))}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},handleRemove(e){this.abortControllers.has(e.uid)&&(this.abortControllers.get(e.uid).abort(),this.abortControllers.delete(e.uid)),this.uploadQueue=this.uploadQueue.filter(t=>t.file.uid!==e.uid),this.fileList=this.fileList.filter(t=>t.uid!==e.uid),this.$message({type:"info",message:this.$t("uploadForm.deleted",{name:this.truncateFilename(e.name)})})},async cleanupUploadResources(e,t=0){try{await(0,Ut.A)({url:`/upload?cleanup=true&uploadId=${e}&totalChunks=${t}`,method:"get",withAuthCode:!0,timeout:5e3}),console.log(`清理上传资源成功: ${e}`)}catch(o){console.warn("清理上传资源失败:",o)}},handleSuccess(e,t){const o=this.fileList.find(e=>e.uid===t.uid);if(o)try{const a=o.uploadChannel||this.uploadChannel;if("external"!==a){const a=e.data[0].src.replace("/file/","");o.url=`${window.location.protocol}//${window.location.host}/file/`+a;const s=St(a,t.name,this.rootUrl);Object.assign(o,s),o.srcID=a}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message:this.$t("uploadForm.uploadSuccess",{name:this.truncateFilename(t.name)})}),setTimeout(()=>{const e=this.fileList.find(e=>e.uid===t.uid);e&&(e.status="done")},1e3)}catch(a){this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception"}},saveToHistory(e){try{const t=JSON.parse(localStorage.getItem("uploadHistory")||"[]"),o={name:e.name,url:e.finalURL,time:Date.now(),type:e.name.split(".").pop().toLowerCase()};t.push(o),localStorage.setItem("uploadHistory",JSON.stringify(t))}catch(t){console.error("Failed to save history",t)}},handleError(e,t){const o=this.fileList.find(e=>e.uid===t.uid);o&&(this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception",this.autoReUpload&&this.scheduleAutoRetry())},handleCopy(e){const t=this.fileList.find(t=>t.uid===e.uid).status;"done"===t||"success"===t?(navigator.clipboard.writeText(_t(e,this.selectedUrlForm)),this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})):this.$message({type:"warning",message:this.$t("uploadForm.fileNotUploaded")})},beforeUpload(e){return new Promise(async(t,o)=>{let a=e;const s=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(s)try{const t=await this.convertImageToWebp(e);t&&(a=t,console.log(`WebP转换成功: ${e.name} -> ${t.name}, 大小: ${(e.size/1024).toFixed(1)}KB -> ${(t.size/1024).toFixed(1)}KB`))}catch(r){console.warn("WebP转换失败,使用原文件:",r)}const l=a.type.includes("image")&&this.customerCompress&&a.size/1024/1024>this.compressBar,i=a.size/1024/1024<=1024||"telegram"!==this.uploadChannel,n=(e,o)=>{const a=URL.createObjectURL(e);this.fileList.push({uid:e.uid,name:e.name,url:a,finalURL:"",mdURL:"",htmlURL:"",ubbURL:"",srcID:"",status:"uploading",progreess:0,serverCompress:o,retryCount:0}),t(e)};if(l)$t.compressAccurately(a,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(this.$t("uploadForm.compressedFileTooLarge",{name:a.name})),o(this.$t("uploadForm.fileSizeTooLarge"))),this.uploading=!0;const s=new File([t],a.name,{type:t.type});s.uid=e.uid;const l=this.uploadCount++,i=this.serverCompress&&s.size/1024/1024<10&&"telegram"===this.uploadChannel;0===l?n(s,i):setTimeout(()=>{n(s,i),this.uploadCount--},300*l)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:a.name})),o(e)});else if(i){this.uploading=!0;const e=this.uploadCount++,t="telegram"===this.uploadChannel&&this.serverCompress&&(!a.type.includes("image")||a.size/1024/1024<10);0===e?n(a,t):setTimeout(()=>{n(a,t),this.uploadCount--},300*e)}else this.$message.error(this.$t("uploadForm.fileTooLarge",{name:a.name})),o(this.$t("uploadForm.fileSizeTooLarge"))})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){const e=this.fileList.filter(e=>"done"===e.status||"success"===e.status).map(e=>_t(e,this.selectedUrlForm)).join("\n");navigator.clipboard.writeText(e),this.$message({type:"success",message:this.$t("uploadForm.copyAllSuccess")})},clearFileList(){this.fileList.length>0?(this.abortControllers.forEach((e,t)=>{e.abort()}),this.abortControllers.clear(),this.uploadQueue=[],this.fileList=[],this.$message({type:"success",message:this.$t("uploadForm.fileListCleared")})):this.$message({type:"info",message:this.$t("uploadForm.fileListEmpty")})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:this.$t("uploadForm.successFilesCleared")})):this.$message({type:"info",message:this.$t("uploadForm.successFilesEmpty")})},handlePaste(e){if("INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName)return;const t=e.clipboardData.items;t.length>0&&this.uploadFromUrl(t)},handleUploadPasteUrls(){const e=this.pastedUrls.split("\n"),t=e.map(e=>e.trim()).filter(e=>""!==e).filter(e=>/^(https?:\/\/[^\s$.?#].[^\s]*)$/.test(e));if("save"===this.pasteUploadMethod)this.uploadFromUrl(t.map(e=>({kind:"string",getAsString:t=>{t(e)}})));else if("external"===this.pasteUploadMethod)for(let o=0;o`,i=`[img]${e}[/img]`,n=new File([],e.split("/").pop(),{type:"text/plain"});n.uid=Date.now()+o,n.url=e,this.fileList.push({uid:n.uid,name:n.name,url:e,finalURL:e,mdURL:s,htmlURL:l,ubbURL:i,srcID:e,status:"uploading",progreess:0,serverCompress:!1,uploadChannel:"external",retryCount:0}),this.uploadFile({file:n,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}},uploadFromUrl(e){for(let t=0;t{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}else"string"===e[t].kind&&e[t].getAsString(e=>{const o=/^(https?:\/\/[^\s$.?#].[^\s]*)$/;let a="";o.test(e)&&Ut.A.post("/api/fetchRes",{url:e},{responseType:"blob",withAuthCode:!0}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const l=o.headers["content-disposition"];if(l){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(l);if(null!=o&&o[1]){a=o[1].replace(/['"]/g,"");try{a=decodeURIComponent(a)}catch(s){a=""}}""===a&&(o=t.exec(l),null!=o&&o[1]&&(a=decodeURIComponent(o[1])))}if(""===a){const t=new URL(e);a=t.pathname.split("/").pop()}if(""===a){const o=new URL(e);let s=o.pathname.split(".").pop();(!s||""===s||s.length>10)&&(s="bin"),a="PastedFile"+Date.now()+t+"."+s}const i=o.data,n=new File([i],a,{type:i.type});n.uid=Date.now()+t;const r=this.beforeUpload(n);r instanceof Promise&&r.then(e=>{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}}).catch(e=>{this.$message({type:"warning",message:this.$t("uploadForm.urlRequestFailed")})})})},handleScroll(e){this.listScrolled=e.scrollTop>0&&this.fileList.length>0},retryError(){this.exceptionList.length>0?(this.retryFailedFiles(this.exceptionList),this.exceptionList=[]):this.$message({type:"info",message:this.$t("uploadForm.noFailedFiles")})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?this.$t("uploadForm.autoRetryOn"):this.$t("uploadForm.autoRetryOff")}),e&&this.exceptionList.length>0&&this.scheduleAutoRetry()},retryFailedFiles(e){e.forEach(e=>{const t=e.retryCount||0;tthis.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})):this.$message({type:"warning",message:this.$t("uploadForm.maxRetryReached",{name:e.name,max:this.maxRetryCount})})})},scheduleAutoRetry(){this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{if(this.autoReUpload&&this.exceptionList.length>0){const e=[...this.exceptionList];this.exceptionList=[],this.retryFailedFiles(e)}},this.retryDelay)},async uploadToHuggingFaceDirect(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=new AbortController;this.abortControllers.set(e.file.uid,o);try{console.log("=== HuggingFace Direct Upload ==="),console.log("File:",e.file.name,"Size:",e.file.size),e.onProgress({percent:5,file:e.file}),console.log("Computing SHA256...");const t=await Dt(e.file);if(console.log("SHA256:",t),o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);const a=new Uint8Array(await e.file.slice(0,512).arrayBuffer()),s=btoa(String.fromCharCode(...a));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const l=await(0,Ut.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:s,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:this.uploadFolder},withAuthCode:!0,signal:o.signal});if(!l.data.success)throw new Error(l.data.error||"Failed to get upload URL");const i=l.data;if(console.log("Upload info:",i),i.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(i.needsLfs&&i.uploadAction){const{href:t,header:a}=i.uploadAction;if(a?.chunk_size)await this.uploadToHuggingFaceMultipart(e,i,o);else{console.log("Uploading to S3 (basic)...");const s=await fetch(t,{method:"PUT",headers:a||{},body:e.file,signal:o.signal});if(!s.ok){const e=await s.text();throw new Error(`S3 upload failed: ${s.status} - ${e}`)}console.log("S3 upload complete")}}if(o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);e.onProgress({percent:95,file:e.file}),console.log("Committing file...");const n=await(0,Ut.A)({url:"/upload/huggingface/commitUpload",method:"post",data:{fullId:i.fullId,filePath:i.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:i.channelName},withAuthCode:!0,signal:o.signal});if(!n.data.success)throw new Error(n.data.error||"Failed to commit file");console.log("Upload complete:",n.data);const r={data:[{src:n.data.src}]};e.onSuccess(r,e.file)}catch(a){if("CanceledError"===a.name||"ERR_CANCELED"===a.code||"AbortError"===a.name)return void console.log("HuggingFace 上传已取消:",e.file.name);console.error("HuggingFace direct upload error:",a),this.exceptionList.push(e),e.onError(a,e.file)}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},async uploadToHuggingFaceMultipart(e,t,o){const{uploadAction:a}=t,{href:s,header:l}=a,i=parseInt(l.chunk_size),n=Object.keys(l).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${i}`);const r=[],d=n.length;for(const u of n){if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");const t=parseInt(u)-1,a=t*i,s=Math.min(a+i,e.file.size),n=e.file.slice(a,s);console.log(`Uploading part ${u}/${d}`);const c=await fetch(l[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!c.ok)throw new Error(`Failed to upload part ${u}: ${c.status}`);const p=c.headers.get("ETag");if(!p)throw new Error(`No ETag for part ${u}`);r.push({partNumber:parseInt(u),etag:p});const h=10+Math.round(parseInt(u)/d*80);e.onProgress({percent:h,file:e.file})}if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");console.log("Completing multipart upload...");const c=await fetch(s,{method:"POST",headers:{Accept:"application/vnd.git-lfs+json","Content-Type":"application/vnd.git-lfs+json"},body:JSON.stringify({oid:t.oid,parts:r}),signal:o?o.signal:void 0});if(!c.ok){const e=await c.text();throw new Error(`Multipart complete failed: ${c.status} - ${e}`)}console.log("Multipart upload complete")},async convertImageToWebp(e){return new Promise((t,o)=>{if(e.type.includes("gif")||e.type.includes("svg")||e.type.includes("webp"))return void t(null);const a=new Image,s=document.createElement("canvas"),l=s.getContext("2d");a.onload=()=>{s.width=a.width,s.height=a.height,l.drawImage(a,0,0),s.toBlob(s=>{if(s){const o=e.name,a=o.lastIndexOf("."),l=a>0?o.substring(0,a)+".webp":o+".webp",i=new File([s],l,{type:"image/webp"});i.uid=e.uid,t(i)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(a.src)},"image/webp",.92)},a.onerror=()=>{URL.revokeObjectURL(a.src),o(new Error(this.$t("uploadForm.imageLoadFailed")))},a.src=URL.createObjectURL(e)})},handleUploadCardMouseMove(e){const t=this.$refs.uploadCardGlow;if(!t)return;const o=e.currentTarget.getBoundingClientRect(),a=e.clientX-o.left,s=e.clientY-o.top;t.style.opacity="1",t.style.left=a+"px",t.style.top=s+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const Nt=(0,W.A)(It,[["render",Lt],["__scopeId","data-v-5f291428"]]);var Pt=Nt,zt=o(732),Vt=o(33892),Wt=o(45130);const Ht={class:"directory-suggestion-input",ref:"wrapperRef"},Bt={class:"suggestion-dropdown"},Qt={class:"suggestion-list"},Xt=["title","onMousedown"];function qt(e,t,o,a,s,n){const r=G.WK;return(0,l.uX)(),(0,l.CE)("div",Ht,[(0,l.bF)(r,{ref:"inputRef",modelValue:n.inputValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputValue=e),placeholder:o.placeholder,onFocus:n.handleFocus,onBlur:n.handleBlur,onInput:n.handleInput},null,8,["modelValue","placeholder","onFocus","onBlur","onInput"]),(0,l.bo)((0,l.Lk)("div",Bt,[(0,l.Lk)("ul",Qt,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(s.suggestions,(e,t)=>((0,l.uX)(),(0,l.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,Wt.D$)(t=>n.selectItem(e),["prevent"])},(0,i.v_)(e.value),41,Xt))),128))])],512),[[Wt.aG,s.dropdownVisible&&s.suggestions.length>0]])],512)}var jt={name:"DirectorySuggestionInput",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:""}},emits:["update:modelValue","focus","blur","select"],data(){return{directoryTreeRoot:null,directoryTreeLoaded:!1,directoryTreeLoading:!1,directoryChildrenMap:{},focusTime:null,dropdownVisible:!1,isFocused:!1,suggestions:[]}},computed:{inputValue:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},watch:{modelValue(){this.isFocused&&this.refreshSuggestions()}},methods:{handleFocus(){this.isFocused=!0,this.focusTime=Date.now(),this.ensureDirectoryTreeLoaded(),this.$emit("focus"),setTimeout(()=>{this.isFocused&&(this.refreshSuggestions(),this.dropdownVisible=!0)},500)},handleBlur(){this.isFocused=!1,this.dropdownVisible=!1,this.$emit("blur")},handleInput(e){this.$nextTick(()=>{this.refreshSuggestions(),this.isFocused&&(this.dropdownVisible=!0)})},selectItem(e){const t=e.value;this.inputValue=t,this.$emit("select",t);const o=this.normalizeDirectoryPath(t),a=this.directoryChildrenMap[o];a&&a.length>0?this.$nextTick(()=>{this.refreshSuggestions(),this.dropdownVisible=!0,this.$refs.inputRef?.focus()}):this.dropdownVisible=!1},refreshSuggestions(){this.suggestions=this.getDirectorySuggestions(this.modelValue||"")},normalizeDirectoryPath(e){if(!e)return"/";let t=e;return t.startsWith("/")||(t="/"+t),"/"===t||t.endsWith("/")||(t+="/"),t},buildDirectoryChildrenMap(e){const t={},o=e=>{const a=this.normalizeDirectoryPath(e.path),s=Array.isArray(e.children)?e.children:[];t[a]=s.map(e=>({name:e.name,path:this.normalizeDirectoryPath(e.path)})),s.forEach(o)};o(e),this.directoryChildrenMap=t},async ensureDirectoryTreeLoaded(){if(!this.directoryTreeLoaded&&!this.directoryTreeLoading){this.directoryTreeLoading=!0;try{const e=await Ut.A.get("/api/directoryTree",{withAuthCode:!0}),t=e?.data?.tree;t&&(this.directoryTreeRoot=t,this.buildDirectoryChildrenMap(t),this.directoryTreeLoaded=!0)}catch(e){console.error("Failed to load directory tree for autocomplete:",e)}finally{this.directoryTreeLoading=!1}}},parseDirectoryQuery(e){const t=e&&e.startsWith("/")?e:`/${e||""}`,o=t.slice(1),a=o.split("/"),s=a[a.length-1]||"",l=a.slice(0,-1).filter(Boolean),i=l.length>0?`/${l.join("/")}/`:"/";return{segmentInput:s,parentPath:i}},getDirectorySuggestions(e){const{segmentInput:t,parentPath:o}=this.parseDirectoryQuery(e),a=this.directoryChildrenMap[o]||[];if(!t)return a.slice(0,10).map(e=>({value:e.path}));const s=t.toLowerCase();return a.filter(e=>e.name.toLowerCase().startsWith(s)).slice(0,10).map(e=>({value:e.path}))}}};const Ot=(0,W.A)(jt,[["render",qt],["__scopeId","data-v-0ff63416"]]);var Gt=Ot,Kt=o(6834);const Jt={class:"container"},Yt={class:"upload-home"},Zt={class:"quick-toolbar-actions"},eo={class:"quick-toolbar-actions-inner"},to={class:"header"},oo={class:"title"},ao={class:"title-crayon-text","aria-hidden":"true"},so={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},lo={class:"dialog-section"},io={class:"section-header"},no={class:"section-title"},ro={class:"section-content"},co={class:"dialog-section"},uo={class:"section-header"},po={class:"section-title"},ho={class:"section-content"},mo={class:"setting-item"},go={class:"setting-label"},fo={key:0,class:"setting-item"},yo={class:"setting-label"},bo={class:"dialog-action"},vo=["innerHTML"],ko={class:"dialog-footer"};function Co(e,t,o,n,r,d){const c=Kt.A,u=(0,l.g2)("font-awesome-icon"),p=s.S2,h=pt.c6,m=pt.Iy,g=pt.dW,f=Gt,y=G.WK,b=Vt.A,v=a.R7,k=zt.A,C=Pt,w=J.ll,F=J.MQ,L=O.qi,U=X.kZ,$=We,T=Q.A,S=B;return(0,l.uX)(),(0,l.CE)("div",Jt,[(0,l.Lk)("div",Yt,[(0,l.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,l.bF)(g,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,l.k6)(()=>[(0,l.bF)(m,null,{default:(0,l.k6)(()=>[(0,l.bF)(h,{command:"showHistory"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,l.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,l.bF)(h,{command:"toggleLanguage"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,l.bF)(h,{command:"viewDocs"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"more-button"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,l.Lk)("div",{class:(0,i.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,l.Lk)("div",{class:(0,i.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,l.uX)(),(0,l.Wv)(f,{key:0,modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),class:"inner-folder-input",placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur,onSelect:d.handleDirectorySelect},null,8,["modelValue","placeholder","onFocus","onBlur","onSelect"])):((0,l.uX)(),(0,l.Wv)(y,{key:1,class:"inner-folder-input",modelValue:r.uploadFolder,"onUpdate:modelValue":t[1]||(t[1]=e=>r.uploadFolder=e),placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur},null,8,["modelValue","placeholder","onFocus","onBlur"]))],2),d.showDirectorySuggestions?((0,l.uX)(),(0,l.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,l.k6)(()=>[(0,l.bF)(p,{class:"directory-tree-trigger"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,l.Q3)("",!0)],2),(0,l.bF)(v,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,l.k6)(()=>["default"===r.uploadMethod?((0,l.uX)(),(0,l.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,l.uX)(),(0,l.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,l.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,l.bF)(g,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,l.k6)(()=>[(0,l.bF)(m,null,{default:(0,l.k6)(()=>[(0,l.bF)(h,{command:"toggleTheme"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,l.eW)(" "+(0,i.v_)(d.getThemeText()),1)]),_:1}),(0,l.bF)(h,{command:"toggleUploadMethod"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,l.eW)(" "+(0,i.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,l.bF)(h,{command:"showHistory"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,l.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,l.bF)(h,{command:"toggleLanguage"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,l.bF)(h,{command:"viewDocs"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"mobile-more-button"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,l.Lk)("div",{class:(0,i.C4)(["quick-toolbar",{"is-expanded":r.isQuickToolbarOpen}]),onMouseleave:t[5]||(t[5]=(...e)=>d.handleQuickToolbarLeave&&d.handleQuickToolbarLeave(...e))},[(0,l.Lk)("div",Zt,[(0,l.Lk)("div",eo,[(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.logout"),placement:"left"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"quick-toolbar-button",onClick:t[2]||(t[2]=e=>d.handleQuickToolbarCommand("logout"))},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"sign-out-alt",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.manage"),placement:"left"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"quick-toolbar-button",onClick:t[3]||(t[3]=e=>d.handleQuickToolbarCommand("manage"))},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"cog",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.linkFormat"),placement:"left"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"quick-toolbar-button",onClick:t[4]||(t[4]=e=>d.handleQuickToolbarCommand("linkFormat"))},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"link",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"])])]),(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"left"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"quick-toolbar-button",onClick:d.openCompressDialog},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"cloud-upload",class:"quick-toolbar-icon"})]),_:1},8,["onClick"])]),_:1},8,["disabled","content"]),(0,l.bF)(p,{class:(0,i.C4)(["quick-toolbar-button quick-toolbar-more",{"is-active":r.isQuickToolbarOpen}]),"aria-expanded":r.isQuickToolbarOpen,onMouseenter:d.handleQuickToolbarMoreEnter,onClick:d.toggleQuickToolbar},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"chevron-down",class:"quick-toolbar-icon quick-toolbar-toggle-icon"})]),_:1},8,["class","aria-expanded","onMouseenter","onClick"])],34),(0,l.bF)(k,{useConfigLink:!0}),(0,l.Lk)("div",to,[(0,l.Lk)("h1",oo,[(0,l.Lk)("span",ao,(0,i.v_)(d.ownerName)+" ImgHub",1),(0,l.Lk)("a",so,(0,i.v_)(d.ownerName),1),t[25]||(t[25]=(0,l.eW)(" ImgHub ",-1))])]),(0,l.bF)(C,{selectedUrlForm:r.selectedUrlForm,customerCompress:r.customerCompress,compressQuality:r.compressQuality,compressBar:r.compressBar,serverCompress:r.serverCompress,uploadChannel:r.uploadChannel,channelName:r.channelName,uploadNameType:r.uploadNameType,useCustomUrl:r.useCustomUrl,customUrlPrefix:r.customUrlPrefix,autoRetry:r.autoRetry,urlPrefix:d.urlPrefix,uploadMethod:r.uploadMethod,uploadFolder:r.uploadFolder,convertToWebp:r.convertToWebp,class:"upload"},null,8,["selectedUrlForm","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadMethod","uploadFolder","convertToWebp"]),(0,l.bF)(U,{title:e.$t("settings.linkFormatTitle"),modelValue:r.showUrlDialog,"onUpdate:modelValue":t[10]||(t[10]=e=>r.showUrlDialog=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",lo,[(0,l.Lk)("div",io,[(0,l.Lk)("span",no,(0,i.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,l.Lk)("div",ro,[(0,l.bF)(F,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[6]||(t[6]=e=>r.selectedUrlForm=e),onChange:d.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,l.k6)(()=>[(0,l.bF)(w,{value:"url",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"link",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,l.bF)(w,{value:"md",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"code",class:"radio-icon"}),t[26]||(t[26]=(0,l.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,l.bF)(w,{value:"html",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[27]||(t[27]=(0,l.Lk)("span",null,"HTML",-1))]),_:1}),(0,l.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[28]||(t[28]=(0,l.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,l.Lk)("div",co,[(0,l.Lk)("div",uo,[(0,l.Lk)("span",po,(0,i.v_)(e.$t("settings.customLink")),1),(0,l.bF)(v,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",ho,[(0,l.Lk)("div",mo,[(0,l.Lk)("span",go,(0,i.v_)(e.$t("settings.enableCustom")),1),(0,l.bF)(L,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[7]||(t[7]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,l.uX)(),(0,l.CE)("div",fo,[(0,l.Lk)("span",yo,(0,i.v_)(e.$t("settings.customPrefix")),1),(0,l.bF)(y,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[8]||(t[8]=e=>r.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,l.Q3)("",!0)])]),(0,l.Lk)("div",bo,[(0,l.bF)(p,{type:"primary",onClick:t[9]||(t[9]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,l.bF)($,{modelValue:r.showCompressDialog,"onUpdate:modelValue":t[11]||(t[11]=e=>r.showCompressDialog=e),uploadChannel:r.uploadChannel,"onUpdate:uploadChannel":t[12]||(t[12]=e=>r.uploadChannel=e),channelName:r.channelName,"onUpdate:channelName":t[13]||(t[13]=e=>r.channelName=e),currentChannelList:d.currentChannelList,uploadFolder:r.uploadFolder,"onUpdate:uploadFolder":t[14]||(t[14]=e=>r.uploadFolder=e),autoRetry:r.autoRetry,"onUpdate:autoRetry":t[15]||(t[15]=e=>r.autoRetry=e),uploadNameType:r.uploadNameType,"onUpdate:uploadNameType":t[16]||(t[16]=e=>r.uploadNameType=e),convertToWebp:r.convertToWebp,"onUpdate:convertToWebp":t[17]||(t[17]=e=>r.convertToWebp=e),customerCompress:r.customerCompress,"onUpdate:customerCompress":t[18]||(t[18]=e=>r.customerCompress=e),compressBar:r.compressBar,"onUpdate:compressBar":t[19]||(t[19]=e=>r.compressBar=e),compressQuality:r.compressQuality,"onUpdate:compressQuality":t[20]||(t[20]=e=>r.compressQuality=e),serverCompress:r.serverCompress,"onUpdate:serverCompress":t[21]||(t[21]=e=>r.serverCompress=e)},null,8,["modelValue","uploadChannel","channelName","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,l.bF)(T,{class:"footer"}),(0,l.bF)(U,{title:e.$t("upload.announcementTitle"),modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[23]||(t[23]=e=>r.showAnnouncementDialog=e),width:d.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,l.k6)(()=>[(0,l.Lk)("span",ko,[(0,l.bF)(p,{type:"primary",onClick:t[22]||(t[22]=e=>r.showAnnouncementDialog=!1)},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.announcementAck")),1)]),_:1})])]),default:(0,l.k6)(()=>[(0,l.Lk)("div",{innerHTML:r.announcementContent},null,8,vo)]),_:1},8,["title","modelValue","width"]),(0,l.bF)(S,{show:r.showHistory,onClose:t[24]||(t[24]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var wo=o(46638),Fo=o(48903),Lo=o(90144),Uo=o(62388),$o={name:"UploadHome",mixins:[Fo.A],data(){return{selectedUrlForm:(0,Lo.KR)(""),showUrlDialog:!1,showCompressDialog:!1,customerCompress:!0,compressQuality:4,compressBar:5,convertToWebp:!1,serverCompress:!0,uploadChannel:"",channelName:"",availableChannels:{},uploadNameType:"",customUrlPrefix:"",useCustomUrl:"false",autoRetry:!0,useDefaultWallPaper:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,isQuickToolbarOpen:!1,isQuickToolbarPinned:!1,showAnnouncementDialog:!1,announcementContent:"",showHistory:!1,themeMode:"auto"}},watch:{customerCompress(e){this.updateCompressConfig("customerCompress",e)},compressQuality(e){this.updateCompressConfig("compressQuality",e)},compressBar(e){null===e||void 0===e||e<1?this.compressBar=1:(this.compressQuality>e&&(this.compressQuality=e),this.updateCompressConfig("compressBar",e))},serverCompress(e){this.updateCompressConfig("serverCompress",e)},convertToWebp(e){this.updateCompressConfig("convertToWebp",e)},uploadChannel(e){this.updateStoreUploadChannel(e);const t=this.availableChannels[e]||[],o=this.storeChannelName;o&&t.some(e=>e.name===o)?this.channelName=o:this.channelName=""},channelName(e){this.$store.commit("setStoreChannelName",e||"")},uploadNameType(e){this.updateStoreUploadNameType(e)},customUrlPrefix(e){this.$store.commit("setCustomUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setCustomUrlSettings",{key:"useCustomUrl",value:e})},autoRetry(e){this.$store.commit("setStoreAutoRetry",e)},uploadFolder(e){if(this.validateUploadFolder(e,!1)){const t=(0,Uo.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,Tt.L8)(["userConfig","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeUploadNameType","customUrlSettings","storeAutoRetry","storeUploadMethod","storeUploadFolder"]),ownerName(){return this.userConfig?.ownerName||"Sanyue"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},disableTooltip(){return window.innerWidth<768},urlPrefix(){return this.userConfig?.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},announcementAvailable(){return!!this.userConfig?.announcement},showDirectorySuggestions(){return this.userConfig?.showDirectorySuggestions??!1},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!1,!0),this.selectedUrlForm=this.uploadCopyUrlForm||"url",this.customerCompress=this.compressConfig.customerCompress??this.parseBoolean(this.userConfig?.defaultCustomerCompress,!0),this.compressQuality=this.compressConfig.compressQuality??this.parseNumber(this.userConfig?.defaultCompressQuality,4),this.compressBar=this.compressConfig.compressBar??this.parseNumber(this.userConfig?.defaultCompressBar,5),this.serverCompress=this.compressConfig.serverCompress??!0,this.convertToWebp=this.compressConfig.convertToWebp??this.parseBoolean(this.userConfig?.defaultConvertToWebp,!1),this.uploadChannel=this.storeUploadChannel||this.userConfig?.defaultUploadChannel||"telegram",this.autoRetry=this.storeAutoRetry,this.uploadNameType=this.storeUploadNameType||this.userConfig?.defaultUploadNameType||"default",this.customUrlPrefix=this.customUrlSettings.customUrlPrefix,this.useCustomUrl=this.customUrlSettings.useCustomUrl,this.uploadMethod=this.storeUploadMethod,this.fetchAvailableChannels(),this.uploadFolder=this.storeUploadFolder||this.userConfig?.defaultUploadFolder||"";const e=this.$store.getters.cusDarkMode,t=this.$store.getters.useDarkMode;this.themeMode=e?t?"dark":"light":"auto";const o=localStorage.getItem("visitedUploadHome"),a=this.userConfig?.announcement;!o&&a&&(this.announcementContent=a,this.showAnnouncementDialog=!0,localStorage.setItem("visitedUploadHome","true"))},components:{UploadForm:Pt,Footer:Q.A,ToggleDark:Kt.A,Logo:zt.A,UploadHistory:B,UploadSettingsDialog:We,DirectoryTreePicker:Vt.A,DirectorySuggestionInput:Gt},methods:{async fetchAvailableChannels(){try{const e=await Ut.A.get("/api/channels",{withAuthCode:!0});if(e.data){this.availableChannels=e.data;const t=this.storeChannelName,o=this.userConfig?.defaultChannelName,a=this.availableChannels[this.uploadChannel]||[];t&&a.some(e=>e.name===t)?this.channelName=t:""!==t&&null!==t&&void 0!==t||""!==t&&o&&a.some(e=>e.name===o)&&(this.channelName=o)}}catch(e){console.error("Failed to fetch available channels:",e)}},validateUploadFolder(e,t=!0){e&&!e.startsWith("/")&&(e="/"+e,this.uploadFolder=e);const o=(0,Uo.G)(e,{strict:t});return!!o.valid||(this.$message.error(o.error),!1)},handleFolderInputFocus(){this.isFolderInputActive=!0},handleFolderInputBlur(){this.isFolderInputActive=!1,this.uploadFolder&&!this.uploadFolder.startsWith("/")&&(this.uploadFolder="/"+this.uploadFolder),this.validateUploadFolder(this.uploadFolder,!0)||this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})},handleManage(){this.$router.push("/dashboard")},parseBoolean(e,t){return void 0===e||null===e?t:"boolean"===typeof e?e:"string"===typeof e?"true"===e:t},parseNumber(e,t){if(void 0===e||null===e)return t;const o=parseFloat(e);return isNaN(o)?t:o},openUrlDialog(){this.showUrlDialog=!0},handleLogout(){Ut.A.post("/api/auth/logout",{authType:"user"},{withCredentials:!0}).finally(()=>{this.$store.commit("setUserLoggedIn",!1),this.$router.push("/login"),this.$message.success(this.$t("upload.logoutSuccess"))})},changeUrlForm(){this.$store.commit("setUploadCopyUrlForm",this.selectedUrlForm)},openCompressDialog(){this.showCompressDialog=!0},updateCompressConfig(e,t){this.$store.commit("setCompressConfig",{key:e,value:t})},updateStoreUploadChannel(e){this.$store.commit("setStoreUploadChannel",e)},updateStoreUploadNameType(e){this.$store.commit("setStoreUploadNameType",e)},handleQuickToolbarMoreEnter(){this.isQuickToolbarOpen=!0},handleQuickToolbarLeave(){this.isQuickToolbarPinned||(this.isQuickToolbarOpen=!1)},toggleQuickToolbar(){this.isQuickToolbarPinned=!this.isQuickToolbarPinned,this.isQuickToolbarOpen=this.isQuickToolbarPinned},closeQuickToolbar(){this.isQuickToolbarPinned=!1,this.isQuickToolbarOpen=!1},handleQuickToolbarCommand(e){this.closeQuickToolbar(),"linkFormat"===e?this.openUrlDialog():"manage"===e?this.handleManage():"logout"===e&&this.handleLogout()},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){if("toggleTheme"===e)"auto"===this.themeMode?(this.themeMode="light",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):"light"===this.themeMode?(this.themeMode="dark",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0)):(this.themeMode="auto",this.$store.commit("setCusDarkMode",!1));else if("toggleUploadMethod"===e)this.handleChangeUploadMethod();else if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,wo.xS)(e)}},handleDesktopMenuCommand(e){if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,wo.xS)(e)}},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?this.$t("theme.lightMode"):"light"===this.themeMode?this.$t("theme.darkMode"):this.$t("theme.autoMode")},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?(this.announcementContent=e,this.showAnnouncementDialog=!0):this.$message.info(this.$t("upload.noAnnouncement"))},handleDirectorySelect(e){this.uploadFolder=e,this.validateUploadFolder(e,!0)&&this.$store.commit("setStoreUploadFolder",e)}}};const To=(0,W.A)($o,[["render",Co],["__scopeId","data-v-4d468a92"]]);var So=To},23597:function(e,t,o){"use strict";o(85331)},30694:function(e,t,o){"use strict";o(85331)},33892:function(e,t,o){"use strict";o.d(t,{A:function(){return $}});var a=o(99114),s=(o(85331),o(30694),o(49385)),l=(o(37952),o(30650)),i=(o(19104),o(31802)),n=(o(13378),o(80047)),r=(o(99648),o(56768)),d=o(45130),c=o(24232);const u={class:"directory-tree-picker"},p={class:"tree-container"},h={key:0,class:"error-state"},m={class:"error-text"},g={class:"node-label"},f={class:"tree-container"},y={key:0,class:"error-state"},b={class:"error-text"},v={class:"node-label"};function k(e,t,o,k,C,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=i.qk,$=l.Vc,T=s.pw,S=a.A;return(0,r.uX)(),(0,r.CE)("div",u,[w.isDesktop?((0,r.uX)(),(0,r.Wv)($,{key:0,visible:C.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>C.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,r.k6)(()=>[(0,r.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",p,[C.error?((0,r.uX)(),(0,r.CE)("div",h,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",m,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRef",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",g,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[S,C.loading]])]),_:3},8,["visible"])):((0,r.uX)(),(0,r.CE)(r.FK,{key:1},[(0,r.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,r.bF)(T,{modelValue:C.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>C.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",f,[C.error?((0,r.uX)(),(0,r.CE)("div",y,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",b,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRefMobile",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",v,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[S,C.loading]])]),_:1},8,["modelValue","title"])],64))])}var C=o(457),w=o(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,w.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await C.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},L=o(71241);const U=(0,L.A)(F,[["render",k],["__scopeId","data-v-62eab69a"]]);var $=U},34396:function(e,t,o){"use strict";o(85331),o(4885)},37952:function(e,t,o){"use strict";o(85331),o(97197)},38736:function(e,t,o){"use strict";o(85331)},40670:function(e,t,o){"use strict";o(85331),o(99648),o(19104),o(85970)},50333:function(e,t,o){"use strict";o(85331),o(29092)},53676:function(e,t,o){"use strict";o.d(t,{A:function(){return u}});var a=o(56768);const s={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},l={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function n(e,t,o,n,r,d){const c=(0,a.g2)("font-awesome-icon");return(0,a.uX)(),(0,a.CE)("span",(0,a.v6)(e.$attrs,{class:"channel-icon-wrapper"}),["telegram"===o.type?((0,a.uX)(),(0,a.CE)("svg",s,[...t[0]||(t[0]=[(0,a.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===o.type?((0,a.uX)(),(0,a.CE)("svg",l,[...t[1]||(t[1]=[(0,a.Fv)('',9)])])):"webdav"===o.type?((0,a.uX)(),(0,a.CE)("svg",i,[...t[2]||(t[2]=[(0,a.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,a.uX)(),(0,a.Wv)(c,{key:3,icon:d.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},d=o(71241);const c=(0,d.A)(r,[["render",n],["__scopeId","data-v-33933ada"]]);var u=c},62388:function(e,t,o){"use strict";o.d(t,{G:function(){return s}});var a=o(46638);function s(e,{strict:t=!0}={}){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:a.Ay.global.t("validation.pathMustStartWithSlash")};if(/(?:^|\/)\.\.(\/|$)/.test(e)||e.includes(".."))return{valid:!1,error:a.Ay.global.t("validation.pathTraversalNotAllowed")};const o=t?/\/\.(\/|$)/:/\/\.\//;if(o.test(e))return{valid:!1,error:a.Ay.global.t("validation.singleDotNotAllowed")};if(e.includes("//"))return{valid:!1,error:a.Ay.global.t("validation.consecutiveSlashNotAllowed")};const s=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return s.test(e)?{valid:!1,error:a.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},67819:function(e,t,o){"use strict";o(85331)},70797:function(e,t,o){"use strict";o.d(t,{A:function(){return i}});o(44114);var a=o(25507),s=o(16915);let l=!1;async function i(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||l||(l=!0,a.A.commit("setAdminLoggedIn",!1),s.A.push("/adminLogin").finally(()=>{l=!1})),o}},76334:function(e,t,o){e.exports=o(11393)},79899:function(e,t,o){"use strict";o(85331)},85970:function(e,t,o){"use strict";o(85331)},88830:function(e,t,o){"use strict";o(85331)},95385:function(e,t,o){"use strict";o(85331)},96682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},96808:function(e,t,o){"use strict";o(85331),o(18785),o(67819),o(85970),o(19104)}}]); +//# sourceMappingURL=382.da41c2f4.js.map \ No newline at end of file diff --git a/frontend-dist/js/382.da41c2f4.js.gz b/frontend-dist/js/382.da41c2f4.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..9999551b38b555419dd245baaca9c189692632d6 GIT binary patch literal 29669 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/382.da41c2f4.js.map b/frontend-dist/js/382.da41c2f4.js.map new file mode 100644 index 00000000..5c2293ee --- /dev/null +++ b/frontend-dist/js/382.da41c2f4.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/382.da41c2f4.js","mappings":"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","sources":["webpack://sanyue_imghub/./node_modules/image-conversion/build/conversion.js","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?61df","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?d5f5","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?0f5d","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?adb2","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?d2e4","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?420c","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?7e8b","webpack://sanyue_imghub/./src/utils/upload/urlBuilder.js","webpack://sanyue_imghub/./src/utils/upload/sha256.js","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?bdbd","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?be1c","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?69c3","webpack://sanyue_imghub/./src/views/UploadHome.vue?645d","webpack://sanyue_imghub/./src/views/UploadHome.vue","webpack://sanyue_imghub/./src/views/UploadHome.vue?af00","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?4482","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05","webpack://sanyue_imghub/./src/utils/pathValidator.js","webpack://sanyue_imghub/./src/utils/fetchWithAuth.js","webpack://sanyue_imghub/./node_modules/image-conversion/index.js"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.imageConversion=e():t.imageConversion=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=0)}([function(t,e,n){\"use strict\";var r;function o(t){return[\"image/png\",\"image/jpeg\",\"image/gif\"].some(e=>e===t)}n.r(e),n.d(e,\"canvastoDataURL\",(function(){return a})),n.d(e,\"canvastoFile\",(function(){return c})),n.d(e,\"dataURLtoFile\",(function(){return s})),n.d(e,\"dataURLtoImage\",(function(){return l})),n.d(e,\"downloadFile\",(function(){return d})),n.d(e,\"filetoDataURL\",(function(){return f})),n.d(e,\"imagetoCanvas\",(function(){return g})),n.d(e,\"urltoBlob\",(function(){return w})),n.d(e,\"urltoImage\",(function(){return m})),n.d(e,\"compress\",(function(){return p})),n.d(e,\"compressAccurately\",(function(){return b})),n.d(e,\"EImageType\",(function(){return r})),function(t){t.PNG=\"image/png\",t.JPEG=\"image/jpeg\",t.GIF=\"image/gif\"}(r||(r={}));var i=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function a(t,e=.92,n=r.JPEG){return i(this,void 0,void 0,(function*(){return o(n)||(n=r.JPEG),t.toDataURL(n,e)}))}function c(t,e=.92,n=r.JPEG){return new Promise(r=>t.toBlob(t=>r(t),n,e))}var u=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function s(t,e){return u(this,void 0,void 0,(function*(){const n=t.split(\",\");let r=n[0].match(/:(.*?);/)[1];const i=atob(n[1]);let a=i.length;const c=new Uint8Array(a);for(;a--;)c[a]=i.charCodeAt(a);return o(e)&&(r=e),new Blob([c],{type:r})}))}function l(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"dataURLtoImage(): dataURL is illegal\")),r.src=t})}function d(t,e){const n=document.createElement(\"a\");n.href=window.URL.createObjectURL(t),n.download=e||Date.now().toString(36),document.body.appendChild(n);const r=document.createEvent(\"MouseEvents\");r.initEvent(\"click\",!1,!1),n.dispatchEvent(r),document.body.removeChild(n)}function f(t){return new Promise(e=>{const n=new FileReader;n.onloadend=t=>e(t.target.result),n.readAsDataURL(t)})}var h=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function g(t,e={}){return h(this,void 0,void 0,(function*(){const n=Object.assign({},e),r=document.createElement(\"canvas\"),o=r.getContext(\"2d\");let i,a;for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=Number(n[t]));if(n.scale){const e=n.scale>0&&n.scale<10?n.scale:1;a=t.width*e,i=t.height*e}else a=n.width||n.height*t.width/t.height||t.width,i=n.height||n.width*t.height/t.width||t.height;switch([5,6,7,8].some(t=>t===n.orientation)?(r.height=a,r.width=i):(r.height=i,r.width=a),n.orientation){case 3:o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 6:o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 8:o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;case 2:o.translate(r.width,0),o.scale(-1,1),o.drawImage(t,0,0,r.width,r.height);break;case 4:o.translate(r.width,0),o.scale(-1,1),o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 5:o.translate(r.width,0),o.scale(-1,1),o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 7:o.translate(r.width,0),o.scale(-1,1),o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;default:o.drawImage(t,0,0,r.width,r.height)}return r}))}function w(t){return fetch(t).then(t=>t.blob())}function m(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"urltoImage(): Image failed to load, please check the image URL\")),r.src=t})}var y=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function p(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compress(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({quality:e})),e.quality=Number(e.quality),Number.isNaN(e.quality))return t;const n=yield f(t);let i=n.split(\",\")[0].match(/:(.*?);/)[1],c=r.JPEG;o(e.type)&&(c=e.type,i=e.type);const u=yield l(n),d=yield g(u,Object.assign({},e)),h=yield a(d,e.quality,c),w=yield s(h,i);return w.size>t.size?t:w}))}function b(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compressAccurately(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({size:e})),e.size=Number(e.size),Number.isNaN(e.size))return t;if(1024*e.size>t.size)return t;e.accuracy=Number(e.accuracy),(!e.accuracy||e.accuracy<.8||e.accuracy>.99)&&(e.accuracy=.95);const n=e.size*(2-e.accuracy)*1024,i=1024*e.size,c=e.size*e.accuracy*1024,u=yield f(t);let d=u.split(\",\")[0].match(/:(.*?);/)[1],h=r.JPEG;o(e.type)&&(h=e.type,d=e.type);const w=yield l(u),m=yield g(w,Object.assign({},e));let y,p=.5;const b=[null,null];for(let t=1;t<=7;t++){y=yield a(m,p,h);const e=.75*y.length;if(7===t){(ne)&&(y=[y,...b].filter(t=>t).sort((t,e)=>Math.abs(.75*t.length-i)-Math.abs(.75*e.length-i))[0]);break}if(ne))break;b[0]=y,p+=Math.pow(.5,t+1)}}const v=yield s(y,d);return v.size>t.size?t:v}))}}])}));","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"history-header\"\n};\nconst _hoisted_2 = {\n class: \"header-left\"\n};\nconst _hoisted_3 = {\n class: \"record-count\"\n};\nconst _hoisted_4 = {\n class: \"header-right\"\n};\nconst _hoisted_5 = {\n class: \"timeline-header\"\n};\nconst _hoisted_6 = {\n class: \"date-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"grid-view\"\n};\nconst _hoisted_8 = {\n class: \"grid-preview\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = {\n key: 2,\n class: \"file-icon-wrapper\"\n};\nconst _hoisted_12 = {\n class: \"grid-overlay\"\n};\nconst _hoisted_13 = {\n class: \"grid-actions\"\n};\nconst _hoisted_14 = {\n class: \"grid-info\"\n};\nconst _hoisted_15 = [\"title\"];\nconst _hoisted_16 = {\n class: \"upload-time\"\n};\nconst _hoisted_17 = {\n key: 1,\n class: \"list-view\"\n};\nconst _hoisted_18 = {\n class: \"list-preview\"\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = [\"src\"];\nconst _hoisted_21 = {\n key: 2,\n class: \"file-icon-wrapper-small\"\n};\nconst _hoisted_22 = {\n class: \"list-info\"\n};\nconst _hoisted_23 = [\"title\"];\nconst _hoisted_24 = [\"title\"];\nconst _hoisted_25 = {\n class: \"list-meta\"\n};\nconst _hoisted_26 = {\n class: \"upload-time\"\n};\nconst _hoisted_27 = {\n class: \"list-actions\"\n};\nconst _hoisted_28 = {\n key: 0,\n class: \"load-more-container\"\n};\nconst _hoisted_29 = {\n key: 0,\n class: \"loading-indicator\"\n};\nconst _hoisted_30 = {\n key: 1,\n class: \"load-more-hint\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"no-more-hint\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"empty-state\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"history-container\", {\n 'active': $props.show\n }])\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t('uploadHistory.title')), 1), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadHistory.totalRecords', {\n count: $data.totalCount\n })), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.switchView'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n onClick: $options.toggleViewMode\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'grid' ? 'list' : 'th-large'\n }, null, 8, [\"icon\"])]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.clearRecords'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n type: \"danger\",\n onClick: $options.clearHistory\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_button, {\n circle: \"\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('close'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })])]), $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"history-content\",\n ref: \"historyContent\",\n onScroll: _cache[3] || (_cache[3] = (...args) => $options.handleScroll && $options.handleScroll(...args))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedHistory, group => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: group.date,\n class: \"history-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"timeline-dot\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_6, _toDisplayString(group.date), 1)]), $data.viewMode === 'grid' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"grid-item\"\n }, [_createElementVNode(\"div\", _hoisted_8, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[1] || (_cache[1] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_9)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_10)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_15), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.formatTime(item.time)), 1)])]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"list-item\"\n }, [_createElementVNode(\"div\", _hoisted_18, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[2] || (_cache[2] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_19)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_20)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\"\n })]))]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_23), _createElementVNode(\"div\", {\n class: \"file-url\",\n title: item.url\n }, _toDisplayString(item.url), 9, _hoisted_24)]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, _toDisplayString($options.formatTime(item.time)), 1)]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])]);\n }), 128))]))]);\n }), 128)), $options.hasMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [$data.loadingMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"spinner\",\n spin: \"\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadHistory.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('uploadHistory.pullToLoadMore')), 1))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('uploadHistory.noMoreRecords')), 1)) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('uploadHistory.emptyHistory')), 1)]))], 2);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nexport default {\n name: 'UploadHistory',\n props: {\n show: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n historyList: [],\n allHistory: [],\n // 完整历史记录\n viewMode: 'grid',\n // 'grid' or 'list'\n pageSize: 30,\n // 每次加载数量\n currentPage: 0,\n loadingMore: false,\n totalCount: 0\n };\n },\n watch: {\n show(val) {\n if (val) {\n this.resetAndLoad();\n }\n }\n },\n computed: {\n hasMore() {\n return this.historyList.length < this.totalCount;\n },\n groupedHistory() {\n const groups = {};\n this.historyList.forEach(item => {\n const date = new Date(item.time);\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n if (!groups[dateStr]) {\n groups[dateStr] = [];\n }\n groups[dateStr].push(item);\n });\n\n // Sort dates descending\n return Object.keys(groups).sort((a, b) => new Date(b) - new Date(a)).map(date => ({\n date,\n items: groups[date]\n }));\n }\n },\n mounted() {\n // Load view mode preference\n const savedMode = localStorage.getItem('historyViewMode');\n if (savedMode) {\n this.viewMode = savedMode;\n }\n },\n methods: {\n resetAndLoad() {\n this.historyList = [];\n this.currentPage = 0;\n this.loadAllHistory();\n this.loadMore();\n },\n loadAllHistory() {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n // Sort by time desc\n this.allHistory = history.sort((a, b) => b.time - a.time);\n this.totalCount = this.allHistory.length;\n } catch (e) {\n console.error('Failed to load history', e);\n this.allHistory = [];\n this.totalCount = 0;\n }\n },\n loadMore() {\n if (this.loadingMore || !this.hasMore) return;\n this.loadingMore = true;\n\n // 模拟异步加载,避免阻塞UI\n setTimeout(() => {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n const newItems = this.allHistory.slice(start, end);\n this.historyList = [...this.historyList, ...newItems];\n this.currentPage++;\n this.loadingMore = false;\n }, 50);\n },\n handleScroll(e) {\n const container = e.target;\n const scrollTop = container.scrollTop;\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n\n // 距离底部 100px 时加载更多\n if (scrollHeight - scrollTop - clientHeight < 100) {\n this.loadMore();\n }\n },\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n localStorage.setItem('historyViewMode', this.viewMode);\n },\n clearHistory() {\n this.$confirm(this.$t('uploadHistory.clearConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.historyList = [];\n this.allHistory = [];\n this.totalCount = 0;\n this.currentPage = 0;\n localStorage.removeItem('uploadHistory');\n this.$message.success(this.$t('uploadHistory.recordsCleared'));\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm(this.$t('uploadHistory.deleteConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // Remove from lists\n this.historyList = this.historyList.filter(i => i.time !== item.time);\n this.allHistory = this.allHistory.filter(i => i.time !== item.time);\n this.totalCount = this.allHistory.length;\n\n // Update localStorage\n try {\n localStorage.setItem('uploadHistory', JSON.stringify(this.allHistory));\n this.$message.success(this.$t('uploadHistory.recordDeleted'));\n } catch (e) {\n console.error('Failed to update history', e);\n }\n }).catch(() => {});\n },\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return imageExtensions.includes(extension);\n },\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return videoExtensions.includes(extension);\n },\n formatTime(timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n },\n copyLink(url) {\n navigator.clipboard.writeText(url).then(() => {\n this.$message.success(this.$t('uploadHistory.linkCopied'));\n }).catch(() => {\n this.$message.error(this.$t('uploadHistory.copyFailed'));\n });\n },\n openLink(url) {\n window.open(url, '_blank');\n },\n handleImageError(e) {\n e.target.src = require('@/assets/404.png');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHistory.vue?vue&type=template&id=550797ce&scoped=true\"\nimport script from \"./UploadHistory.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHistory.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHistory.vue?vue&type=style&index=0&id=550797ce&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-550797ce\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"dialog-section\"\n};\nconst _hoisted_2 = {\n class: \"section-header\"\n};\nconst _hoisted_3 = {\n class: \"section-title\"\n};\nconst _hoisted_4 = {\n class: \"section-content\"\n};\nconst _hoisted_5 = {\n class: \"setting-item\"\n};\nconst _hoisted_6 = {\n class: \"setting-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_8 = {\n class: \"setting-label\"\n};\nconst _hoisted_9 = {\n class: \"setting-item\"\n};\nconst _hoisted_10 = {\n class: \"setting-label\"\n};\nconst _hoisted_11 = {\n class: \"setting-item\"\n};\nconst _hoisted_12 = {\n class: \"setting-label\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-header\"\n};\nconst _hoisted_19 = {\n class: \"section-title\"\n};\nconst _hoisted_20 = {\n class: \"section-content\"\n};\nconst _hoisted_21 = {\n class: \"setting-item\"\n};\nconst _hoisted_22 = {\n class: \"setting-label\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_30 = {\n class: \"setting-label\"\n};\nconst _hoisted_31 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_32 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_34 = {\n class: \"section-header\"\n};\nconst _hoisted_35 = {\n class: \"section-title\"\n};\nconst _hoisted_36 = {\n class: \"section-content\"\n};\nconst _hoisted_37 = {\n class: \"setting-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('uploadSettings.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadSettings.uploadChannel')), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"span\", _hoisted_6, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"telegram\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"telegram\",\n class: \"channel-icon channel-brand-telegram\"\n }), _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, \"TG\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"cfr2\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"cfr2\",\n class: \"channel-icon channel-brand-cfr2\"\n }), _cache[14] || (_cache[14] = _createElementVNode(\"span\", null, \"R2\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"s3\",\n class: \"channel-icon channel-brand-s3\"\n }), _cache[15] || (_cache[15] = _createElementVNode(\"span\", null, \"S3\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"discord\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"discord\",\n class: \"channel-icon channel-brand-discord\"\n }), _cache[16] || (_cache[16] = _createElementVNode(\"span\", null, \"DC\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"huggingface\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"huggingface\",\n class: \"channel-icon channel-brand-huggingface\"\n }), _cache[17] || (_cache[17] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"webdav\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"webdav\",\n class: \"channel-icon channel-brand-webdav\"\n }), _cache[18] || (_cache[18] = _createElementVNode(\"span\", null, \"WD\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.channelName')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.channelNameTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_select, {\n \"model-value\": $props.channelName,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.$emit('update:channelName', $event)),\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\", \"placeholder\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('uploadSettings.uploadDirectory')), 1), _createVNode(_component_el_input, {\n \"model-value\": $props.uploadFolder,\n \"onUpdate:modelValue\": $options.handleUploadFolderInput,\n placeholder: _ctx.$t('uploadSettings.uploadDirectoryPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"model-value\", \"onUpdate:modelValue\", \"placeholder\"])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"span\", _hoisted_12, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.autoSwitch')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.autoSwitchTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.autoRetry,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => _ctx.$emit('update:uploadNameType', $event)),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"default\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingDefault')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"index\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingIndex')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"origin\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"file-signature\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingOrigin')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"short\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"compress-alt\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingShort')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])])]), _createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('uploadSettings.filePreprocess')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.filePreprocessTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"span\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.convertToWebp')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.convertToWebpTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.convertToWebp,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.compressThreshold')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.compressThresholdTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[19] || (_cache[19] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createElementVNode(\"span\", _hoisted_30, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.expectedSize')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.expectedSizeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_31, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"span\", _hoisted_35, _toDisplayString(_ctx.$t('uploadSettings.serverCompress')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.serverCompressTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[11] || (_cache[11] = $event => $options.visible = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","import ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n methods: {\n handleUploadFolderInput(val) {\n // 自动补全前导 /\n if (val && !val.startsWith('/')) {\n val = '/' + val;\n }\n this.$emit('update:uploadFolder', val);\n }\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram'\n },\n channelName: {\n type: String,\n default: ''\n },\n currentChannelList: {\n type: Array,\n default: () => []\n },\n uploadFolder: {\n type: String,\n default: ''\n },\n autoRetry: {\n type: Boolean,\n default: true\n },\n uploadNameType: {\n type: String,\n default: 'default'\n },\n convertToWebp: {\n type: Boolean,\n default: false\n },\n customerCompress: {\n type: Boolean,\n default: true\n },\n compressBar: {\n type: Number,\n default: 5\n },\n compressQuality: {\n type: Number,\n default: 4\n },\n serverCompress: {\n type: Boolean,\n default: true\n }\n },\n emits: ['update:modelValue', 'update:uploadChannel', 'update:channelName', 'update:uploadFolder', 'update:autoRetry', 'update:uploadNameType', 'update:convertToWebp', 'update:customerCompress', 'update:compressBar', 'update:compressQuality', 'update:serverCompress'],\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=3eb5cfdc\"\nimport script from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UploadSettingsDialog.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 { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-list-item\"\n};\nconst _hoisted_2 = [\"href\"];\nconst _hoisted_3 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_7 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_8 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-item-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_Delete = _resolveComponent(\"Delete\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"a\", {\n href: $props.file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo($props.file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_3, [_createElementVNode(\"source\", {\n src: $props.file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_4), _cache[7] || (_cache[7] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage($props.file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: $props.file.url,\n onError: _cache[0] || (_cache[0] = $event => _ctx.$emit('preview-error', $props.file))\n }, null, 40, _hoisted_5)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename($props.file.name)), 1)]),\n _: 1\n })]), $props.file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_input, {\n modelValue: $props.file.finalURL,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $props.file.finalURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.mdURL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $props.file.mdURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_input, {\n modelValue: $props.file.htmlURL,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $props.file.htmlURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.ubbURL,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $props.file.ubbURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[11] || (_cache[11] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_el_progress, {\n percentage: $props.file.progreess,\n status: $props.file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: _cache[5] || (_cache[5] = $event => _ctx.$emit('copy', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })]), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: _cache[6] || (_cache[6] = $event => _ctx.$emit('remove', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })])])]);\n}","import { Link, Delete } from '@element-plus/icons-vue';\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mkv'];\nexport default {\n name: 'UploadFileItem',\n components: {\n Link,\n Delete\n },\n props: {\n file: {\n type: Object,\n required: true\n }\n },\n emits: ['copy', 'remove', 'preview-error'],\n computed: {\n urlSize() {\n return window.innerWidth < 768 ? 'small' : 'default';\n }\n },\n methods: {\n isImage(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return IMAGE_EXTENSIONS.includes(ext);\n },\n isVideo(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return VIDEO_EXTENSIONS.includes(ext);\n },\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) return filename;\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n const keepEnd = ext.length + 4;\n const keepStart = maxLength - keepEnd - 3;\n if (keepStart <= 0) return filename.substring(0, maxLength - 3) + '...';\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n selectAllText(event) {\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('uploadForm.copyFailed')\n });\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadFileItem.vue?vue&type=template&id=4848c2b0&scoped=true\"\nimport script from \"./UploadFileItem.vue?vue&type=script&lang=js\"\nexport * from \"./UploadFileItem.vue?vue&type=script&lang=js\"\n\nimport \"./UploadFileItem.vue?vue&type=style&index=0&id=4848c2b0&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-4848c2b0\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-form\"\n};\nconst _hoisted_2 = {\n class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_3 = [\"innerHTML\"];\nconst _hoisted_4 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_5 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_6 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_7 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_8 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_9 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_CameraFilled = _resolveComponent(\"CameraFilled\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_upload = _resolveComponent(\"el-upload\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_card = _resolveComponent(\"el-card\");\n const _component_List = _resolveComponent(\"List\");\n const _component_Checked = _resolveComponent(\"Checked\");\n const _component_Failed = _resolveComponent(\"Failed\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_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_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_UploadFileItem = _resolveComponent(\"UploadFileItem\");\n const _component_el_scrollbar = _resolveComponent(\"el-scrollbar\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"upload-card-wrapper\",\n onMousemove: _cache[0] || (_cache[0] = (...args) => $options.handleUploadCardMouseMove && $options.handleUploadCardMouseMove(...args)),\n onMouseleave: _cache[1] || (_cache[1] = (...args) => $options.handleUploadCardMouseLeave && $options.handleUploadCardMouseLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_2, null, 512), $props.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_el_upload, {\n key: 0,\n class: _normalizeClass([\"upload-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }]),\n drag: \"\",\n multiple: \"\",\n \"http-request\": $options.uploadFile,\n onSuccess: $options.handleSuccess,\n \"on-error\": $options.handleError,\n \"before-upload\": $options.beforeUpload,\n \"on-progress\": $options.handleProgress,\n \"file-list\": $data.fileList,\n \"show-file-list\": false\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, {\n class: _normalizeClass([\"el-icon--upload\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_CameraFilled)]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText')\n }, null, 10, _hoisted_3)]),\n _: 1\n }, 8, [\"class\", \"http-request\", \"onSuccess\", \"on-error\", \"before-upload\", \"on-progress\", \"file-list\"])) : _createCommentVNode(\"\", true)], 32), $props.uploadMethod === 'paste' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_createVNode(_component_el_card, {\n class: _normalizeClass([\"paste-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.pastedUrls,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.pastedUrls = $event),\n class: \"upload-card-textarea\",\n placeholder: _ctx.$t('upload.pasteUrlPlaceholder'),\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"placeholder\", \"rows\"]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_button, {\n class: \"paste-card-upload-button\",\n type: \"primary\",\n size: $options.pasteCardMethodButtonSize,\n onClick: $options.handleUploadPasteUrls\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteUploadBtn')), 1)]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createVNode(_component_el_radio_group, {\n modelValue: $data.pasteUploadMethod,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.pasteUploadMethod = $event),\n class: \"paste-card-method-group\",\n size: $options.pasteCardMethodButtonSize\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"save\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteSave')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"external\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteExternal')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"size\"])])]),\n _: 1\n }, 8, [\"class\"])])) : _createCommentVNode(\"\", true), _createVNode(_component_el_card, {\n class: _normalizeClass([\"upload-list-card\", {\n 'upload-list-busy': $data.fileList.length,\n 'is-uploading': $data.uploading\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-container\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, [_createVNode(_component_el_scrollbar, {\n onScroll: $options.handleScroll,\n ref: \"scrollContainer\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-dashboard\", {\n 'list-scrolled': $data.listScrolled\n }])\n }, [_createVNode(_component_el_text, {\n class: \"upload-list-dashboard-title\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_List)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadingCount + $options.waitingCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Checked)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadSuccessCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Failed)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadErrorCount), 1)]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.copyAll'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-copy\",\n onClick: _cache[4] || (_cache[4] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.retryFailed'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadForm.autoRetry')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.autoReUpload = $event),\n onChange: $options.handleAutoRetryChange,\n size: \"small\"\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-retry\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.clearList'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n onClick: $options.clearFileList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearUploaded')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_9, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createBlock(_component_UploadFileItem, {\n key: file.name,\n file: file,\n onCopy: $options.handleCopy,\n onRemove: $options.handleRemove,\n onPreviewError: _cache[7] || (_cache[7] = f => f.url = require('@/assets/404.png'))\n }, null, 8, [\"file\", \"onCopy\", \"onRemove\"]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])], 2)]),\n _: 1\n }, 8, [\"class\"])]);\n}","/**\r\n * URL 构建工具函数\r\n * 用于生成各种格式的文件链接(原始链接、Markdown、HTML、BBCode)\r\n */\r\n\r\n/**\r\n * 根据 srcID 和文件名生成所有格式的 URL\r\n * @param {string} srcID - 文件资源 ID\r\n * @param {string} name - 文件名\r\n * @param {string} rootUrl - 链接前缀\r\n * @returns {{ finalURL: string, mdURL: string, htmlURL: string, ubbURL: string }}\r\n */\r\nexport function buildFileUrls(srcID, name, rootUrl) {\r\n const url = rootUrl + srcID\r\n return {\r\n finalURL: url,\r\n mdURL: `![${name}](${url})`,\r\n htmlURL: `\"${name}\"`,\r\n ubbURL: `[img]${url}[/img]`\r\n }\r\n}\r\n\r\n/**\r\n * 根据 selectedUrlForm 获取对应格式的 URL 值\r\n * @param {object} file - 文件对象,包含 finalURL/mdURL/htmlURL/ubbURL\r\n * @param {string} format - 格式类型:'url' | 'md' | 'html' | 'ubb'\r\n * @returns {string}\r\n */\r\nexport function getUrlByFormat(file, format) {\r\n const map = {\r\n url: file.finalURL,\r\n md: file.mdURL,\r\n html: file.htmlURL,\r\n ubb: file.ubbURL\r\n }\r\n return map[format] || file.finalURL\r\n}\r\n\r\n/**\r\n * 批量更新文件列表中的 URL(当自定义链接前缀变化时)\r\n * @param {Array} fileList - 文件列表\r\n * @param {string} rootUrl - 新的链接前缀\r\n */\r\nexport function updateFileListUrls(fileList, rootUrl) {\r\n fileList.forEach(item => {\r\n if (item.uploadChannel === 'external') {\r\n return\r\n }\r\n const urls = buildFileUrls(item.srcID, item.name, rootUrl)\r\n Object.assign(item, urls)\r\n })\r\n}\r\n","/**\r\n * SHA256 计算工具\r\n * 纯 JavaScript 实现的增量 SHA256 哈希算法,支持任意大小文件\r\n */\r\n\r\n// SHA256 常量\r\nconst K = new Uint32Array([\r\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\r\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\r\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\r\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\r\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\r\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\r\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\r\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\r\n])\r\n\r\nconst rotr = (x, n) => (x >>> n) | (x << (32 - n))\r\n\r\nfunction processBlock(block, H) {\r\n const W = new Uint32Array(64)\r\n\r\n for (let i = 0; i < 16; i++) {\r\n W[i] = (block[i * 4] << 24) | (block[i * 4 + 1] << 16) | (block[i * 4 + 2] << 8) | block[i * 4 + 3]\r\n }\r\n\r\n for (let i = 16; i < 64; i++) {\r\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3)\r\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10)\r\n W[i] = (W[i - 16] + s0 + W[i - 7] + s1) >>> 0\r\n }\r\n\r\n let [a, b, c, d, e, f, g, h] = H\r\n\r\n for (let i = 0; i < 64; i++) {\r\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)\r\n const ch = (e & f) ^ (~e & g)\r\n const temp1 = (h + S1 + ch + K[i] + W[i]) >>> 0\r\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)\r\n const maj = (a & b) ^ (a & c) ^ (b & c)\r\n const temp2 = (S0 + maj) >>> 0\r\n\r\n h = g; g = f; f = e\r\n e = (d + temp1) >>> 0\r\n d = c; c = b; b = a\r\n a = (temp1 + temp2) >>> 0\r\n }\r\n\r\n H[0] = (H[0] + a) >>> 0\r\n H[1] = (H[1] + b) >>> 0\r\n H[2] = (H[2] + c) >>> 0\r\n H[3] = (H[3] + d) >>> 0\r\n H[4] = (H[4] + e) >>> 0\r\n H[5] = (H[5] + f) >>> 0\r\n H[6] = (H[6] + g) >>> 0\r\n H[7] = (H[7] + h) >>> 0\r\n}\r\n\r\n/**\r\n * 创建增量 SHA256 哈希器\r\n * @returns {{ update: (data: Uint8Array) => void, digest: () => string }}\r\n */\r\nexport function createSha256() {\r\n let H = new Uint32Array([\r\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\r\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\r\n ])\r\n\r\n let buffer = new Uint8Array(64)\r\n let bufferLength = 0\r\n let totalLength = 0\r\n\r\n return {\r\n update(data) {\r\n totalLength += data.length\r\n let offset = 0\r\n\r\n if (bufferLength > 0) {\r\n const needed = 64 - bufferLength\r\n const toCopy = Math.min(needed, data.length)\r\n buffer.set(data.subarray(0, toCopy), bufferLength)\r\n bufferLength += toCopy\r\n offset = toCopy\r\n\r\n if (bufferLength === 64) {\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n }\r\n\r\n while (offset + 64 <= data.length) {\r\n processBlock(data.subarray(offset, offset + 64), H)\r\n offset += 64\r\n }\r\n\r\n if (offset < data.length) {\r\n buffer.set(data.subarray(offset), 0)\r\n bufferLength = data.length - offset\r\n }\r\n },\r\n digest() {\r\n const bitLength = totalLength * 8\r\n\r\n // Padding\r\n buffer[bufferLength++] = 0x80\r\n\r\n if (bufferLength > 56) {\r\n buffer.fill(0, bufferLength, 64)\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n\r\n buffer.fill(0, bufferLength, 56)\r\n\r\n // Length in bits (big-endian, 64-bit)\r\n const view = new DataView(buffer.buffer)\r\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false)\r\n view.setUint32(60, bitLength >>> 0, false)\r\n\r\n processBlock(buffer, H)\r\n\r\n // Convert to hex\r\n let hex = ''\r\n for (let i = 0; i < 8; i++) {\r\n hex += H[i].toString(16).padStart(8, '0')\r\n }\r\n return hex\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 计算文件的 SHA256 哈希\r\n * 使用增量哈希算法,支持任意大小文件\r\n * @param {File} file - 要计算哈希的文件\r\n * @returns {Promise} SHA256 哈希值(十六进制字符串)\r\n */\r\nexport async function computeSha256(file) {\r\n const sha256 = createSha256()\r\n\r\n const CHUNK_SIZE = 4 * 1024 * 1024 // 4MB chunks\r\n let offset = 0\r\n\r\n while (offset < file.size) {\r\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size))\r\n const buffer = await chunk.arrayBuffer()\r\n sha256.update(new Uint8Array(buffer))\r\n offset += CHUNK_SIZE\r\n\r\n // 每处理 20MB 打印一次进度\r\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\r\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`)\r\n }\r\n }\r\n\r\n return sha256.digest()\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array-buffer.detached.js\";\nimport \"core-js/modules/es.array-buffer.transfer.js\";\nimport \"core-js/modules/es.array-buffer.transfer-to-fixed-length.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-hex.js\";\nimport \"core-js/modules/esnext.uint8-array.to-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.to-hex.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport \"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 axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nimport { buildFileUrls, updateFileListUrls, getUrlByFormat } from '@/utils/upload/urlBuilder';\nimport { computeSha256 } from '@/utils/upload/sha256';\nimport UploadFileItem from '@/components/upload/UploadFileItem.vue';\nexport default {\n name: 'UploadForm',\n components: {\n UploadFileItem\n },\n props: {\n selectedUrlForm: {\n type: String,\n default: 'url',\n required: false\n },\n customerCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n compressQuality: {\n type: Number,\n default: 4,\n required: false\n },\n compressBar: {\n type: Number,\n default: 5,\n required: false\n },\n serverCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram',\n required: false\n },\n channelName: {\n type: String,\n default: '',\n required: false\n },\n uploadNameType: {\n type: String,\n default: 'default',\n required: false\n },\n useCustomUrl: {\n type: String,\n default: 'false',\n required: false\n },\n customUrlPrefix: {\n type: String,\n default: '',\n required: false\n },\n autoRetry: {\n type: Boolean,\n default: true,\n required: false\n },\n urlPrefix: {\n type: String,\n default: '',\n required: false\n },\n uploadMethod: {\n type: String,\n default: 'default',\n required: false\n },\n uploadFolder: {\n type: String,\n default: '',\n required: false\n },\n convertToWebp: {\n type: Boolean,\n default: false,\n required: false\n }\n },\n data() {\n return {\n fileList: [],\n uploading: false,\n maxUploading: 6,\n exceptionList: [],\n listScrolled: false,\n fileListLength: 0,\n uploadCount: 0,\n pastedUrls: '',\n pasteUploadMethod: 'save',\n // 失败文件自动重试相关\n autoReUpload: true,\n maxRetryCount: 10,\n // 最大重试次数\n retryTimer: null,\n // 自动重试定时器\n retryDelay: 12000,\n // 重试延迟时间(毫秒)\n // 批量上传并发控制\n uploadQueue: [],\n // 等待上传的文件队列\n activeUploads: 0,\n // 当前正在上传的文件数\n maxConcurrentUploads: 6,\n // 最大并发上传数\n // 取消上传控制\n abortControllers: new Map() // 存储每个文件的 AbortController\n };\n },\n watch: {\n fileList: {\n handler() {\n if (this.fileList.length > this.fileListLength) {\n this.$nextTick(() => {\n setTimeout(() => {\n if (this.$refs.scrollContainer) {\n // this.$refs.scrollContainer.setScrollTop(this.$refs.scrollContainer.wrapRef.scrollHeight) // 滚动到底部\n this.$refs.scrollContainer.setScrollTop(0); // 滚动到顶部\n }\n }, 100);\n });\n }\n this.fileListLength = this.fileList.length;\n },\n deep: true\n },\n useCustomUrl: {\n handler() {\n updateFileListUrls(this.fileList, this.rootUrl);\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n updateFileListUrls(this.fileList, this.rootUrl);\n }\n },\n immediate: true\n },\n autoReUpload(val) {\n this.$store.commit('setStoreAutoReUpload', val);\n }\n },\n computed: {\n ...mapGetters(['storeAutoReUpload']),\n uploadSuccessCount() {\n return this.fileList.filter(item => item.status === 'done' || item.status === 'success').length;\n },\n uploadErrorCount() {\n return this.fileList.filter(item => item.status === 'exception').length;\n },\n uploadingCount() {\n return this.fileList.filter(item => item.status === 'uploading').length;\n },\n waitingCount() {\n return this.uploadQueue.length;\n },\n urlSize() {\n // 移动端为small\n return window.innerWidth < 768 ? 'small' : 'default';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n pasteCardMethodButtonSize() {\n if (this.fileList.length) {\n return 'small';\n } else {\n return window.innerWidth < 768 ? 'small' : 'medium';\n }\n }\n },\n mounted() {\n document.addEventListener('paste', this.handlePaste);\n this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\n // 清理状态\n this.uploadQueue = [];\n this.fileList = [];\n this.activeUploads = 0;\n },\n methods: {\n // 文件名中间截断,保留前缀和扩展名\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) {\n return filename;\n }\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n // 保留扩展名和部分前后缀\n const keepEnd = ext.length + 4; // 扩展名 + 4个字符\n const keepStart = maxLength - keepEnd - 3; // 3个字符留给...\n if (keepStart <= 0) {\n return filename.substring(0, maxLength - 3) + '...';\n }\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n uploadFile(file) {\n // 如果fileList中不存在该文件,说明已被删除,直接返回\n if (!this.fileList.find(item => item.uid === file.file.uid)) {\n return;\n }\n\n // 并发控制:如果当前上传数已达上限,加入队列等待\n if (this.activeUploads >= this.maxConcurrentUploads) {\n this.uploadQueue.push(file);\n const waitingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (waitingItem) waitingItem.status = 'waiting';\n return;\n }\n\n // 开始上传,增加计数\n this.activeUploads++;\n const uploadingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (uploadingItem) uploadingItem.status = 'uploading';\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n const uploadChannel = fileItem?.uploadChannel || this.uploadChannel;\n\n // 如果上传渠道为外链,直接使用外链上传\n if (uploadChannel === 'external') {\n this.uploadSingleFile(file);\n return;\n }\n\n // HuggingFace 渠道:根据文件大小选择上传方式\n // 小文件(<20MB):通过 CF Workers 代理上传\n // 大文件(>=20MB):前端直传到 HuggingFace S3,绕过 CF Workers 限制\n if (uploadChannel === 'huggingface') {\n const HF_DIRECT_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size >= HF_DIRECT_THRESHOLD) {\n this.uploadToHuggingFaceDirect(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // Discord 渠道:限制 10MB,超过 9MB 就用分块上传(留安全余量)\n if (uploadChannel === 'discord') {\n const DISCORD_CHUNK_THRESHOLD = 9 * 1024 * 1024; // 9MB\n if (file.file.size > DISCORD_CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // 其他渠道,检查文件大小,决定是否使用分块上传\n const CHUNK_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size > CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n },\n // 处理上传队列中的下一个文件\n processUploadQueue() {\n // 如果队列为空或已达并发上限,不处理\n if (this.uploadQueue.length === 0 || this.activeUploads >= this.maxConcurrentUploads) {\n return;\n }\n\n // 从队列中取出下一个文件并上传\n const nextFile = this.uploadQueue.shift();\n if (nextFile && this.fileList.find(item => item.uid === nextFile.file.uid)) {\n this.uploadFile(nextFile);\n } else {\n // 如果文件已被删除,继续处理下一个\n this.processUploadQueue();\n }\n },\n // 上传完成后的清理工作(成功或失败都调用)\n onUploadComplete() {\n this.activeUploads = Math.max(0, this.activeUploads - 1);\n\n // 处理队列中的下一个文件\n this.processUploadQueue();\n\n // 更新上传状态\n if (this.activeUploads === 0 && this.uploadQueue.length === 0) {\n this.uploading = false;\n }\n },\n // 单文件上传\n async uploadSingleFile(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const needServerCompress = fileItem.serverCompress;\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const formData = new FormData();\n formData.append('file', file.file);\n if (uploadChannel === 'external') {\n formData.append('url', file.file.url);\n }\n\n // HuggingFace 渠道:在前端预计算 SHA256,避免后端 CPU 超时\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace upload...');\n const sha256 = await computeSha256(file.file);\n formData.append('sha256', sha256);\n console.log('SHA256 computed:', sha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n // 继续上传,让后端计算(可能会超时)\n }\n }\n axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder),\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round(progressEvent.loaded / progressEvent.total * 100);\n file.onProgress({\n percent: percentCompleted,\n file: file.file\n });\n }\n }).then(res => {\n file.onSuccess(res, file.file);\n }).catch(err => {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('上传已取消:', file.file.name);\n return;\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误(如 ERR_HTTP2_PROTOCOL_ERROR),也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n }).finally(() => {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n });\n },\n // 分块上传\n async uploadFileInChunks(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n\n // Discord 使用 9MB 分块(留安全余量,Discord 限制 10MB)\n // Telegram 使用 16MB 分块(TG Bot getFile 下载限制 20MB,留 4MB 安全余量)\n // 其他渠道使用 16MB 分块\n const CHUNK_SIZE = uploadChannel === 'discord' ? 9 * 1024 * 1024 // 9MB for Discord\n : 16 * 1024 * 1024; // 16MB for Telegram and others (TG getFile limit: 20MB)\n\n const fileSize = file.file.size;\n const fileType = file.file.type || 'application/octet-stream';\n const totalChunks = Math.ceil(fileSize / CHUNK_SIZE);\n const needServerCompress = fileItem.serverCompress;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // HuggingFace 渠道:在前端预计算 SHA256\n let precomputedSha256 = null;\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace chunked upload...');\n precomputedSha256 = await computeSha256(file.file);\n console.log('SHA256 computed:', precomputedSha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n }\n }\n try {\n // 第一步:初始化分块上传,获取uploadId\n const initFormData = new FormData();\n initFormData.append('originalFileName', file.file.name);\n initFormData.append('originalFileType', fileType);\n initFormData.append('totalChunks', totalChunks.toString());\n const initResponse = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error(this.$t('uploadForm.chunkInitFailed') + ': ' + initResponse.data.message);\n }\n const uploadId = initResponse.data.uploadId;\n console.log('分块上传初始化成功,uploadId:', uploadId);\n\n // 记录 totalChunks 和 uploadId 到文件项,用于后续清理\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem) {\n fileItem.totalChunks = totalChunks;\n fileItem.uploadId = uploadId;\n }\n\n // 第二步:并发上传所有分块\n const maxConcurrency = 3; // 最大并发数\n const chunkProgress = new Array(totalChunks).fill(0);\n let nextChunkIndex = 0;\n let hasError = false;\n let errorMsg = '';\n let isCancelled = false; // 标记是否被取消\n\n const uploadChunk = async chunkIndex => {\n if (hasError || isCancelled) return;\n const start = chunkIndex * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, fileSize);\n const chunk = file.file.slice(start, end);\n const formData = new FormData();\n formData.append('file', chunk, `${file.file.name}.part${chunkIndex.toString().padStart(3, '0')}`);\n formData.append('chunkIndex', chunkIndex.toString());\n formData.append('totalChunks', totalChunks.toString());\n formData.append('uploadId', uploadId);\n formData.append('originalFileName', file.file.name);\n formData.append('originalFileType', fileType);\n let retryCount = 0;\n const maxRetries = 3;\n while (retryCount < maxRetries) {\n if (hasError || isCancelled) return;\n try {\n await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true',\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n if (hasError || isCancelled) return;\n const percent = Math.round(progressEvent.loaded / progressEvent.total * 100);\n chunkProgress[chunkIndex] = percent;\n const totalPercent = Math.round(chunkProgress.reduce((a, b) => a + b, 0) / totalChunks);\n file.onProgress({\n percent: totalPercent,\n file: file.file\n });\n }\n });\n return; // Success\n } catch (err) {\n // 如果是取消操作,直接返回\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n isCancelled = true;\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n retryCount++;\n console.warn(`分块 ${chunkIndex + 1}/${totalChunks} 上传失败 (重试 ${retryCount}/${maxRetries}):`, err);\n if (retryCount >= maxRetries) {\n hasError = true;\n errorMsg = `分块 ${chunkIndex + 1}/${totalChunks} 上传失败: ${err.message}`;\n throw new Error(errorMsg);\n }\n // 等待后重试\n await new Promise(resolve => setTimeout(resolve, 2000 * retryCount));\n }\n }\n };\n\n // 创建并发池\n const pool = [];\n for (let i = 0; i < maxConcurrency; i++) {\n pool.push((async () => {\n while (nextChunkIndex < totalChunks && !hasError && !isCancelled) {\n const currentIndex = nextChunkIndex++;\n try {\n await uploadChunk(currentIndex);\n } catch (e) {\n if (!isCancelled) {\n hasError = true;\n errorMsg = e.message;\n }\n break;\n }\n }\n })());\n }\n await Promise.all(pool);\n\n // 如果被取消,直接返回\n if (isCancelled) {\n console.log('分块上传已取消,跳过合并步骤');\n return;\n }\n if (hasError) {\n throw new Error(errorMsg || this.$t('uploadForm.uploadError'));\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.chunkMerging'),\n duration: 0 // 不自动关闭\n });\n const mergeFormData = new FormData();\n mergeFormData.append('uploadId', uploadId);\n mergeFormData.append('totalChunks', totalChunks.toString());\n mergeFormData.append('originalFileName', file.file.name);\n mergeFormData.append('originalFileType', fileType);\n // HuggingFace 渠道:传递预计算的 SHA256\n if (precomputedSha256) {\n mergeFormData.append('sha256', precomputedSha256);\n }\n const response = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true&merge=true',\n method: 'post',\n data: mergeFormData,\n withAuthCode: true\n });\n\n // 关闭提示\n this.$message.closeAll();\n\n // 同步处理完成\n file.onSuccess(response, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n console.error('分块上传失败:', err);\n\n // 如果有uploadId,清理相关资源\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem && fileItem.uploadId) {\n this.cleanupUploadResources(fileItem.uploadId, fileItem.totalChunks).then(() => {\n console.log(`已清理分块上传失败的资源: ${fileItem.uploadId}`);\n }).catch(cleanupError => {\n console.warn('清理分块上传失败资源时出错:', cleanupError);\n });\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误,也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n handleRemove(file) {\n // 如果文件正在上传,取消上传\n if (this.abortControllers.has(file.uid)) {\n this.abortControllers.get(file.uid).abort();\n this.abortControllers.delete(file.uid);\n }\n // 从上传队列中移除(如果在等待中)\n this.uploadQueue = this.uploadQueue.filter(item => item.file.uid !== file.uid);\n // 从文件列表中移除\n this.fileList = this.fileList.filter(item => item.uid !== file.uid);\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.deleted', {\n name: this.truncateFilename(file.name)\n })\n });\n },\n // 清理上传资源\n async cleanupUploadResources(uploadId, totalChunks = 0) {\n try {\n await axios({\n url: `/upload?cleanup=true&uploadId=${uploadId}&totalChunks=${totalChunks}`,\n method: 'get',\n withAuthCode: true,\n timeout: 5000\n });\n console.log(`清理上传资源成功: ${uploadId}`);\n } catch (error) {\n console.warn('清理上传资源失败:', error);\n }\n },\n handleSuccess(response, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n try {\n // 对上传渠道为外链的,不修改链接\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n if (uploadChannel !== 'external') {\n // 从response.data[0].src中去除/file/前缀\n const srcID = response.data[0].src.replace('/file/', '');\n fileItem.url = `${window.location.protocol}//${window.location.host}/file/` + srcID;\n const urls = buildFileUrls(srcID, file.name, this.rootUrl);\n Object.assign(fileItem, urls);\n fileItem.srcID = srcID;\n }\n fileItem.progreess = 100;\n fileItem.status = 'success';\n\n // Save to history\n this.saveToHistory(fileItem);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.uploadSuccess', {\n name: this.truncateFilename(file.name)\n })\n });\n setTimeout(() => {\n const item = this.fileList.find(item => item.uid === file.uid);\n if (item) item.status = 'done';\n }, 1000);\n } catch (error) {\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n saveToHistory(fileItem) {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n const newRecord = {\n name: fileItem.name,\n url: fileItem.finalURL,\n time: Date.now(),\n type: fileItem.name.split('.').pop().toLowerCase()\n };\n history.push(newRecord);\n localStorage.setItem('uploadHistory', JSON.stringify(history));\n } catch (e) {\n console.error('Failed to save history', e);\n }\n },\n handleError(err, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n\n // 如果开启了自动重试,安排自动重试\n if (this.autoReUpload) {\n this.scheduleAutoRetry();\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n handleCopy(file) {\n const status = this.fileList.find(item => item.uid === file.uid).status;\n if (status !== 'done' && status !== 'success') {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.fileNotUploaded')\n });\n return;\n }\n navigator.clipboard.writeText(getUrlByFormat(file, this.selectedUrlForm));\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n },\n beforeUpload(file) {\n return new Promise(async (resolve, reject) => {\n let processedFile = file;\n\n // WebP 转换:在压缩之前进行\n // 条件:1.开启WebP转换 2.文件类型为图片 3.不是WebP/GIF/SVG格式\n const canConvertToWebp = this.convertToWebp && file.type.includes('image') && !file.type.includes('webp') && !file.type.includes('gif') && !file.type.includes('svg');\n if (canConvertToWebp) {\n try {\n const convertedFile = await this.convertImageToWebp(file);\n if (convertedFile) {\n processedFile = convertedFile;\n console.log(`WebP转换成功: ${file.name} -> ${convertedFile.name}, 大小: ${(file.size / 1024).toFixed(1)}KB -> ${(convertedFile.size / 1024).toFixed(1)}KB`);\n }\n } catch (err) {\n console.warn('WebP转换失败,使用原文件:', err);\n // 转换失败,继续使用原文件\n }\n }\n\n // 客户端压缩条件:1.文件类型为图片 2.开启客户端压缩,且文件大小大于压缩阈值\n const needCustomCompress = processedFile.type.includes('image') && this.customerCompress && processedFile.size / 1024 / 1024 > this.compressBar;\n const isLtLim = processedFile.size / 1024 / 1024 <= 1024 || this.uploadChannel !== 'telegram';\n const pushFileToQueue = (file, serverCompress) => {\n const fileUrl = URL.createObjectURL(file);\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: fileUrl,\n finalURL: '',\n mdURL: '',\n htmlURL: '',\n ubbURL: '',\n srcID: '',\n status: 'uploading',\n progreess: 0,\n serverCompress: serverCompress,\n retryCount: 0\n });\n resolve(file);\n };\n if (needCustomCompress) {\n //尝试压缩图片\n imageConversion.compressAccurately(processedFile, 1024 * this.compressQuality).then(res => {\n //如果压缩后大于1024MB,且上传渠道为telegram,则不上传\n if (res.size / 1024 / 1024 > 1024 && this.uploadChannel === 'telegram') {\n this.$message.error(this.$t('uploadForm.compressedFileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n this.uploading = true;\n //将res包装成新的file\n const newFile = new File([res], processedFile.name, {\n type: res.type\n });\n newFile.uid = file.uid;\n const myUploadCount = this.uploadCount++;\n\n //开启服务端压缩条件:1.开启服务端压缩 2.文件大小小于10MB 3.上传渠道为Telegram\n const needServerCompress = this.serverCompress && newFile.size / 1024 / 1024 < 10 && this.uploadChannel === 'telegram';\n if (myUploadCount === 0) {\n pushFileToQueue(newFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(newFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n }).catch(err => {\n this.$message.error(this.$t('uploadForm.compressFailedCannotUpload', {\n name: processedFile.name\n }));\n reject(err);\n });\n } else if (isLtLim) {\n this.uploading = true;\n const myUploadCount = this.uploadCount++;\n\n // 开启服务端压缩条件:1.上传渠道为Telegram 2.开启服务端压缩 3.如果为图片,则文件大小小于10MB,否则不限制大小\n const needServerCompress = this.uploadChannel === 'telegram' && this.serverCompress && (processedFile.type.includes('image') ? processedFile.size / 1024 / 1024 < 10 : true);\n if (myUploadCount === 0) {\n pushFileToQueue(processedFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(processedFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n } else {\n this.$message.error(this.$t('uploadForm.fileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n });\n },\n handleProgress(event) {\n const fileItem = this.fileList.find(item => item.uid === event.file.uid);\n if (fileItem) {\n fileItem.progreess = event.percent;\n }\n },\n copyAll() {\n const urls = this.fileList.filter(item => item.status === 'done' || item.status === 'success').map(item => getUrlByFormat(item, this.selectedUrlForm)).join('\\n');\n navigator.clipboard.writeText(urls);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copyAllSuccess')\n });\n },\n clearFileList() {\n if (this.fileList.length > 0) {\n // 取消所有正在上传的文件\n this.abortControllers.forEach((controller, uid) => {\n controller.abort();\n });\n this.abortControllers.clear();\n // 清空上传队列\n this.uploadQueue = [];\n // 清空文件列表\n this.fileList = [];\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.fileListCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.fileListEmpty')\n });\n }\n },\n clearSuccessList() {\n if (this.uploadSuccessCount > 0) {\n this.fileList = this.fileList.filter(item => item.status !== 'done' && item.status !== 'success');\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.successFilesCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.successFilesEmpty')\n });\n }\n },\n handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {\n return;\n }\n const items = event.clipboardData.items;\n if (items.length > 0) {\n this.uploadFromUrl(items);\n }\n },\n handleUploadPasteUrls() {\n // 用于上传在上传文本框中粘贴的外链\n const urls = this.pastedUrls.split('\\n');\n // 处理空行和首尾空字符,链接须符合URL规范\n const validUrls = urls.map(url => url.trim()).filter(url => url !== '').filter(url => /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/.test(url));\n\n // 根据粘贴上传方式进行上传\n if (this.pasteUploadMethod === 'save') {\n // 正常上传\n this.uploadFromUrl(validUrls.map(url => {\n return {\n kind: 'string',\n getAsString: callback => {\n callback(url);\n }\n };\n }));\n } else if (this.pasteUploadMethod === 'external') {\n // 仅保存外链,使用 external 渠道上传\n for (let i = 0; i < validUrls.length; i++) {\n const url = validUrls[i];\n const fileName = url.split('/').pop();\n const mdUrl = `![${fileName}](${url})`;\n const htmlUrl = `\"${fileName}\"`;\n const ubbUrl = `[img]${url}[/img]`;\n // 将 url 作为文件内容,文件名为 URL 的最后一部分\n const file = new File([], url.split('/').pop(), {\n type: 'text/plain'\n });\n file.uid = Date.now() + i;\n file.url = url;\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: url,\n finalURL: url,\n mdURL: mdUrl,\n htmlURL: htmlUrl,\n ubbURL: ubbUrl,\n srcID: url,\n status: 'uploading',\n progreess: 0,\n serverCompress: false,\n uploadChannel: 'external',\n retryCount: 0\n });\n // 上传\n this.uploadFile({\n file: file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }\n },\n uploadFromUrl(items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'file') {\n const file = items[i].getAsFile();\n // 允许上传任意类型的文件\n file.uid = Date.now() + i;\n //接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else if (items[i].kind === 'string') {\n items[i].getAsString(text => {\n const urlPattern = /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/;\n let fileName = '';\n if (urlPattern.test(text)) {\n axios.post('/api/fetchRes', {\n url: text\n }, {\n responseType: 'blob',\n withAuthCode: true\n }).then(response => {\n const contentType = response.headers['content-type'];\n if (response.status == 200) {\n // 提取文件名\n const disposition = response.headers['content-disposition'];\n if (disposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const filenameStarRegex = /filename\\*\\s*=\\s*UTF-8''([^;\\n]*)/; // 处理 filename*\n\n let matches = filenameRegex.exec(disposition);\n if (matches != null && matches[1]) {\n fileName = matches[1].replace(/['\"]/g, '');\n // 尝试解码\n try {\n fileName = decodeURIComponent(fileName);\n } catch (e) {\n fileName = '';\n }\n }\n if (fileName === '') {\n matches = filenameStarRegex.exec(disposition); // 尝试匹配 filename*\n if (matches != null && matches[1]) {\n fileName = decodeURIComponent(matches[1]);\n }\n }\n }\n // 尝试从URL中提取文件名\n if (fileName === '') {\n const url = new URL(text);\n fileName = url.pathname.split('/').pop();\n }\n // 未提取到文件名,使用默认文件名\n if (fileName === '') {\n // 获取文件后缀\n const url = new URL(text);\n let extension = url.pathname.split('.').pop();\n // 未能从URL提取有效后缀,使用bin作为默认后缀\n if (!extension || extension === '' || extension.length > 10) {\n extension = 'bin';\n }\n fileName = 'PastedFile' + Date.now() + i + '.' + extension;\n }\n\n // 读取文件内容\n const blob = response.data;\n const file = new File([blob], fileName, {\n type: blob.type\n });\n file.uid = Date.now() + i;\n // 接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else {\n throw new Error('URL地址请求失败');\n }\n }).catch(error => {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.urlRequestFailed')\n });\n });\n }\n });\n }\n }\n },\n handleScroll(event) {\n this.listScrolled = event.scrollTop > 0 && this.fileList.length > 0;\n },\n retryError() {\n if (this.exceptionList.length > 0) {\n this.retryFailedFiles(this.exceptionList);\n this.exceptionList = [];\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.noFailedFiles')\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? this.$t('uploadForm.autoRetryOn') : this.$t('uploadForm.autoRetryOff')\n });\n\n // 如果开启自动重试且有失败文件,立即开始重试\n if (val && this.exceptionList.length > 0) {\n this.scheduleAutoRetry();\n }\n },\n retryFailedFiles(files) {\n files.forEach(file => {\n const retryCount = file.retryCount || 0;\n if (retryCount < this.maxRetryCount) {\n file.retryCount = retryCount + 1;\n this.uploadFile({\n file: file.file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n } else {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.maxRetryReached', {\n name: file.name,\n max: this.maxRetryCount\n })\n });\n }\n });\n },\n scheduleAutoRetry() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n this.retryTimer = setTimeout(() => {\n if (this.autoReUpload && this.exceptionList.length > 0) {\n const filesToRetry = [...this.exceptionList];\n this.exceptionList = [];\n this.retryFailedFiles(filesToRetry);\n }\n }, this.retryDelay);\n },\n // HuggingFace 大文件直传(绕过 CF Workers 限制)\n // 流程:前端计算 SHA256 → 获取 S3 上传 URL → 直传到 S3 → 提交文件引用\n async uploadToHuggingFaceDirect(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n try {\n console.log('=== HuggingFace Direct Upload ===');\n console.log('File:', file.file.name, 'Size:', file.file.size);\n\n // 1. 计算 SHA256\n file.onProgress({\n percent: 5,\n file: file.file\n });\n console.log('Computing SHA256...');\n const sha256 = await computeSha256(file.file);\n console.log('SHA256:', sha256);\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 2. 获取文件样本(前512字节的base64)\n const sampleBytes = new Uint8Array(await file.file.slice(0, 512).arrayBuffer());\n const fileSample = btoa(String.fromCharCode(...sampleBytes));\n\n // 3. 获取 LFS 上传 URL\n file.onProgress({\n percent: 10,\n file: file.file\n });\n console.log('Getting LFS upload URL...');\n const uploadInfoRes = await axios({\n url: '/upload/huggingface/getUploadUrl',\n method: 'post',\n data: {\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n sha256,\n fileSample,\n channelName: this.channelName,\n // 传递指定的渠道名称\n uploadNameType: this.uploadNameType,\n uploadFolder: this.uploadFolder\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!uploadInfoRes.data.success) {\n throw new Error(uploadInfoRes.data.error || 'Failed to get upload URL');\n }\n const uploadInfo = uploadInfoRes.data;\n console.log('Upload info:', uploadInfo);\n\n // 检查文件是否已存在\n if (uploadInfo.alreadyExists) {\n console.log('File already exists in LFS, skipping upload');\n file.onProgress({\n percent: 90,\n file: file.file\n });\n } else if (uploadInfo.needsLfs && uploadInfo.uploadAction) {\n // 4. 直接上传到 S3\n const {\n href,\n header\n } = uploadInfo.uploadAction;\n if (header?.chunk_size) {\n // 分片上传\n await this.uploadToHuggingFaceMultipart(file, uploadInfo, abortController);\n } else {\n // 基本上传\n console.log('Uploading to S3 (basic)...');\n const uploadRes = await fetch(href, {\n method: 'PUT',\n headers: header || {},\n body: file.file,\n signal: abortController.signal\n });\n if (!uploadRes.ok) {\n const error = await uploadRes.text();\n throw new Error(`S3 upload failed: ${uploadRes.status} - ${error}`);\n }\n console.log('S3 upload complete');\n }\n }\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 5. 提交文件引用\n file.onProgress({\n percent: 95,\n file: file.file\n });\n console.log('Committing file...');\n const commitRes = await axios({\n url: '/upload/huggingface/commitUpload',\n method: 'post',\n data: {\n fullId: uploadInfo.fullId,\n filePath: uploadInfo.filePath,\n sha256,\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n channelName: uploadInfo.channelName\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!commitRes.data.success) {\n throw new Error(commitRes.data.error || 'Failed to commit file');\n }\n console.log('Upload complete:', commitRes.data);\n // 转换响应格式以匹配 handleSuccess 期望的格式\n const formattedResponse = {\n data: [{\n src: commitRes.data.src\n }]\n };\n file.onSuccess(formattedResponse, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED' || err.name === 'AbortError') {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n console.error('HuggingFace direct upload error:', err);\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n // HuggingFace 分片上传到 S3\n async uploadToHuggingFaceMultipart(file, uploadInfo, abortController) {\n const {\n uploadAction\n } = uploadInfo;\n const {\n href: completionUrl,\n header\n } = uploadAction;\n const chunkSize = parseInt(header.chunk_size);\n\n // 获取所有分片的上传 URL\n const parts = Object.keys(header).filter(key => /^[0-9]+$/.test(key));\n console.log(`Multipart upload: ${parts.length} parts, chunk size: ${chunkSize}`);\n const completeParts = [];\n const totalParts = parts.length;\n for (const part of parts) {\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n const index = parseInt(part) - 1;\n const start = index * chunkSize;\n const end = Math.min(start + chunkSize, file.file.size);\n const chunk = file.file.slice(start, end);\n console.log(`Uploading part ${part}/${totalParts}`);\n const response = await fetch(header[part], {\n method: 'PUT',\n body: chunk,\n signal: abortController ? abortController.signal : undefined\n });\n if (!response.ok) {\n throw new Error(`Failed to upload part ${part}: ${response.status}`);\n }\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag for part ${part}`);\n }\n completeParts.push({\n partNumber: parseInt(part),\n etag\n });\n\n // 更新进度(10% - 90%)\n const progress = 10 + Math.round(parseInt(part) / totalParts * 80);\n file.onProgress({\n percent: progress,\n file: file.file\n });\n }\n\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n\n // 完成分片上传\n console.log('Completing multipart upload...');\n const completeResponse = await fetch(completionUrl, {\n method: 'POST',\n headers: {\n 'Accept': 'application/vnd.git-lfs+json',\n 'Content-Type': 'application/vnd.git-lfs+json'\n },\n body: JSON.stringify({\n oid: uploadInfo.oid,\n parts: completeParts\n }),\n signal: abortController ? abortController.signal : undefined\n });\n if (!completeResponse.ok) {\n const error = await completeResponse.text();\n throw new Error(`Multipart complete failed: ${completeResponse.status} - ${error}`);\n }\n console.log('Multipart upload complete');\n },\n // 将图片转换为 WebP 格式\n async convertImageToWebp(file) {\n return new Promise((resolve, reject) => {\n // 不支持转换的格式直接返回 null\n if (file.type.includes('gif') || file.type.includes('svg') || file.type.includes('webp')) {\n resolve(null);\n return;\n }\n const img = new Image();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n canvas.toBlob(blob => {\n if (blob) {\n // 修改文件名:将原扩展名替换为 .webp\n const originalName = file.name;\n const lastDotIndex = originalName.lastIndexOf('.');\n const newName = lastDotIndex > 0 ? originalName.substring(0, lastDotIndex) + '.webp' : originalName + '.webp';\n const webpFile = new File([blob], newName, {\n type: 'image/webp'\n });\n webpFile.uid = file.uid;\n resolve(webpFile);\n } else {\n reject(new Error('WebP 转换失败'));\n }\n\n // 清理\n URL.revokeObjectURL(img.src);\n }, 'image/webp', 0.92); // 0.92 质量参数,平衡质量和大小\n };\n img.onerror = () => {\n URL.revokeObjectURL(img.src);\n reject(new Error(this.$t('uploadForm.imageLoadFailed')));\n };\n img.src = URL.createObjectURL(file);\n });\n },\n // 拖拽上传卡片鼠标移动事件 - 悬浮光斑效果\n handleUploadCardMouseMove(e) {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n glow.style.opacity = '1';\n glow.style.left = x + 'px';\n glow.style.top = y + 'px';\n },\n // 拖拽上传卡片鼠标离开事件\n handleUploadCardMouseLeave() {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n glow.style.opacity = '0';\n }\n },\n beforeDestroy() {\n // 清理定时器\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadForm.vue?vue&type=template&id=5f291428&scoped=true\"\nimport script from \"./UploadForm.vue?vue&type=script&lang=js\"\nexport * from \"./UploadForm.vue?vue&type=script&lang=js\"\n\nimport \"./UploadForm.vue?vue&type=style&index=0&id=5f291428&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-5f291428\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-suggestion-input\",\n ref: \"wrapperRef\"\n};\nconst _hoisted_2 = {\n class: \"suggestion-dropdown\"\n};\nconst _hoisted_3 = {\n class: \"suggestion-list\"\n};\nconst _hoisted_4 = [\"title\", \"onMousedown\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_input, {\n ref: \"inputRef\",\n modelValue: $options.inputValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $options.inputValue = $event),\n placeholder: $props.placeholder,\n onFocus: $options.handleFocus,\n onBlur: $options.handleBlur,\n onInput: $options.handleInput\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onInput\"]), _withDirectives(_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"ul\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, (item, index) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: \"suggestion-item\",\n title: item.value,\n onMousedown: _withModifiers($event => $options.selectItem(item), [\"prevent\"])\n }, _toDisplayString(item.value), 41, _hoisted_4);\n }), 128))])], 512), [[_vShow, $data.dropdownVisible && $data.suggestions.length > 0]])], 512);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport axios from '@/utils/axios';\nexport default {\n name: 'DirectorySuggestionInput',\n props: {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'focus', 'blur', 'select'],\n data() {\n return {\n directoryTreeRoot: null,\n directoryTreeLoaded: false,\n directoryTreeLoading: false,\n directoryChildrenMap: {},\n focusTime: null,\n dropdownVisible: false,\n isFocused: false,\n suggestions: []\n };\n },\n computed: {\n inputValue: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n }\n },\n watch: {\n modelValue() {\n // 外部修改 modelValue 时也刷新建议\n if (this.isFocused) {\n this.refreshSuggestions();\n }\n }\n },\n methods: {\n handleFocus() {\n this.isFocused = true;\n this.focusTime = Date.now();\n this.ensureDirectoryTreeLoaded();\n this.$emit('focus');\n setTimeout(() => {\n if (this.isFocused) {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n }\n }, 500);\n },\n handleBlur() {\n this.isFocused = false;\n this.dropdownVisible = false;\n this.$emit('blur');\n },\n handleInput(val) {\n // val 是 el-input @input 事件传来的最新值\n this.$nextTick(() => {\n this.refreshSuggestions();\n if (this.isFocused) {\n this.dropdownVisible = true;\n }\n });\n },\n selectItem(item) {\n const path = item.value;\n this.inputValue = path;\n this.$emit('select', path);\n const normalizedPath = this.normalizeDirectoryPath(path);\n const children = this.directoryChildrenMap[normalizedPath];\n if (children && children.length > 0) {\n this.$nextTick(() => {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n this.$refs.inputRef?.focus();\n });\n } else {\n this.dropdownVisible = false;\n }\n },\n refreshSuggestions() {\n this.suggestions = this.getDirectorySuggestions(this.modelValue || '');\n },\n normalizeDirectoryPath(path) {\n if (!path) return '/';\n let normalized = path;\n if (!normalized.startsWith('/')) normalized = '/' + normalized;\n if (normalized !== '/' && !normalized.endsWith('/')) normalized += '/';\n return normalized;\n },\n buildDirectoryChildrenMap(treeRoot) {\n const map = {};\n const walk = node => {\n const parentPath = this.normalizeDirectoryPath(node.path);\n const children = Array.isArray(node.children) ? node.children : [];\n map[parentPath] = children.map(child => ({\n name: child.name,\n path: this.normalizeDirectoryPath(child.path)\n }));\n children.forEach(walk);\n };\n walk(treeRoot);\n this.directoryChildrenMap = map;\n },\n async ensureDirectoryTreeLoaded() {\n if (this.directoryTreeLoaded || this.directoryTreeLoading) return;\n this.directoryTreeLoading = true;\n try {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n const tree = response?.data?.tree;\n if (tree) {\n this.directoryTreeRoot = tree;\n this.buildDirectoryChildrenMap(tree);\n this.directoryTreeLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load directory tree for autocomplete:', error);\n } finally {\n this.directoryTreeLoading = false;\n }\n },\n parseDirectoryQuery(value) {\n const normalizedInput = value && value.startsWith('/') ? value : `/${value || ''}`;\n const raw = normalizedInput.slice(1);\n const parts = raw.split('/');\n const segmentInput = parts[parts.length - 1] || '';\n const parentSegments = parts.slice(0, -1).filter(Boolean);\n const parentPath = parentSegments.length > 0 ? `/${parentSegments.join('/')}/` : '/';\n return {\n segmentInput,\n parentPath\n };\n },\n getDirectorySuggestions(queryString) {\n const {\n segmentInput,\n parentPath\n } = this.parseDirectoryQuery(queryString);\n const parentChildren = this.directoryChildrenMap[parentPath] || [];\n if (!segmentInput) {\n return parentChildren.slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n const keyword = segmentInput.toLowerCase();\n return parentChildren.filter(item => item.name.toLowerCase().startsWith(keyword)).slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectorySuggestionInput.vue?vue&type=template&id=0ff63416&scoped=true\"\nimport script from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\nexport * from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\n\nimport \"./DirectorySuggestionInput.vue?vue&type=style&index=0&id=0ff63416&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-0ff63416\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n class: \"quick-toolbar-actions\"\n};\nconst _hoisted_4 = {\n class: \"quick-toolbar-actions-inner\"\n};\nconst _hoisted_5 = {\n class: \"header\"\n};\nconst _hoisted_6 = {\n class: \"title\"\n};\nconst _hoisted_7 = {\n class: \"title-crayon-text\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_8 = {\n class: \"main-title\",\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n target: \"_blank\"\n};\nconst _hoisted_9 = {\n class: \"dialog-section\"\n};\nconst _hoisted_10 = {\n class: \"section-header\"\n};\nconst _hoisted_11 = {\n class: \"section-title\"\n};\nconst _hoisted_12 = {\n class: \"section-content\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"setting-item\"\n};\nconst _hoisted_18 = {\n class: \"setting-label\"\n};\nconst _hoisted_19 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_20 = {\n class: \"setting-label\"\n};\nconst _hoisted_21 = {\n class: \"dialog-action\"\n};\nconst _hoisted_22 = [\"innerHTML\"];\nconst _hoisted_23 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ToggleDark = _resolveComponent(\"ToggleDark\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_DirectorySuggestionInput = _resolveComponent(\"DirectorySuggestionInput\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_Logo = _resolveComponent(\"Logo\");\n const _component_UploadForm = _resolveComponent(\"UploadForm\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_UploadSettingsDialog = _resolveComponent(\"UploadSettingsDialog\");\n const _component_Footer = _resolveComponent(\"Footer\");\n const _component_UploadHistory = _resolveComponent(\"UploadHistory\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_ToggleDark, {\n class: \"toggle-dark-button desktop-only\"\n }), _createVNode(_component_el_dropdown, {\n class: \"more-dropdown desktop-only\",\n trigger: \"click\",\n onCommand: $options.handleDesktopMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder-container\", {\n 'no-announcement': !$options.announcementAvailable\n }])\n }, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive\n }])\n }, [$options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectorySuggestionInput, {\n key: 0,\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n class: \"inner-folder-input\",\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur,\n onSelect: $options.handleDirectorySelect\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onSelect\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 1,\n class: \"inner-folder-input\",\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.uploadFolder = $event),\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\"]))], 2), $options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectoryTreePicker, {\n key: 0,\n \"current-directory\": $data.uploadFolder,\n source: \"upload\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-tree-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])) : _createCommentVNode(\"\", true)], 2), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('upload.switchUploadMethod'),\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"upload-method-button desktop-only\",\n onClick: $options.handleChangeUploadMethod\n }, {\n default: _withCtx(() => [$data.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : $data.uploadMethod === 'paste' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"paste\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\", \"disabled\"]), _createVNode(_component_el_dropdown, {\n class: \"mobile-more-dropdown mobile-only\",\n trigger: \"click\",\n onCommand: $options.handleMobileMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"toggleTheme\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $options.getThemeIcon(),\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($options.getThemeText()), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"toggleUploadMethod\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.uploadMethod === 'default' ? 'paste' : 'folder-open',\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? _ctx.$t('upload.pasteUpload') : _ctx.$t('upload.fileUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"mobile-more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quick-toolbar\", {\n 'is-expanded': $data.isQuickToolbarOpen\n }]),\n onMouseleave: _cache[5] || (_cache[5] = (...args) => $options.handleQuickToolbarLeave && $options.handleQuickToolbarLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.logout'),\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleQuickToolbarCommand('logout'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.manage'),\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleQuickToolbarCommand('manage'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.linkFormat'),\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleQuickToolbarCommand('linkFormat'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.settings'),\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: $options.openCompressDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_button, {\n class: _normalizeClass([\"quick-toolbar-button quick-toolbar-more\", {\n 'is-active': $data.isQuickToolbarOpen\n }]),\n \"aria-expanded\": $data.isQuickToolbarOpen,\n onMouseenter: $options.handleQuickToolbarMoreEnter,\n onClick: $options.toggleQuickToolbar\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"quick-toolbar-icon quick-toolbar-toggle-icon\"\n })]),\n _: 1\n }, 8, [\"class\", \"aria-expanded\", \"onMouseenter\", \"onClick\"])], 34), _createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h1\", _hoisted_6, [_createElementVNode(\"span\", _hoisted_7, _toDisplayString($options.ownerName) + \" ImgHub\", 1), _createElementVNode(\"a\", _hoisted_8, _toDisplayString($options.ownerName), 1), _cache[25] || (_cache[25] = _createTextVNode(\" ImgHub \", -1))])]), _createVNode(_component_UploadForm, {\n selectedUrlForm: $data.selectedUrlForm,\n customerCompress: $data.customerCompress,\n compressQuality: $data.compressQuality,\n compressBar: $data.compressBar,\n serverCompress: $data.serverCompress,\n uploadChannel: $data.uploadChannel,\n channelName: $data.channelName,\n uploadNameType: $data.uploadNameType,\n useCustomUrl: $data.useCustomUrl,\n customUrlPrefix: $data.customUrlPrefix,\n autoRetry: $data.autoRetry,\n urlPrefix: $options.urlPrefix,\n uploadMethod: $data.uploadMethod,\n uploadFolder: $data.uploadFolder,\n convertToWebp: $data.convertToWebp,\n class: \"upload\"\n }, null, 8, [\"selectedUrlForm\", \"customerCompress\", \"compressQuality\", \"compressBar\", \"serverCompress\", \"uploadChannel\", \"channelName\", \"uploadNameType\", \"useCustomUrl\", \"customUrlPrefix\", \"autoRetry\", \"urlPrefix\", \"uploadMethod\", \"uploadFolder\", \"convertToWebp\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('settings.linkFormatTitle'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_12, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.selectedUrlForm = $event),\n onChange: $options.changeUrlForm,\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n value: \"url\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"md\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[26] || (_cache[26] = _createElementVNode(\"span\", null, \"MarkDown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"html\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[27] || (_cache[27] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"ubb\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[28] || (_cache[28] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('settings.customLink')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('settings.customLinkTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [_createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_21, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[9] || (_cache[9] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadSettingsDialog, {\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.showCompressDialog = $event),\n uploadChannel: $data.uploadChannel,\n \"onUpdate:uploadChannel\": _cache[12] || (_cache[12] = $event => $data.uploadChannel = $event),\n channelName: $data.channelName,\n \"onUpdate:channelName\": _cache[13] || (_cache[13] = $event => $data.channelName = $event),\n currentChannelList: $options.currentChannelList,\n uploadFolder: $data.uploadFolder,\n \"onUpdate:uploadFolder\": _cache[14] || (_cache[14] = $event => $data.uploadFolder = $event),\n autoRetry: $data.autoRetry,\n \"onUpdate:autoRetry\": _cache[15] || (_cache[15] = $event => $data.autoRetry = $event),\n uploadNameType: $data.uploadNameType,\n \"onUpdate:uploadNameType\": _cache[16] || (_cache[16] = $event => $data.uploadNameType = $event),\n convertToWebp: $data.convertToWebp,\n \"onUpdate:convertToWebp\": _cache[17] || (_cache[17] = $event => $data.convertToWebp = $event),\n customerCompress: $data.customerCompress,\n \"onUpdate:customerCompress\": _cache[18] || (_cache[18] = $event => $data.customerCompress = $event),\n compressBar: $data.compressBar,\n \"onUpdate:compressBar\": _cache[19] || (_cache[19] = $event => $data.compressBar = $event),\n compressQuality: $data.compressQuality,\n \"onUpdate:compressQuality\": _cache[20] || (_cache[20] = $event => $data.compressQuality = $event),\n serverCompress: $data.serverCompress,\n \"onUpdate:serverCompress\": _cache[21] || (_cache[21] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\", \"uploadChannel\", \"channelName\", \"currentChannelList\", \"uploadFolder\", \"autoRetry\", \"uploadNameType\", \"convertToWebp\", \"customerCompress\", \"compressBar\", \"compressQuality\", \"serverCompress\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: _ctx.$t('upload.announcementTitle'),\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[23] || (_cache[23] = $event => $data.showAnnouncementDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n \"close-on-click-modal\": false,\n \"close-on-press-escape\": false,\n center: \"\"\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_23, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[22] || (_cache[22] = $event => $data.showAnnouncementDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.announcementAck')), 1)]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_22)]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[24] || (_cache[24] = $event => $data.showHistory = false)\n }, null, 8, [\"show\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/upload/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport { setLocale } from '@/locales';\nimport UploadHistory from '@/components/upload/UploadHistory.vue';\nimport UploadSettingsDialog from '@/components/upload/UploadSettingsDialog.vue';\nimport DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport DirectorySuggestionInput from '@/components/DirectorySuggestionInput.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { validateFolderPath } from '@/utils/pathValidator';\nexport default {\n name: 'UploadHome',\n mixins: [backgroundManager],\n data() {\n return {\n selectedUrlForm: ref(''),\n showUrlDialog: false,\n showCompressDialog: false,\n customerCompress: true,\n //上传前压缩\n compressQuality: 4,\n //压缩后大小\n compressBar: 5,\n //压缩阈值\n convertToWebp: false,\n //转换为WebP格式\n serverCompress: true,\n //服务器端压缩\n uploadChannel: '',\n //上传渠道\n channelName: '',\n //指定的渠道名称\n availableChannels: {},\n //可用渠道列表\n uploadNameType: '',\n //上传文件命名方式\n customUrlPrefix: '',\n //自定义链接前缀\n useCustomUrl: 'false',\n //是否启用自定义链接格式\n autoRetry: true,\n //失败自动切换\n useDefaultWallPaper: false,\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n isQuickToolbarOpen: false,\n isQuickToolbarPinned: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\n // 公告内容\n showHistory: false,\n themeMode: 'auto' // 主题模式:light, dark, auto\n };\n },\n watch: {\n customerCompress(val) {\n this.updateCompressConfig('customerCompress', val);\n },\n compressQuality(val) {\n this.updateCompressConfig('compressQuality', val);\n },\n compressBar(val) {\n // 确保值在有效范围内\n if (val === null || val === undefined || val < 1) {\n this.compressBar = 1;\n return;\n }\n // 确保期望大小不超过压缩阈值\n if (this.compressQuality > val) {\n this.compressQuality = val;\n }\n this.updateCompressConfig('compressBar', val);\n },\n serverCompress(val) {\n this.updateCompressConfig('serverCompress', val);\n },\n convertToWebp(val) {\n this.updateCompressConfig('convertToWebp', val);\n },\n uploadChannel(val) {\n this.updateStoreUploadChannel(val);\n // 切换渠道类型时,检查持久化的渠道名是否在新渠道列表中\n const newChannelList = this.availableChannels[val] || [];\n const savedChannelName = this.storeChannelName;\n if (savedChannelName && newChannelList.some(ch => ch.name === savedChannelName)) {\n // 持久化的渠道名在新渠道列表中,恢复它\n this.channelName = savedChannelName;\n } else {\n // 否则清空\n this.channelName = '';\n }\n },\n channelName(val) {\n // 确保清空时保存空字符串而不是null\n this.$store.commit('setStoreChannelName', val || '');\n },\n uploadNameType(val) {\n this.updateStoreUploadNameType(val);\n },\n customUrlPrefix(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n autoRetry(val) {\n this.$store.commit('setStoreAutoRetry', val);\n },\n uploadFolder(val) {\n // 实时输入时用非 strict 模式,不检查末尾的单独 . 以允许继续输入如 .123\n if (this.validateUploadFolder(val, false)) {\n // 非 strict 通过后,再用 strict 模式静默检查,只有完全合法才更新 store\n const strictResult = validateFolderPath(val, {\n strict: true\n });\n if (strictResult.valid) {\n this.$store.commit('setStoreUploadFolder', val);\n }\n // strict 不通过时不更新 store,等失焦时提示并回滚\n } else {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'uploadCopyUrlForm', 'compressConfig', 'storeUploadChannel', 'storeChannelName', 'storeUploadNameType', 'customUrlSettings', 'storeAutoRetry', 'storeUploadMethod', 'storeUploadFolder']),\n ownerName() {\n return this.userConfig?.ownerName || 'Sanyue';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n urlPrefix() {\n // 全局自定义链接前缀\n return this.userConfig?.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n announcementAvailable() {\n return !!this.userConfig?.announcement;\n },\n // 是否显示目录候选项(从 userConfig 获取)\n showDirectorySuggestions() {\n return this.userConfig?.showDirectorySuggestions ?? false;\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', false, true);\n\n // 读取用户选择的链接格式\n this.selectedUrlForm = this.uploadCopyUrlForm || 'url';\n // 读取用户选择的压缩设置(优先用户设置,其次系统默认配置)\n this.customerCompress = this.compressConfig.customerCompress ?? this.parseBoolean(this.userConfig?.defaultCustomerCompress, true);\n this.compressQuality = this.compressConfig.compressQuality ?? this.parseNumber(this.userConfig?.defaultCompressQuality, 4);\n this.compressBar = this.compressConfig.compressBar ?? this.parseNumber(this.userConfig?.defaultCompressBar, 5);\n this.serverCompress = this.compressConfig.serverCompress ?? true;\n this.convertToWebp = this.compressConfig.convertToWebp ?? this.parseBoolean(this.userConfig?.defaultConvertToWebp, false);\n // 读取用户选择的上传渠道\n this.uploadChannel = this.storeUploadChannel || this.userConfig?.defaultUploadChannel || 'telegram';\n // 用户定义的失败自动切换\n this.autoRetry = this.storeAutoRetry;\n // 读取用户选择的上传文件命名方式\n this.uploadNameType = this.storeUploadNameType || this.userConfig?.defaultUploadNameType || 'default';\n // 读取用户自定义链接格式\n this.customUrlPrefix = this.customUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.customUrlSettings.useCustomUrl;\n // 读取用户偏好的上传方式\n this.uploadMethod = this.storeUploadMethod;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 读取用户设置的上传文件夹\n this.uploadFolder = this.storeUploadFolder || this.userConfig?.defaultUploadFolder || '';\n\n // 从 Vuex store 读取主题模式状态\n const cusDarkMode = this.$store.getters.cusDarkMode;\n const useDarkMode = this.$store.getters.useDarkMode;\n if (!cusDarkMode) {\n this.themeMode = 'auto';\n } else if (useDarkMode) {\n this.themeMode = 'dark';\n } else {\n this.themeMode = 'light';\n }\n\n // 首次访问公告\n const visited = localStorage.getItem('visitedUploadHome');\n const announcement = this.userConfig?.announcement;\n if (!visited && announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n localStorage.setItem('visitedUploadHome', 'true');\n }\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory,\n UploadSettingsDialog,\n DirectoryTreePicker,\n DirectorySuggestionInput\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels', {\n withAuthCode: true\n });\n if (response.data) {\n this.availableChannels = response.data;\n // 恢复渠道名称:优先持久化的值,其次系统默认配置\n const savedChannelName = this.storeChannelName;\n const defaultChannelName = this.userConfig?.defaultChannelName;\n const currentChannelList = this.availableChannels[this.uploadChannel] || [];\n\n // 如果用户主动清空过(savedChannelName === ''),则保持为空\n // 如果从未选择过(savedChannelName === null/undefined),则使用默认值\n if (savedChannelName && currentChannelList.some(ch => ch.name === savedChannelName)) {\n this.channelName = savedChannelName;\n } else if (savedChannelName === '' || savedChannelName === null || savedChannelName === undefined) {\n // 用户主动清空或从未选择,检查是否使用默认值\n if (savedChannelName !== '' && defaultChannelName && currentChannelList.some(ch => ch.name === defaultChannelName)) {\n this.channelName = defaultChannelName;\n }\n // 如果 savedChannelName === '',说明用户主动清空,保持为空\n }\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n },\n // 验证上传文件夹路径的合法性\n validateUploadFolder(path, strict = true) {\n // 自动补全前导 /\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n this.uploadFolder = path;\n }\n const result = validateFolderPath(path, {\n strict\n });\n if (!result.valid) {\n this.$message.error(result.error);\n return false;\n }\n return true;\n },\n handleFolderInputFocus() {\n this.isFolderInputActive = true;\n },\n handleFolderInputBlur() {\n this.isFolderInputActive = false;\n // 失焦时自动补全前导 /\n if (this.uploadFolder && !this.uploadFolder.startsWith('/')) {\n this.uploadFolder = '/' + this.uploadFolder;\n }\n // 失焦时做完整校验(包括末尾单独的 .)\n if (!this.validateUploadFolder(this.uploadFolder, true)) {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n },\n handleManage() {\n this.$router.push('/dashboard');\n },\n // 解析布尔值\n parseBoolean(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') return value === 'true';\n return defaultValue;\n },\n // 解析数字\n parseNumber(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n },\n openUrlDialog() {\n this.showUrlDialog = true;\n },\n handleLogout() {\n axios.post('/api/auth/logout', {\n authType: 'user'\n }, {\n withCredentials: true\n }).finally(() => {\n this.$store.commit('setUserLoggedIn', false);\n this.$router.push('/login');\n this.$message.success(this.$t('upload.logoutSuccess'));\n });\n },\n changeUrlForm() {\n this.$store.commit('setUploadCopyUrlForm', this.selectedUrlForm);\n },\n openCompressDialog() {\n this.showCompressDialog = true;\n },\n updateCompressConfig(key, value) {\n this.$store.commit('setCompressConfig', {\n key,\n value\n });\n },\n updateStoreUploadChannel(value) {\n this.$store.commit('setStoreUploadChannel', value);\n },\n updateStoreUploadNameType(value) {\n this.$store.commit('setStoreUploadNameType', value);\n },\n handleQuickToolbarMoreEnter() {\n this.isQuickToolbarOpen = true;\n },\n handleQuickToolbarLeave() {\n if (!this.isQuickToolbarPinned) {\n this.isQuickToolbarOpen = false;\n }\n },\n toggleQuickToolbar() {\n this.isQuickToolbarPinned = !this.isQuickToolbarPinned;\n this.isQuickToolbarOpen = this.isQuickToolbarPinned;\n },\n closeQuickToolbar() {\n this.isQuickToolbarPinned = false;\n this.isQuickToolbarOpen = false;\n },\n handleQuickToolbarCommand(command) {\n this.closeQuickToolbar();\n if (command === 'linkFormat') {\n this.openUrlDialog();\n } else if (command === 'manage') {\n this.handleManage();\n } else if (command === 'logout') {\n this.handleLogout();\n }\n },\n handleChangeUploadMethod() {\n this.uploadMethod = this.uploadMethod === 'default' ? 'paste' : 'default';\n this.$store.commit('setUploadMethod', this.uploadMethod);\n },\n handleMobileMenuCommand(command) {\n if (command === 'toggleTheme') {\n // 循环切换:auto -> light -> dark -> auto\n if (this.themeMode === 'auto') {\n // 切换到亮色\n this.themeMode = 'light';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (this.themeMode === 'light') {\n // 切换到暗色\n this.themeMode = 'dark';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 切换到自动\n this.themeMode = 'auto';\n this.$store.commit('setCusDarkMode', false);\n }\n } else if (command === 'toggleUploadMethod') {\n this.handleChangeUploadMethod();\n } else if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n handleDesktopMenuCommand(command) {\n if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n getThemeIcon() {\n // 显示下一个模式的图标\n if (this.themeMode === 'auto') return 'sun'; // auto -> light\n if (this.themeMode === 'light') return 'moon'; // light -> dark\n return 'adjust'; // dark -> auto\n },\n getThemeText() {\n // 显示下一个模式的文字\n if (this.themeMode === 'auto') return this.$t('theme.lightMode');\n if (this.themeMode === 'light') return this.$t('theme.darkMode');\n return this.$t('theme.autoMode');\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n } else {\n this.$message.info(this.$t('upload.noAnnouncement'));\n }\n },\n // 处理目录选择\n handleDirectorySelect(path) {\n // 填入选择的目录路径\n this.uploadFolder = path;\n // 触发路径验证逻辑\n if (this.validateUploadFolder(path, true)) {\n this.$store.commit('setStoreUploadFolder', path);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=4d468a92&scoped=true\"\nimport script from \"./UploadHome.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHome.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHome.vue?vue&type=style&index=0&id=4d468a92&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-4d468a92\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","import { 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__","/**\r\n * 路径验证器模块\r\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\r\n */\r\nimport i18n from '@/locales'\r\n\r\n/**\r\n * 验证文件夹路径的合法性\r\n * @param {string} path - 要验证的路径\r\n * @param {{ strict?: boolean }} options - 选项,strict 为 true 时检查末尾单独的 \".\"(默认 true)\r\n * @returns {{ valid: boolean, error?: string }} 验证结果\r\n */\r\nexport function validateFolderPath(path, { strict = true } = {}) {\r\n // 如果路径为空或仅为空白字符,返回有效(表示根目录)\r\n if (!path || path.trim() === '') {\r\n return { valid: true };\r\n }\r\n \r\n // 如果路径仅为 \"/\",返回有效(表示根目录)\r\n if (path === '/') {\r\n return { valid: true };\r\n }\r\n \r\n // 检查路径是否以 \"/\" 开头\r\n if (!path.startsWith('/')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.pathMustStartWithSlash') \r\n };\r\n }\r\n\r\n // 检查路径穿越:包含 .. 的路径段\r\n if (/(?:^|\\/)\\.\\.(\\/|$)/.test(path) || path.includes('..')) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.pathTraversalNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径中单独的 . 段\r\n // strict 模式检查 /./ 和末尾 /.,非 strict 模式仅检查 /./ 以允许用户继续输入如 /.123\r\n const dotPattern = strict ? /\\/\\.(\\/|$)/ : /\\/\\.\\//;\r\n if (dotPattern.test(path)) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.singleDotNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径是否包含连续的斜杠\r\n if (path.includes('//')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.consecutiveSlashNotAllowed') \r\n };\r\n }\r\n \r\n // 检查路径是否包含非法字符\r\n // 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n","module.exports = require(\"./build/conversion.js\");\n"],"names":["t","e","module","exports","this","n","r","o","i","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","value","__esModule","create","bind","default","prototype","hasOwnProperty","p","s","some","a","f","g","w","b","PNG","JPEG","GIF","Promise","u","next","throw","done","then","apply","toDataURL","toBlob","split","match","atob","length","Uint8Array","charCodeAt","Blob","type","Image","onload","onerror","Error","src","document","createElement","href","window","URL","createObjectURL","download","Date","now","toString","body","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","target","result","readAsDataURL","h","assign","getContext","Number","scale","width","height","orientation","rotate","Math","PI","drawImage","translate","fetch","blob","y","quality","isNaN","size","accuracy","filter","sort","abs","pow","v","_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","key","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","_component_el_tooltip","show","$t","count","totalCount","content","placement","circle","onClick","toggleViewMode","icon","viewMode","_","clearHistory","$event","$emit","historyList","ref","onScroll","args","handleScroll","groupedHistory","group","date","items","item","time","isImage","name","url","loading","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","title","formatTime","hasMore","loadingMore","spin","props","Boolean","data","allHistory","pageSize","currentPage","watch","val","resetAndLoad","computed","groups","forEach","dateStr","getFullYear","String","getMonth","padStart","getDate","push","keys","map","mounted","savedMode","localStorage","getItem","methods","loadAllHistory","loadMore","history","JSON","parse","console","error","setTimeout","start","end","newItems","slice","container","scrollTop","scrollHeight","clientHeight","setItem","$confirm","confirmButtonText","cancelButtonText","removeItem","$message","success","catch","stringify","fileName","imageExtensions","extension","pop","toLowerCase","includes","videoExtensions","timestamp","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","navigator","clipboard","writeText","open","__exports__","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_component_ChannelIcon","_component_el_radio","_component_el_radio_group","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","modelValue","visible","dialogWidth","uploadChannel","label","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","components","ChannelIcon","startsWith","Array","emits","set","innerWidth","style","autoplay","playsinline","loop","_component_el_text","_component_el_progress","_component_Link","_component_el_icon","_component_Delete","file","truncated","truncateFilename","status","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","Link","Delete","required","ext","filename","maxLength","lastDotIndex","lastIndexOf","substring","keepEnd","keepStart","event","message","_component_CameraFilled","_component_el_upload","_component_el_radio_button","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_UploadFileItem","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","innerHTML","pastedUrls","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","disabled","disableTooltip","copyAll","dropdown","autoReUpload","onChange","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","onCopy","handleCopy","onRemove","handleRemove","onPreviewError","buildFileUrls","srcID","rootUrl","getUrlByFormat","format","md","html","ubb","updateFileListUrls","urls","K","Uint32Array","rotr","x","processBlock","block","H","W","s0","s1","S1","temp1","S0","maj","temp2","createSha256","buffer","bufferLength","totalLength","update","offset","needed","toCopy","subarray","digest","bitLength","fill","view","DataView","setUint32","floor","hex","async","computeSha256","sha256","CHUNK_SIZE","chunk","arrayBuffer","log","round","UploadFileItem","selectedUrlForm","useCustomUrl","customUrlPrefix","urlPrefix","maxUploading","exceptionList","fileListLength","uploadCount","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","handler","$nextTick","$refs","scrollContainer","setScrollTop","deep","immediate","$store","commit","location","protocol","host","addEventListener","handlePaste","storeAutoReUpload","beforeUnmount","removeEventListener","find","uid","waitingItem","uploadingItem","fileItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","needServerCompress","abortController","AbortController","formData","FormData","append","err","axios","encodeURIComponent","method","withAuthCode","signal","onUploadProgress","progressEvent","percentCompleted","loaded","total","onProgress","percent","res","code","response","finally","delete","fileSize","fileType","totalChunks","ceil","precomputedSha256","initFormData","initResponse","uploadId","maxConcurrency","chunkProgress","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","chunkIndex","retryCount","maxRetries","totalPercent","reduce","warn","resolve","pool","currentIndex","all","duration","mergeFormData","closeAll","cleanupUploadResources","cleanupError","has","abort","timeout","replace","saveToHistory","newRecord","scheduleAutoRetry","reject","processedFile","canConvertToWebp","convertedFile","convertImageToWebp","toFixed","needCustomCompress","isLtLim","pushFileToQueue","fileUrl","newFile","File","myUploadCount","join","controller","clear","tagName","clipboardData","uploadFromUrl","validUrls","trim","test","kind","getAsString","callback","mdUrl","htmlUrl","ubbUrl","evt","getAsFile","checkResult","text","urlPattern","post","responseType","headers","disposition","filenameRegex","filenameStarRegex","matches","exec","decodeURIComponent","pathname","retryFailedFiles","files","clearTimeout","filesToRetry","aborted","sampleBytes","fileSample","btoa","fromCharCode","uploadInfoRes","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","ok","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","index","undefined","etag","partNumber","progress","completeResponse","oid","img","canvas","ctx","originalName","newName","webpFile","revokeObjectURL","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","clientY","top","opacity","beforeDestroy","inputValue","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","suggestions","onMousedown","selectItem","dropdownVisible","directoryTreeRoot","directoryTreeLoaded","directoryTreeLoading","directoryChildrenMap","focusTime","isFocused","refreshSuggestions","ensureDirectoryTreeLoaded","path","normalizedPath","normalizeDirectoryPath","children","inputRef","focus","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","node","parentPath","isArray","child","tree","parseDirectoryQuery","normalizedInput","raw","segmentInput","parentSegments","queryString","parentChildren","keyword","_component_ToggleDark","_component_DirectorySuggestionInput","_component_DirectoryTreePicker","_component_Logo","_component_UploadForm","_component_UploadSettingsDialog","_component_Footer","_component_UploadHistory","trigger","onCommand","handleDesktopMenuCommand","command","announcementAvailable","$i18n","locale","isFolderInputActive","showDirectorySuggestions","handleFolderInputFocus","handleFolderInputBlur","onSelect","handleDirectorySelect","source","handleChangeUploadMethod","handleMobileMenuCommand","getThemeIcon","getThemeText","isQuickToolbarOpen","handleQuickToolbarLeave","handleQuickToolbarCommand","openCompressDialog","onMouseenter","handleQuickToolbarMoreEnter","toggleQuickToolbar","useConfigLink","ownerName","showUrlDialog","changeUrlForm","showCompressDialog","showAnnouncementDialog","center","footer","announcementContent","showHistory","onClose","mixins","backgroundManager","availableChannels","useDefaultWallPaper","isQuickToolbarPinned","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","updateStoreUploadNameType","validateUploadFolder","strictResult","strict","valid","storeUploadFolder","userConfig","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","cusDarkMode","getters","useDarkMode","visited","UploadForm","Footer","ToggleDark","Logo","UploadHistory","UploadSettingsDialog","DirectoryTreePicker","DirectorySuggestionInput","defaultChannelName","handleManage","$router","defaultValue","num","parseFloat","openUrlDialog","handleLogout","authType","withCredentials","closeQuickToolbar","handleShowAnnouncement","info","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","popoverVisible","transition","reference","$slots","fetchDirectoryTree","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","expanded","openDrawer","drawerVisible","direction","validator","windowWidth","newVal","treeRef","store","nodesMap","treeRefMobile","setCurrentKey","handleResize","fetchWithAuth","json","viewBox","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons","cfr2","s3","discord","validateFolderPath","i18n","global","dotPattern","invalidChars","isRedirecting","options","credentials","router"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/382.da41c2f4.js.map.gz b/frontend-dist/js/382.da41c2f4.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..681563addfe74e4f45ba0fc2d7d1f9a8276390d1 GIT binary patch literal 74045 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

`(YqbCME6=XKcO~o}5N8elt*N_u1Fg{)Fl`25 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 z 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 z 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 bMwi{E&j`5#Mc&<&%7y<2S9D$JTg3zbv=~-& literal 0 HcmV?d00001 diff --git a/frontend-dist/js/396.8882609d.js b/frontend-dist/js/396.226339af.js similarity index 99% rename from frontend-dist/js/396.8882609d.js rename to frontend-dist/js/396.226339af.js index dc8b6a02..0389d2a8 100644 --- a/frontend-dist/js/396.8882609d.js +++ b/frontend-dist/js/396.226339af.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.8882609d.js.map \ No newline at end of file +//# sourceMappingURL=396.226339af.js.map \ No newline at end of file diff --git a/frontend-dist/js/396.8882609d.js.gz b/frontend-dist/js/396.226339af.js.gz similarity index 86% rename from frontend-dist/js/396.8882609d.js.gz rename to frontend-dist/js/396.226339af.js.gz index 96ba77538a0faf838e3425c81e36c12f2952ef9c..b32735364839ffc56a98e557ce38e7bb773d37c2 100644 GIT binary patch delta 41 vcmX>hdP0;-zMF#q1emxsa;@YNwVvy^-TImF@9!eI|K+DXbTLhqVPF6N^+^or delta 41 vcmX>hdP0;-zMF#q1ek<3a;@YNbzdBq{-B5X_jeK9|MD@Zm!2ofFfafB_h$`i diff --git a/frontend-dist/js/396.8882609d.js.map b/frontend-dist/js/396.226339af.js.map similarity index 99% rename from frontend-dist/js/396.8882609d.js.map rename to frontend-dist/js/396.226339af.js.map index d7e79c35..410bbb9e 100644 --- a/frontend-dist/js/396.8882609d.js.map +++ b/frontend-dist/js/396.226339af.js.map @@ -1 +1 @@ -{"version":3,"file":"js/396.8882609d.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.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 diff --git a/frontend-dist/js/396.226339af.js.map.gz b/frontend-dist/js/396.226339af.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..aba4d09ce07ff925a94fe8756f552d7f835726b0 GIT binary patch literal 7044 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/396.8882609d.js.map.gz b/frontend-dist/js/396.8882609d.js.map.gz deleted file mode 100644 index 70cb6ede66a943f9357bd5b63e87e953165fb463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7045 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 diff --git a/frontend-dist/js/51.0c776d33.js.gz b/frontend-dist/js/51.0c776d33.js.gz deleted file mode 100644 index 55228722489d53b9cac5177b763fbd8a3f6770f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3363 zcmV+;4czh{iwFP!000026YV#hG~(G9YY)7D zRxnCrNvaW5#i=Sv?vV%tNP=~O$?iPt20QCykqieRWPI+vnAB8erHpn(EyTau{X0aMb8aWFa^CTt`zJ5R_XIvxy@9_ad4 z?wHRzUFgJ#9NL}Eq1#2XqvO`0*H2iWC}%c73Sl@S4tX4Np`?$U_$@%kgZ&;3MgzeU z7SEk3)%Uy6Lh)M*r?xiVgPq46f6{pK5VsIh_Ly3#it)-b<9?tUeVujt#YN0hbD^MAk8*W306TDM~hhG%)Lf&GjA*2Lz;OxP`#_ z9HeNxxvr>+G(x-y2#E{?jdKA;ThbYWOOT@80yHF1TrfIcUsdF>Ho|1F`hG%#Q9Yt; zBthCP9B7?ojz(vwk51q$bHvoQ8;ClCCbU7HGgZe^BKeqPR)FZ#XU_d*J9E9+n*1}g zAu^ArUx79V=>#B-I%ehWs90I`NFL6GL(syr9&wiNvoRhJ`GAb$2rH5zmP8RcMj~gn zBpq!r3-XoT9cZ7Tl3)Ocv(tzMBk#l+@UQYQK>-y(L_7eHq#qCuL|7R2E+XGh9NmDn z4gH%-`cpL1w(-D_j|oU&7ota=o1$aX0XY-U)vFsahFel6sD!E8r}Ka*8hClaU25un?*>}YQ<9q zfoLmrg0$jXC1E{@BaX8(`pV|Za7>O{*zo!)xtU7ts!D?N1(CyhcwqEe`Fc&|1PS@8 zE40F=P{@RU>NGPUn_a)6Cd7P71PSZC^MxQqgqWn?SxRs(+iIPhdlo3S*iflhdi(nW zs)k9=3HW&b9W3sX31Mouf2uupC&Gf%&&Goj5-yHFEckmQP=!H&wYAj(S|wC>VWC

~S&c4q?ZH@_UxiDhW|pdWFpC>zvCM80``$psF zxCznJ$M(VT+l`j)S7r>4i3c9)K)p+)`Z@z>OdnGwz0TCR-9-T($B81LH**}vZlDwA z?lH7GAd%!Buo%6=LjsWgCQdo)(*fwh6iK3z*oHH^f%;AY?U^ZpIU7s!u?!=ku-C~& z5WL5g1SoG*J-|3+A$g1}#``>q_*AzW+1?2yQ{BI>?4Ht44gHWzXh7=b3$iGqisGm) z0~`_G)%d{>3rUm*-hFVVehkuX3R5)Z2~#Ar;Yu;@pV{8>rz;_tqNXfZKH!dR4?$liz}3!~@gpJA!D1ZJ4Gh zdZ;7GZ63JANb*=8>4(m3U79-`AP5V!0nWOp10Fq+0guU92oTtaSO*l5X)f*G%T{ zEVt44(%Slv=-Y)70PmTy*r&>~0zM&P4f;Xd_=GQb*%4Cq-CEbMxH)1vhZjI5r}3Ns?5 z?LxRhA>HAR=HLDCxAO-`Q#8dY7<#jnRHU;ioRK}>SGAf+C1sf}2fe|_WA%UrBQqOi zMM#c0SHlNGGA0ie+S-+roWNwMuaR@Kb5B+>?~{lGii;h4wJzD@woD^Cw&O(cQ$esI zU&)(Fn8LKA#_KRyQY?~AMeW|MBDI>S=ZhR)u??cq+HVq_z1PUWf{giulu5Jb45|dq zZ>Gpv_8nt}2Sn7R*#z3OZ|{XXNVGki0a3YWPR`Flo4|sG@)vu8RSVj{&;hy@)6geK zIrsg5e7*zT1TbgbzRC@BJSd!C2qWc~%KMLaOv>swQcijO%{k#K zIAN!#@CfhXWZ>nT5OFAzM5q&UtZapd)2Biz69sS+jMu>_D(%GyQa*4ZKA;RB?C-gV z`Fn23Q7y89KU-uakD#sW<0({@Wju_wvx&#j++|$K?VX#lJ;E5!Wp(4uZxSD-VYlYH% z$_5eHpl3@YI*qO-g!6K2Hs@ivx=$4&_PRRx{FGI4Jr)utq%zhmferdZ1;dl|nFTs( zNLW_u8@fX<=VxtCE_|()6*w~jucvy=b{ns=y=Eq|?ky(~5yB8v6ii`#sz1U&7rOH*pnF3`)Wf!s6lYZ0TnZLF*$i**@l2s>Hc*77a zj~&wtX2*stj!n@jBI;wC-O65>>KCwi9xG=A-E`onJ+2Yq0mN0vSzM&jr}_1S>6Ub}V_t>QKqoup6hl|7W*1r& zOFj@J!ir7^fC%W6nxSMKT0zKN1{we^oJJ*&a7HD2)UW@lj-^(i;qS^Q>*`^@vFC3% z0WlxnBA(J=c}sbuU6E3Jy8`f*3%^t?z@jW(JA1X+Mr1b;-Hi3coBL(V@U@tsCKRMT zrw{0u@I=|g`i@B4+RiqQREpeYL*GFj>JOfADI8UiOo~%j;sfe4;{)llr4P!oV(x`9 zkoE&!w>tNCCD=CIGO(;Luvjs$STk^T*7%minSkz=lPu2vyym zfXvnq;abhcl@j1B32>DJRfMjR0D5aySaPaR(Qt=(z^uz(jhpXU$JMo?^d4qy6w*@= zqAQM<<*l)av+ zPoSU-AUux3?ZzkZu^p~9K4`F#R|ac&B{058P_VWdUFp|gcZ*@tNs0#R-NX8D_3XEQ zc=^eHEk>-DpM2}$yFYsIr$1f%FPo t{V!UQCn6y4;5epi@a{j|^$%UA5gZ-e2wN@ZJ?V^b{QoAcMh)vI000zriG=_F diff --git a/frontend-dist/js/51.0c776d33.js.map b/frontend-dist/js/51.0c776d33.js.map deleted file mode 100644 index 5db37fb0..00000000 --- a/frontend-dist/js/51.0c776d33.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/51.0c776d33.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/views/WhiteListOn.vue?649a","webpack://sanyue_imghub/./src/views/WhiteListOn.vue","webpack://sanyue_imghub/./src/views/WhiteListOn.vue?05e5","webpack://sanyue_imghub/./src/mixins/backgroundManager.js"],"sourcesContent":["import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"whitelist-container\"\n};\nconst _hoisted_2 = [\"innerHTML\"];\nconst _hoisted_3 = {\n class: \"whitelist-content\"\n};\nconst _hoisted_4 = {\n class: \"back-button-wrapper\"\n};\nconst _hoisted_5 = {\n class: \"status-animation\"\n};\nconst _hoisted_6 = {\n class: \"status-icon\"\n};\nconst _hoisted_7 = {\n class: \"status-badge\"\n};\nconst _hoisted_8 = {\n class: \"status-info\"\n};\nconst _hoisted_9 = {\n class: \"status-title\"\n};\nconst _hoisted_10 = {\n class: \"status-description\"\n};\nconst _hoisted_11 = {\n class: \"status-actions\"\n};\nconst _hoisted_12 = {\n class: \"help-info\"\n};\nconst _hoisted_13 = {\n class: \"help-text\"\n};\nconst _hoisted_14 = {\n class: \"quick-links\"\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 return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"background-wrapper\",\n innerHTML: _ctx.backgroundImagesTemplate\n }, null, 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_button, {\n class: \"back-button\",\n onClick: $options.goHome,\n circle: \"\",\n size: \"large\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"shield-alt\",\n class: \"shield-icon\"\n }), _createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\",\n class: \"clock-icon\"\n })])])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"h1\", _hoisted_9, _toDisplayString(_ctx.$t('whitelist.title')), 1), _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t('whitelist.description')), 1), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"large\",\n class: \"action-btn primary-btn\",\n onClick: $options.goHome\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"btn-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.goHome')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n size: \"large\",\n class: \"action-btn secondary-btn\",\n onClick: $options.goBack\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"btn-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.goBack')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.$t('whitelist.helpText')), 1), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.goHome && $options.goHome(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload-alt\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.uploadImage')), 1)]), _createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.refreshPage && $options.refreshPage(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.refreshPage')), 1)])])]), _cache[2] || (_cache[2] = _createElementVNode(\"div\", {\n class: \"powered-by\"\n }, [_createElementVNode(\"p\", null, [_createTextVNode(\"Powered By: \"), _createElementVNode(\"a\", {\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n class: \"project-link\"\n }, \" CloudFlare-ImgBed \")])], -1))])]), _cache[3] || (_cache[3] = _createStaticVNode(\"

\", 1))]);\n}","import \"core-js/modules/es.array.push.js\";\nimport { useHead } from '@vueuse/head';\nimport { mapGetters } from 'vuex';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'WhiteListOn',\n mixins: [backgroundManager],\n computed: {\n ...mapGetters(['useDarkMode', 'userConfig'])\n },\n setup() {\n useHead({\n title: 'White List On',\n meta: [{\n name: 'robots',\n content: 'noindex, nofollow'\n }, {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1'\n }, {\n charset: 'UTF-8'\n }]\n });\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('uploadBkImg', '.whitelist-container', false, true);\n },\n beforeUnmount() {\n // 清理背景轮播定时器\n this.clearBackgroundInterval();\n },\n methods: {\n goHome() {\n this.$router.push('/');\n },\n goBack() {\n if (window.history.length > 1) {\n this.$router.go(-1);\n } else {\n this.$router.push('/');\n }\n },\n refreshPage() {\n window.location.reload();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./WhiteListOn.vue?vue&type=template&id=46822ec2&scoped=true\"\nimport script from \"./WhiteListOn.vue?vue&type=script&lang=js\"\nexport * from \"./WhiteListOn.vue?vue&type=script&lang=js\"\n\nimport \"./WhiteListOn.vue?vue&type=style&index=0&id=46822ec2&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-46822ec2\"]])\n\nexport default __exports__","/**\n * 背景图管理 Mixin\n * 用于统一管理页面背景图的加载和轮播逻辑\n */\n\nimport { mapGetters } from 'vuex'\n\nexport default {\n data() {\n return {\n bingWallPaperIndex: 0,\n customWallPaperIndex: 0,\n backgroundInterval: null, // 存储轮播定时器\n // 存储初始化参数,用于主题切换时重新初始化\n backgroundInitParams: null,\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'bingWallPapers', 'useDarkMode']),\n bkInterval() {\n return this.userConfig?.bkInterval || 3000\n },\n bkOpacity() {\n return this.userConfig?.bkOpacity || 1\n },\n // 提供背景图片元素的模板\n backgroundImagesTemplate() {\n return `\n \"Background\n \"Background\n `\n },\n // 提供背景图片的CSS样式\n backgroundImagesStyles() {\n 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 `\n }\n },\n\n watch: {\n // 监听深色模式切换\n useDarkMode(newVal, oldVal) {\n // 只有在值真正改变且已经初始化过背景时才平滑切换主题\n if (newVal !== oldVal && this.backgroundInitParams) {\n this.$nextTick(() => {\n this.smoothThemeTransition(\n this.backgroundInitParams.configKey,\n this.backgroundInitParams.containerSelector,\n this.backgroundInitParams.useDefaultBackground,\n this.backgroundInitParams.autoCreateElements\n )\n })\n }\n }\n },\n\n mounted() {\n // 动态注入背景图片的CSS样式\n this.injectBackgroundStyles()\n },\n\n beforeUnmount() {\n // 组件销毁前清除定时器\n if (this.backgroundInterval) {\n clearInterval(this.backgroundInterval)\n }\n // 立即清除背景图片,不使用过渡效果\n this.clearBackgroundImages(true)\n // 移除动态注入的样式\n this.removeBackgroundStyles()\n },\n\n methods: {\n /**\n * 动态注入背景图片样式\n */\n injectBackgroundStyles() {\n const styleId = 'background-manager-styles'\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style')\n style.id = styleId\n style.textContent = this.backgroundImagesStyles\n document.head.appendChild(style)\n }\n },\n\n /**\n * 移除动态注入的样式\n */\n removeBackgroundStyles() {\n const styleId = 'background-manager-styles'\n const existingStyle = document.getElementById(styleId)\n if (existingStyle) {\n existingStyle.remove()\n }\n },\n\n /**\n * 动态创建背景图片元素\n * @param {HTMLElement} container - 要插入背景图片的容器元素\n */\n createBackgroundElements(container) {\n if (!container) {\n console.warn('未提供有效的容器元素')\n return\n }\n\n // 检查是否已经存在背景图片元素\n if (document.getElementById('bg1') || document.getElementById('bg2')) {\n return\n }\n\n // 创建 bg1 元素\n const bg1 = document.createElement('img')\n bg1.id = 'bg1'\n bg1.className = 'background-image1'\n bg1.alt = 'Background Image'\n \n // 创建 bg2 元素\n const bg2 = document.createElement('img')\n bg2.id = 'bg2'\n bg2.className = 'background-image2'\n bg2.alt = 'Background Image'\n\n // 将元素插入到容器的开头\n container.insertBefore(bg1, container.firstChild)\n container.insertBefore(bg2, container.firstChild)\n },\n /**\n * 初始化背景图\n * @param {string} configKey - 用户配置中的背景图配置键名\n * @param {string} containerSelector - 容器选择器,用于设置透明背景\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\n */\n initializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n // 保存初始化参数,用于主题切换时重新初始化\n this.backgroundInitParams = {\n configKey,\n containerSelector,\n useDefaultBackground,\n autoCreateElements\n }\n\n // 如果需要自动创建元素且元素不存在,则创建\n const container = document.querySelector(containerSelector)\n this.prepareBackgroundContainer(container)\n\n if (autoCreateElements) {\n if (container && (!document.getElementById('bg1') || !document.getElementById('bg2'))) {\n this.createBackgroundElements(container)\n }\n }\n\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (!bg1 || !bg2) {\n console.warn('背景图元素 #bg1 或 #bg2 未找到,请确保页面中包含这些元素或启用 autoCreateElements')\n return\n }\n\n const backgroundConfig = this.userConfig?.[configKey]\n\n if (backgroundConfig === 'bing') {\n this.setupBingWallpaper(bg1, bg2, containerSelector)\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length > 1) {\n this.setupCustomWallpaperCarousel(bg1, bg2, backgroundConfig, containerSelector)\n } else if (Array.isArray(backgroundConfig) && backgroundConfig.length === 1) {\n this.setupSingleCustomWallpaper(bg1, backgroundConfig[0], containerSelector)\n } else if (useDefaultBackground) {\n this.setupDefaultWallpaper(bg1, containerSelector)\n }\n },\n\n /**\n * 设置 Bing 壁纸轮播\n */\n setupBingWallpaper(bg1, bg2, containerSelector) {\n this.$store.dispatch('fetchBingWallPapers').then(() => {\n if (this.bingWallPapers.length === 0) return\n\n this.loadBackgroundImage(bg1, this.bingWallPapers[this.bingWallPaperIndex]?.url, containerSelector)\n \n this.backgroundInterval = setInterval(() => {\n this.switchBingWallpaper(bg1, bg2)\n }, this.bkInterval)\n })\n },\n\n /**\n * 设置自定义壁纸轮播\n */\n setupCustomWallpaperCarousel(bg1, bg2, wallpapers, containerSelector) {\n this.loadBackgroundImage(bg1, wallpapers[this.customWallPaperIndex], containerSelector)\n \n this.backgroundInterval = setInterval(() => {\n this.switchCustomWallpaper(bg1, bg2, wallpapers)\n }, this.bkInterval)\n },\n\n /**\n * 设置单张自定义壁纸\n */\n setupSingleCustomWallpaper(bg1, wallpaperUrl, containerSelector) {\n this.loadBackgroundImage(bg1, wallpaperUrl, containerSelector)\n },\n\n /**\n * 设置默认壁纸\n */\n setupDefaultWallpaper(bg1, containerSelector) {\n // 根据当前深色模式状态选择背景图\n const isDark = this.useDarkMode\n const defaultImage = isDark \n ? require('@/assets/background.jpg') \n : require('@/assets/background-light.jpg')\n \n this.loadBackgroundImage(bg1, defaultImage, containerSelector)\n },\n\n /**\n * 加载背景图片\n */\n loadBackgroundImage(imgElement, imageSrc, containerSelector) {\n // 确保初始化时层级正确\n imgElement.style.zIndex = -1\n imgElement.style.opacity = 0\n const container = document.querySelector(containerSelector)\n this.prepareBackgroundContainer(container)\n\n const showImage = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n imgElement.style.opacity = this.bkOpacity\n })\n })\n }\n\n const preload = new Image()\n preload.onload = () => {\n imgElement.src = imageSrc\n showImage()\n }\n preload.onerror = () => {\n imgElement.src = imageSrc\n showImage()\n }\n preload.src = imageSrc\n },\n \n prepareBackgroundContainer(container) {\n if (!container) return\n\n const computedStyle = window.getComputedStyle(container)\n if (computedStyle.position === 'static') {\n container.style.position = 'relative'\n }\n\n if (computedStyle.zIndex === 'auto') {\n container.style.zIndex = '0'\n }\n\n container.style.isolation = 'isolate'\n },\n\n /**\n * 切换 Bing 壁纸\n */\n switchBingWallpaper(bg1, bg2) {\n if (this.bingWallPapers.length === 0) return\n\n const isBg1Current = bg1.style.opacity != 0\n const curBg = isBg1Current ? bg1 : bg2\n const nextBg = isBg1Current ? bg2 : bg1\n \n this.bingWallPaperIndex = (this.bingWallPaperIndex + 1) % this.bingWallPapers.length\n const nextUrl = this.bingWallPapers[this.bingWallPaperIndex]?.url\n\n // 【层级魔法】:让旧图垫底,新图置顶\n curBg.style.zIndex = -2\n nextBg.style.zIndex = -1\n\n const preload = new Image()\n preload.onload = () => {\n nextBg.src = nextUrl\n \n // 稍微延迟 50ms,确保浏览器把新图渲染到 DOM 上且层级已更新\n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity // 新图直接在顶层优雅淡入\n \n // 等新图 1.2s 完全覆盖后,在底下默默把旧图透明度归零,毫无视觉断层\n setTimeout(() => { \n curBg.style.opacity = 0 \n }, 1200)\n }, 50)\n }\n preload.src = nextUrl\n },\n\n /**\n * 切换自定义壁纸\n */\n switchCustomWallpaper(bg1, bg2, wallpapers) {\n const isBg1Current = bg1.style.opacity != 0\n const curBg = isBg1Current ? bg1 : bg2\n const nextBg = isBg1Current ? bg2 : bg1\n \n this.customWallPaperIndex = (this.customWallPaperIndex + 1) % wallpapers.length\n const nextUrl = wallpapers[this.customWallPaperIndex]\n\n // 旧图垫底,新图置顶\n curBg.style.zIndex = -2\n nextBg.style.zIndex = -1\n\n const preload = new Image()\n preload.onload = () => {\n nextBg.src = nextUrl\n \n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity\n \n setTimeout(() => { \n curBg.style.opacity = 0 \n }, 1200)\n }, 50)\n }\n preload.src = nextUrl\n },\n\n /**\n * 清除背景轮播定时器\n */\n clearBackgroundInterval() {\n if (this.backgroundInterval) {\n clearInterval(this.backgroundInterval)\n this.backgroundInterval = null\n }\n },\n\n /**\n * 清除背景图片显示(带过渡效果)\n * @param {boolean} immediate - 是否立即清除,不使用过渡效果\n */\n clearBackgroundImages(immediate = false) {\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (immediate) {\n // 立即清除,不使用过渡效果\n if (bg1) {\n bg1.style.transition = 'none'\n bg1.style.opacity = 0\n bg1.src = ''\n // 恢复过渡效果\n setTimeout(() => {\n if (bg1) bg1.style.transition = 'opacity 1.2s ease-in-out'\n }, 50)\n }\n if (bg2) {\n bg2.style.transition = 'none'\n bg2.style.opacity = 0\n bg2.src = ''\n // 恢复过渡效果\n setTimeout(() => {\n if (bg2) bg2.style.transition = 'opacity 1.2s ease-in-out'\n }, 50)\n }\n } else {\n // 使用过渡效果淡出\n if (bg1) {\n bg1.style.opacity = 0\n setTimeout(() => {\n if (bg1) bg1.src = ''\n }, 1200)\n }\n if (bg2) {\n bg2.style.opacity = 0\n setTimeout(() => {\n if (bg2) bg2.src = ''\n }, 1200)\n }\n }\n },\n\n /**\n * 平滑主题切换(用于响应主题模式变化)\n * @param {string} configKey - 用户配置中的背景图配置键名\n * @param {string} containerSelector - 容器选择器\n * @param {boolean} useDefaultBackground - 是否使用默认背景图\n * @param {boolean} autoCreateElements - 是否自动创建背景元素\n */\n smoothThemeTransition(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n const backgroundConfig = this.userConfig?.[configKey]\n \n // 如果不是默认背景配置,则直接重新初始化(自定义背景不受主题影响)\n if (!useDefaultBackground || backgroundConfig !== undefined) {\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n return\n }\n\n // 对于默认背景,执行平滑过渡\n const bg1 = document.getElementById('bg1')\n const bg2 = document.getElementById('bg2')\n \n if (!bg1 || !bg2) {\n // 如果背景元素不存在,直接重新初始化\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n return\n }\n\n // 确定当前显示的背景和下一个背景\n const currentBg = bg1.style.opacity != 0 ? bg1 : bg2\n const nextBg = bg1.style.opacity != 0 ? bg2 : bg1\n\n // 获取新主题对应的背景图\n const isDark = this.useDarkMode\n const newThemeImage = isDark \n ? require('@/assets/background.jpg') \n : require('@/assets/background-light.jpg')\n\n // 预加载新背景图\n const preloadImg = new Image()\n preloadImg.onload = () => {\n // 设置下一个背景的图片源\n nextBg.src = newThemeImage\n \n // 等待图片加载完成后执行淡入淡出过渡\n nextBg.onload = () => {\n // 淡出当前背景\n currentBg.style.opacity = 0\n \n // 稍微延迟后淡入新背景,确保过渡效果平滑\n setTimeout(() => {\n nextBg.style.opacity = this.bkOpacity\n }, 50) // 50ms 延迟,让淡出效果先开始\n }\n }\n \n preloadImg.onerror = () => {\n // 如果预加载失败,回退到直接重新初始化\n console.warn('主题背景图预加载失败,回退到直接切换')\n this.reinitializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n }\n \n preloadImg.src = newThemeImage\n },\n\n /**\n * 重新初始化背景图(用于响应配置变化)\n */\n reinitializeBackground(configKey, containerSelector = '.login', useDefaultBackground = false, autoCreateElements = false) {\n this.clearBackgroundInterval()\n this.clearBackgroundImages(true) // 使用立即清除\n this.bingWallPaperIndex = 0\n this.customWallPaperIndex = 0\n \n // 延迟一小段时间确保清理完成\n setTimeout(() => {\n this.initializeBackground(configKey, containerSelector, useDefaultBackground, autoCreateElements)\n }, 100)\n }\n }\n}\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","_hoisted_12","_hoisted_13","_hoisted_14","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","innerHTML","backgroundImagesTemplate","onClick","goHome","circle","size","default","icon","_","$t","type","goBack","href","args","refreshPage","name","mixins","backgroundManager","computed","setup","u","title","meta","content","charset","mounted","this","initializeBackground","beforeUnmount","clearBackgroundInterval","methods","$router","push","window","history","length","go","location","reload","__exports__","data","bingWallPaperIndex","customWallPaperIndex","backgroundInterval","backgroundInitParams","mapGetters","bkInterval","userConfig","bkOpacity","backgroundImagesStyles","watch","useDarkMode","newVal","oldVal","$nextTick","smoothThemeTransition","configKey","containerSelector","useDefaultBackground","autoCreateElements","injectBackgroundStyles","clearInterval","clearBackgroundImages","removeBackgroundStyles","styleId","document","getElementById","style","createElement","id","textContent","head","appendChild","existingStyle","remove","createBackgroundElements","container","console","warn","bg1","className","alt","bg2","insertBefore","firstChild","querySelector","prepareBackgroundContainer","backgroundConfig","setupBingWallpaper","Array","isArray","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","getComputedStyle","position","isolation","isBg1Current","curBg","nextBg","nextUrl","setTimeout","immediate","transition","undefined","reinitializeBackground","currentBg","newThemeImage","preloadImg"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/51.0c776d33.js.map.gz b/frontend-dist/js/51.0c776d33.js.map.gz deleted file mode 100644 index a612e0f30c525e658143c44520856267d0200091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9212 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
-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[(0,i.bF)(w,{icon:"home"})]),_:1},8,["onClick"])]),(0,i.Lk)("div",d,[(0,i.Lk)("div",u,[(0,i.bF)(w,{icon:"shield-alt",class:"shield-icon"}),(0,i.Lk)("div",g,[(0,i.bF)(w,{icon:"clock",class:"clock-icon"})])])]),(0,i.Lk)("div",h,[(0,i.Lk)("h1",m,(0,s.v_)(e.$t("whitelist.title")),1),(0,i.Lk)("p",p,(0,s.v_)(e.$t("whitelist.description")),1),(0,i.Lk)("div",k,[(0,i.bF)(C,{type:"primary",size:"large",class:"action-btn primary-btn",onClick:B.goHome},{default:(0,i.k6)(()=>[(0,i.bF)(w,{icon:"home",class:"btn-icon"}),(0,i.eW)(" "+(0,s.v_)(e.$t("whitelist.goHome")),1)]),_:1},8,["onClick"]),(0,i.bF)(C,{size:"large",class:"action-btn secondary-btn",onClick:B.goBack},{default:(0,i.k6)(()=>[(0,i.bF)(w,{icon:"arrow-left",class:"btn-icon"}),(0,i.eW)(" "+(0,s.v_)(e.$t("whitelist.goBack")),1)]),_:1},8,["onClick"])]),(0,i.Lk)("div",b,[(0,i.Lk)("p",y,(0,s.v_)(e.$t("whitelist.helpText")),1),(0,i.Lk)("div",v,[(0,i.Lk)("a",{href:"javascript:void(0)",onClick:t[0]||(t[0]=(...e)=>B.goHome&&B.goHome(...e)),class:"quick-link"},[(0,i.bF)(w,{icon:"cloud-upload-alt"}),(0,i.eW)(" "+(0,s.v_)(e.$t("whitelist.uploadImage")),1)]),(0,i.Lk)("a",{href:"javascript:void(0)",onClick:t[1]||(t[1]=(...e)=>B.refreshPage&&B.refreshPage(...e)),class:"quick-link"},[(0,i.bF)(w,{icon:"redo"}),(0,i.eW)(" "+(0,s.v_)(e.$t("whitelist.refreshPage")),1)])])]),t[2]||(t[2]=(0,i.Lk)("div",{class:"powered-by"},[(0,i.Lk)("p",null,[(0,i.eW)("Powered By: "),(0,i.Lk)("a",{href:"https://github.com/MarSeventh/CloudFlare-ImgBed",class:"project-link"}," CloudFlare-ImgBed ")])],-1))])]),t[3]||(t[3]=(0,i.Fv)('
',1))])}a(44114);var f=a(74354),B=a(60782),w=a(48903),C={name:"WhiteListOn",mixins:[w.A],computed:{...(0,B.L8)(["useDarkMode","userConfig"])},setup(){(0,f.u)({title:"White List On",meta:[{name:"robots",content:"noindex, nofollow"},{name:"viewport",content:"width=device-width, initial-scale=1"},{charset:"UTF-8"}]})},mounted(){this.initializeBackground("uploadBkImg",".whitelist-container",!1,!0)},beforeUnmount(){this.clearBackgroundInterval()},methods:{goHome(){this.$router.push("/")},goBack(){window.history.length>1?this.$router.go(-1):this.$router.push("/")},refreshPage(){window.location.reload()}}},W=a(71241);const x=(0,W.A)(C,[["render",I],["__scopeId","data-v-46822ec2"]]);var P=x},48903:function(e,t,a){var n=a(60782);t.A={data(){return{bingWallPaperIndex:0,customWallPaperIndex:0,backgroundInterval:null,backgroundInitParams:null}},computed:{...(0,n.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 a=document.createElement("img");a.id="bg2",a.className="background-image2",a.alt="Background Image",e.insertBefore(t,e.firstChild),e.insertBefore(a,e.firstChild)},initializeBackground(e,t=".login",a=!1,n=!1){this.backgroundInitParams={configKey:e,containerSelector:t,useDefaultBackground:a,autoCreateElements:n};const i=document.querySelector(t);this.prepareBackgroundContainer(i),n&&(!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):a&&this.setupDefaultWallpaper(s,t)},setupBingWallpaper(e,t,a){this.$store.dispatch("fetchBingWallPapers").then(()=>{0!==this.bingWallPapers.length&&(this.loadBackgroundImage(e,this.bingWallPapers[this.bingWallPaperIndex]?.url,a),this.backgroundInterval=setInterval(()=>{this.switchBingWallpaper(e,t)},this.bkInterval))})},setupCustomWallpaperCarousel(e,t,a,n){this.loadBackgroundImage(e,a[this.customWallPaperIndex],n),this.backgroundInterval=setInterval(()=>{this.switchCustomWallpaper(e,t,a)},this.bkInterval)},setupSingleCustomWallpaper(e,t,a){this.loadBackgroundImage(e,t,a)},setupDefaultWallpaper(e,t){const n=this.useDarkMode,i=a(n?10732:7835);this.loadBackgroundImage(e,i,t)},loadBackgroundImage(e,t,a){e.style.zIndex=-1,e.style.opacity=0;const n=document.querySelector(a);this.prepareBackgroundContainer(n);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 a=0!=e.style.opacity,n=a?e:t,i=a?t:e;this.bingWallPaperIndex=(this.bingWallPaperIndex+1)%this.bingWallPapers.length;const s=this.bingWallPapers[this.bingWallPaperIndex]?.url;n.style.zIndex=-2,i.style.zIndex=-1;const o=new Image;o.onload=()=>{i.src=s,setTimeout(()=>{i.style.opacity=this.bkOpacity,setTimeout(()=>{n.style.opacity=0},1200)},50)},o.src=s},switchCustomWallpaper(e,t,a){const n=0!=e.style.opacity,i=n?e:t,s=n?t:e;this.customWallPaperIndex=(this.customWallPaperIndex+1)%a.length;const o=a[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"),a=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)),a&&(a.style.transition="none",a.style.opacity=0,a.src="",setTimeout(()=>{a&&(a.style.transition="opacity 1.2s ease-in-out")},50))):(t&&(t.style.opacity=0,setTimeout(()=>{t&&(t.src="")},1200)),a&&(a.style.opacity=0,setTimeout(()=>{a&&(a.src="")},1200)))},smoothThemeTransition(e,t=".login",n=!1,i=!1){const s=this.userConfig?.[e];if(!n||void 0!==s)return void this.reinitializeBackground(e,t,n,i);const o=document.getElementById("bg1"),r=document.getElementById("bg2");if(!o||!r)return void this.reinitializeBackground(e,t,n,i);const l=0!=o.style.opacity?o:r,c=0!=o.style.opacity?r:o,d=this.useDarkMode,u=a(d?10732:7835),g=new Image;g.onload=()=>{c.src=u,c.onload=()=>{l.style.opacity=0,setTimeout(()=>{c.style.opacity=this.bkOpacity},50)}},g.onerror=()=>{console.warn("主题背景图预加载失败,回退到直接切换"),this.reinitializeBackground(e,t,n,i)},g.src=u},reinitializeBackground(e,t=".login",a=!1,n=!1){this.clearBackgroundInterval(),this.clearBackgroundImages(!0),this.bingWallPaperIndex=0,this.customWallPaperIndex=0,setTimeout(()=>{this.initializeBackground(e,t,a,n)},100)}}}}}]); -//# sourceMappingURL=51.0c776d33.js.map \ No newline at end of file +//# sourceMappingURL=51.6e7bf298.js.map \ No newline at end of file diff --git a/frontend-dist/js/51.6e7bf298.js.gz b/frontend-dist/js/51.6e7bf298.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..afc8823ea7abe4eca9a8ca564a6a84d7d31b4615 GIT binary patch literal 3364 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/51.6e7bf298.js.map b/frontend-dist/js/51.6e7bf298.js.map new file mode 100644 index 00000000..0c6c3b30 --- /dev/null +++ b/frontend-dist/js/51.6e7bf298.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/51.6e7bf298.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/views/WhiteListOn.vue?649a","webpack://sanyue_imghub/./src/views/WhiteListOn.vue","webpack://sanyue_imghub/./src/views/WhiteListOn.vue?05e5","webpack://sanyue_imghub/./src/mixins/backgroundManager.js"],"sourcesContent":["import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"whitelist-container\"\n};\nconst _hoisted_2 = [\"innerHTML\"];\nconst _hoisted_3 = {\n class: \"whitelist-content\"\n};\nconst _hoisted_4 = {\n class: \"back-button-wrapper\"\n};\nconst _hoisted_5 = {\n class: \"status-animation\"\n};\nconst _hoisted_6 = {\n class: \"status-icon\"\n};\nconst _hoisted_7 = {\n class: \"status-badge\"\n};\nconst _hoisted_8 = {\n class: \"status-info\"\n};\nconst _hoisted_9 = {\n class: \"status-title\"\n};\nconst _hoisted_10 = {\n class: \"status-description\"\n};\nconst _hoisted_11 = {\n class: \"status-actions\"\n};\nconst _hoisted_12 = {\n class: \"help-info\"\n};\nconst _hoisted_13 = {\n class: \"help-text\"\n};\nconst _hoisted_14 = {\n class: \"quick-links\"\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 return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"background-wrapper\",\n innerHTML: _ctx.backgroundImagesTemplate\n }, null, 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_button, {\n class: \"back-button\",\n onClick: $options.goHome,\n circle: \"\",\n size: \"large\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"shield-alt\",\n class: \"shield-icon\"\n }), _createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"clock\",\n class: \"clock-icon\"\n })])])]), _createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"h1\", _hoisted_9, _toDisplayString(_ctx.$t('whitelist.title')), 1), _createElementVNode(\"p\", _hoisted_10, _toDisplayString(_ctx.$t('whitelist.description')), 1), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_button, {\n type: \"primary\",\n size: \"large\",\n class: \"action-btn primary-btn\",\n onClick: $options.goHome\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"home\",\n class: \"btn-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.goHome')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n size: \"large\",\n class: \"action-btn secondary-btn\",\n onClick: $options.goBack\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"arrow-left\",\n class: \"btn-icon\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.goBack')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.$t('whitelist.helpText')), 1), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.goHome && $options.goHome(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload-alt\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.uploadImage')), 1)]), _createElementVNode(\"a\", {\n href: \"javascript:void(0)\",\n onClick: _cache[1] || (_cache[1] = (...args) => $options.refreshPage && $options.refreshPage(...args)),\n class: \"quick-link\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('whitelist.refreshPage')), 1)])])]), _cache[2] || (_cache[2] = _createElementVNode(\"div\", {\n class: \"powered-by\"\n }, [_createElementVNode(\"p\", null, [_createTextVNode(\"Powered By: \"), _createElementVNode(\"a\", {\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n class: \"project-link\"\n }, \" CloudFlare-ImgBed \")])], -1))])]), _cache[3] || (_cache[3] = _createStaticVNode(\"
\", 1))]);\n}","import \"core-js/modules/es.array.push.js\";\nimport { useHead } from '@vueuse/head';\nimport { mapGetters } from 'vuex';\nimport backgroundManager from '@/mixins/backgroundManager';\nexport default {\n name: 'WhiteListOn',\n mixins: [backgroundManager],\n computed: {\n ...mapGetters(['useDarkMode', 'userConfig'])\n },\n setup() {\n useHead({\n title: 'White List On',\n meta: [{\n name: 'robots',\n content: 'noindex, nofollow'\n }, {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1'\n }, {\n charset: 'UTF-8'\n }]\n });\n },\n mounted() {\n // 初始化背景图\n this.initializeBackground('uploadBkImg', '.whitelist-container', false, true);\n },\n beforeUnmount() {\n // 清理背景轮播定时器\n this.clearBackgroundInterval();\n },\n methods: {\n goHome() {\n this.$router.push('/');\n },\n goBack() {\n if (window.history.length > 1) {\n this.$router.go(-1);\n } else {\n this.$router.push('/');\n }\n },\n refreshPage() {\n window.location.reload();\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./WhiteListOn.vue?vue&type=template&id=46822ec2&scoped=true\"\nimport script from \"./WhiteListOn.vue?vue&type=script&lang=js\"\nexport * from \"./WhiteListOn.vue?vue&type=script&lang=js\"\n\nimport \"./WhiteListOn.vue?vue&type=style&index=0&id=46822ec2&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-46822ec2\"]])\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"],"names":["_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","innerHTML","backgroundImagesTemplate","onClick","goHome","circle","size","default","icon","_","$t","type","goBack","href","args","refreshPage","name","mixins","backgroundManager","computed","setup","u","title","meta","content","charset","mounted","this","initializeBackground","beforeUnmount","clearBackgroundInterval","methods","$router","push","window","history","length","go","location","reload","__exports__","data","bingWallPaperIndex","customWallPaperIndex","backgroundInterval","backgroundInitParams","mapGetters","bkInterval","userConfig","bkOpacity","backgroundImagesStyles","watch","useDarkMode","newVal","oldVal","$nextTick","smoothThemeTransition","configKey","containerSelector","useDefaultBackground","autoCreateElements","injectBackgroundStyles","clearInterval","clearBackgroundImages","removeBackgroundStyles","styleId","document","getElementById","style","createElement","id","textContent","head","appendChild","existingStyle","remove","createBackgroundElements","container","console","warn","bg1","className","alt","bg2","insertBefore","firstChild","querySelector","prepareBackgroundContainer","backgroundConfig","setupBingWallpaper","Array","isArray","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","getComputedStyle","position","isolation","isBg1Current","curBg","nextBg","nextUrl","setTimeout","immediate","transition","undefined","reinitializeBackground","currentBg","newThemeImage","preloadImg"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/51.6e7bf298.js.map.gz b/frontend-dist/js/51.6e7bf298.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..be04bf15398a00d45f3374e251b3e83be50f2d9b GIT binary patch literal 9268 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 Wq#QF0J29L{ockYYO#|2Bg#ZA>hAgB2 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/518.47daf62c.js b/frontend-dist/js/518.47daf62c.js deleted file mode 100644 index cd84c776..00000000 --- a/frontend-dist/js/518.47daf62c.js +++ /dev/null @@ -1,2 +0,0 @@ -(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[518],{213:function(e,t,o){"use strict";o(85331),o(19104)},2893:function(e,t,o){"use strict";o(85331)},3261:function(e,t,o){"use strict";o(85331)},4885:function(e,t,o){"use strict";o(85331)},10456:function(e,t,o){"use strict";o(85331)},11393:function(e,t,o){o(16573),o(78100),o(77936),o(79577),o(41549),o(49797),o(49631),o(35623),o(64979),o(14603),o(47566),o(98721),function(t,o){e.exports=o()}(0,function(){return function(e){var t={};function o(s){if(t[s])return t[s].exports;var a=t[s]={i:s,l:!1,exports:{}};return e[s].call(a.exports,a,a.exports,o),a.l=!0,a.exports}return o.m=e,o.c=t,o.d=function(e,t,s){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(o.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)o.d(s,a,function(t){return e[t]}.bind(null,a));return s},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";var s;function a(e){return["image/png","image/jpeg","image/gif"].some(t=>t===e)}o.r(t),o.d(t,"canvastoDataURL",function(){return i}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return d}),o.d(t,"dataURLtoImage",function(){return c}),o.d(t,"downloadFile",function(){return u}),o.d(t,"filetoDataURL",function(){return p}),o.d(t,"imagetoCanvas",function(){return m}),o.d(t,"urltoBlob",function(){return g}),o.d(t,"urltoImage",function(){return f}),o.d(t,"compress",function(){return b}),o.d(t,"compressAccurately",function(){return v}),o.d(t,"EImageType",function(){return s}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(s||(s={}));var l=function(e,t,o,s){return new(o||(o=Promise))(function(a,l){function i(e){try{r(s.next(e))}catch(e){l(e)}}function n(e){try{r(s.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function i(e,t=.92,o=s.JPEG){return l(this,void 0,void 0,function*(){return a(o)||(o=s.JPEG),e.toDataURL(o,t)})}function n(e,t=.92,o=s.JPEG){return new Promise(s=>e.toBlob(e=>s(e),o,t))}var r=function(e,t,o,s){return new(o||(o=Promise))(function(a,l){function i(e){try{r(s.next(e))}catch(e){l(e)}}function n(e){try{r(s.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function d(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let s=o[0].match(/:(.*?);/)[1];const l=atob(o[1]);let i=l.length;const n=new Uint8Array(i);for(;i--;)n[i]=l.charCodeAt(i);return a(t)&&(s=t),new Blob([n],{type:s})})}function c(e){return new Promise((t,o)=>{const s=new Image;s.onload=()=>t(s),s.onerror=()=>o(new Error("dataURLtoImage(): dataURL is illegal")),s.src=e})}function u(e,t){const o=document.createElement("a");o.href=window.URL.createObjectURL(e),o.download=t||Date.now().toString(36),document.body.appendChild(o);const s=document.createEvent("MouseEvents");s.initEvent("click",!1,!1),o.dispatchEvent(s),document.body.removeChild(o)}function p(e){return new Promise(t=>{const o=new FileReader;o.onloadend=e=>t(e.target.result),o.readAsDataURL(e)})}var h=function(e,t,o,s){return new(o||(o=Promise))(function(a,l){function i(e){try{r(s.next(e))}catch(e){l(e)}}function n(e){try{r(s.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function m(e,t={}){return h(this,void 0,void 0,function*(){const o=Object.assign({},t),s=document.createElement("canvas"),a=s.getContext("2d");let l,i;for(const e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e]=Number(o[e]));if(o.scale){const t=o.scale>0&&o.scale<10?o.scale:1;i=e.width*t,l=e.height*t}else i=o.width||o.height*e.width/e.height||e.width,l=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(s.height=i,s.width=l):(s.height=l,s.width=i),o.orientation){case 3:a.rotate(180*Math.PI/180),a.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 6:a.rotate(90*Math.PI/180),a.drawImage(e,0,-s.width,s.height,s.width);break;case 8:a.rotate(270*Math.PI/180),a.drawImage(e,-s.height,0,s.height,s.width);break;case 2:a.translate(s.width,0),a.scale(-1,1),a.drawImage(e,0,0,s.width,s.height);break;case 4:a.translate(s.width,0),a.scale(-1,1),a.rotate(180*Math.PI/180),a.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 5:a.translate(s.width,0),a.scale(-1,1),a.rotate(90*Math.PI/180),a.drawImage(e,0,-s.width,s.height,s.width);break;case 7:a.translate(s.width,0),a.scale(-1,1),a.rotate(270*Math.PI/180),a.drawImage(e,-s.height,0,s.height,s.width);break;default:a.drawImage(e,0,0,s.width,s.height)}return s})}function g(e){return fetch(e).then(e=>e.blob())}function f(e){return new Promise((t,o)=>{const s=new Image;s.onload=()=>t(s),s.onerror=()=>o(new Error("urltoImage(): Image failed to load, please check the image URL")),s.src=e})}var y=function(e,t,o,s){return new(o||(o=Promise))(function(a,l){function i(e){try{r(s.next(e))}catch(e){l(e)}}function n(e){try{r(s.throw(e))}catch(e){l(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function b(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compress(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({quality:t})),t.quality=Number(t.quality),Number.isNaN(t.quality))return e;const o=yield p(e);let l=o.split(",")[0].match(/:(.*?);/)[1],n=s.JPEG;a(t.type)&&(n=t.type,l=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield i(u,t.quality,n),g=yield d(h,l);return g.size>e.size?e:g})}function v(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({size:t})),t.size=Number(t.size),Number.isNaN(t.size))return e;if(1024*t.size>e.size)return e;t.accuracy=Number(t.accuracy),(!t.accuracy||t.accuracy<.8||t.accuracy>.99)&&(t.accuracy=.95);const o=t.size*(2-t.accuracy)*1024,l=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=s.JPEG;a(t.type)&&(h=t.type,u=t.type);const g=yield c(r),f=yield m(g,Object.assign({},t));let y,b=.5;const v=[null,null];for(let e=1;e<=7;e++){y=yield i(f,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...v].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-l)-Math.abs(.75*t.length-l))[0]);break}if(ot))break;v[0]=y,b+=Math.pow(.5,e+1)}}const C=yield d(y,u);return C.size>e.size?e:C})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},18785:function(e,t,o){"use strict";o(85331)},19104:function(e,t,o){"use strict";o(85331)},23597:function(e,t,o){"use strict";o(85331)},30694:function(e,t,o){"use strict";o(85331)},33694:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return So}});var s=o(78507),a=(o(85331),o(213),o(80047)),l=(o(99648),o(56768)),i=o(24232);const n={class:"history-header"},r={class:"header-left"},d={class:"record-count"},c={class:"header-right"},u={class:"timeline-header"},p={class:"date-label"},h={key:0,class:"grid-view"},m={class:"grid-preview"},g=["src"],f=["src"],y={key:2,class:"file-icon-wrapper"},b={class:"grid-overlay"},v={class:"grid-actions"},C={class:"grid-info"},k=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],$=["src"],S={key:2,class:"file-icon-wrapper-small"},T={class:"list-info"},_=["title"],x=["title"],M={class:"list-meta"},A={class:"upload-time"},E={class:"list-actions"},R={key:0,class:"load-more-container"},D={key:0,class:"loading-indicator"},I={key:1,class:"load-more-hint"},N={key:1,class:"no-more-hint"},z={key:1,class:"empty-state"};function P(e,t,o,P,V,W){const B=(0,l.g2)("font-awesome-icon"),H=a.S2,X=s.R7;return(0,l.uX)(),(0,l.CE)("div",{class:(0,i.C4)(["history-container",{active:o.show}])},[(0,l.Lk)("div",n,[(0,l.Lk)("div",r,[(0,l.Lk)("h2",null,(0,i.v_)(e.$t("uploadHistory.title")),1),(0,l.Lk)("span",d,(0,i.v_)(e.$t("uploadHistory.totalRecords",{count:V.totalCount})),1)]),(0,l.Lk)("div",c,[(0,l.bF)(X,{content:e.$t("uploadHistory.switchView"),placement:"bottom"},{default:(0,l.k6)(()=>[(0,l.bF)(H,{circle:"",onClick:W.toggleViewMode},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"grid"===V.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,l.bF)(X,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom"},{default:(0,l.k6)(()=>[(0,l.bF)(H,{circle:"",type:"danger",onClick:W.clearHistory},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,l.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"times"})]),_:1})])]),V.historyList.length>0?((0,l.uX)(),(0,l.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>W.handleScroll&&W.handleScroll(...e))},[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(W.groupedHistory,e=>((0,l.uX)(),(0,l.CE)("div",{key:e.date,class:"history-group"},[(0,l.Lk)("div",u,[t[4]||(t[4]=(0,l.Lk)("div",{class:"timeline-dot"},null,-1)),(0,l.Lk)("span",p,(0,i.v_)(e.date),1)]),"grid"===V.viewMode?((0,l.uX)(),(0,l.CE)("div",h,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(e.items,e=>((0,l.uX)(),(0,l.CE)("div",{key:e.time,class:"grid-item"},[(0,l.Lk)("div",m,[W.isImage(e.name)?((0,l.uX)(),(0,l.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,g)):W.isVideo(e.name)?((0,l.uX)(),(0,l.CE)("video",{key:1,src:e.url,muted:""},null,8,f)):((0,l.uX)(),(0,l.CE)("div",y,[(0,l.bF)(B,{icon:"file",class:"file-icon"})])),(0,l.Lk)("div",b,[(0,l.Lk)("div",v,[(0,l.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,l.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,l.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,l.Lk)("div",C,[(0,l.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,k),(0,l.Lk)("div",w,(0,i.v_)(W.formatTime(e.time)),1)])]))),128))])):((0,l.uX)(),(0,l.CE)("div",F,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(e.items,e=>((0,l.uX)(),(0,l.CE)("div",{key:e.time,class:"list-item"},[(0,l.Lk)("div",L,[W.isImage(e.name)?((0,l.uX)(),(0,l.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>W.handleImageError&&W.handleImageError(...e))},null,40,U)):W.isVideo(e.name)?((0,l.uX)(),(0,l.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,l.uX)(),(0,l.CE)("div",S,[(0,l.bF)(B,{icon:"file"})]))]),(0,l.Lk)("div",T,[(0,l.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,_),(0,l.Lk)("div",{class:"file-url",title:e.url},(0,i.v_)(e.url),9,x)]),(0,l.Lk)("div",M,[(0,l.Lk)("div",A,(0,i.v_)(W.formatTime(e.time)),1)]),(0,l.Lk)("div",E,[(0,l.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>W.copyLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,l.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>W.openLink(e.url)},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,l.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>W.deleteItem(e)},{default:(0,l.k6)(()=>[(0,l.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),W.hasMore?((0,l.uX)(),(0,l.CE)("div",R,[V.loadingMore?((0,l.uX)(),(0,l.CE)("div",D,[(0,l.bF)(B,{icon:"spinner",spin:""}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadHistory.loading")),1)])):((0,l.uX)(),(0,l.CE)("div",I,(0,i.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):V.historyList.length>0?((0,l.uX)(),(0,l.CE)("div",N,(0,i.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,l.Q3)("",!0)],544)):((0,l.uX)(),(0,l.CE)("div",z,[(0,l.bF)(B,{icon:"history",class:"empty-icon"}),(0,l.Lk)("p",null,(0,i.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701),o(33110),o(58335);var V={name:"UploadHistory",props:{show:{type:Boolean,default:!1}},data(){return{historyList:[],allHistory:[],viewMode:"grid",pageSize:30,currentPage:0,loadingMore:!1,totalCount:0}},watch:{show(e){e&&this.resetAndLoad()}},computed:{hasMore(){return this.historyList.length{const o=new Date(t.time),s=`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")}`;e[s]||(e[s]=[]),e[s].push(t)}),Object.keys(e).sort((e,t)=>new Date(t)-new Date(e)).map(t=>({date:t,items:e[t]}))}},mounted(){const e=localStorage.getItem("historyViewMode");e&&(this.viewMode=e)},methods:{resetAndLoad(){this.historyList=[],this.currentPage=0,this.loadAllHistory(),this.loadMore()},loadAllHistory(){try{const e=JSON.parse(localStorage.getItem("uploadHistory")||"[]");this.allHistory=e.sort((e,t)=>t.time-e.time),this.totalCount=this.allHistory.length}catch(e){console.error("Failed to load history",e),this.allHistory=[],this.totalCount=0}},loadMore(){!this.loadingMore&&this.hasMore&&(this.loadingMore=!0,setTimeout(()=>{const e=this.currentPage*this.pageSize,t=e+this.pageSize,o=this.allHistory.slice(e,t);this.historyList=[...this.historyList,...o],this.currentPage++,this.loadingMore=!1},50))},handleScroll(e){const t=e.target,o=t.scrollTop,s=t.scrollHeight,a=t.clientHeight;s-o-a<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm(this.$t("uploadHistory.clearConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success(this.$t("uploadHistory.recordsCleared"))}).catch(()=>{})},deleteItem(e){this.$confirm(this.$t("uploadHistory.deleteConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=this.historyList.filter(t=>t.time!==e.time),this.allHistory=this.allHistory.filter(t=>t.time!==e.time),this.totalCount=this.allHistory.length;try{localStorage.setItem("uploadHistory",JSON.stringify(this.allHistory)),this.$message.success(this.$t("uploadHistory.recordDeleted"))}catch(t){console.error("Failed to update history",t)}}).catch(()=>{})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},formatTime(e){const t=new Date(e),o=t.getFullYear(),s=String(t.getMonth()+1).padStart(2,"0"),a=String(t.getDate()).padStart(2,"0"),l=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${s}-${a} ${l}:${i}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success(this.$t("uploadHistory.linkCopied"))}).catch(()=>{this.$message.error(this.$t("uploadHistory.copyFailed"))})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(96682)}}},W=o(71241);const B=(0,W.A)(V,[["render",P],["__scopeId","data-v-550797ce"]]);var H=B,X=o(86975),O=o(9267),Q=(o(15616),o(81418)),j=(o(50333),o(74757)),q=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(34396),o(4885),o(53676));const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},se={class:"setting-item"},ae={class:"setting-label"},le={key:0,class:"setting-item"},ie={class:"setting-label"},ne={class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"dialog-section"},pe={class:"section-header"},he={class:"section-title"},me={class:"section-content"},ge={class:"dialog-section"},fe={class:"section-header"},ye={class:"section-title"},be={class:"section-content"},ve={class:"setting-item"},Ce={class:"setting-label"},ke={class:"setting-item"},we={class:"setting-label"},Fe={key:0,class:"setting-item slider-item"},Le={class:"setting-label"},Ue={class:"slider-wrapper"},$e={class:"slider-input-wrapper"},Se={key:1,class:"setting-item slider-item"},Te={class:"setting-label"},_e={class:"slider-wrapper"},xe={class:"slider-input-wrapper"},Me={key:0,class:"dialog-section"},Ae={class:"section-header"},Ee={class:"section-title"},Re={class:"section-content"},De={class:"setting-item"},Ie={class:"setting-label"},Ne={class:"dialog-action"};function ze(e,t,o,n,r,d){const c=Y.A,u=J.ll,p=J.MQ,h=(0,l.g2)("font-awesome-icon"),m=s.R7,g=K.P9,f=K.AV,y=G.WK,b=q.qi,v=j.B8,C=Q.lq,k=a.S2,w=O.kZ;return(0,l.uX)(),(0,l.Wv)(w,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[12]||(t[12]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",Z,[(0,l.Lk)("div",ee,[(0,l.Lk)("span",te,(0,i.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,l.Lk)("div",oe,[(0,l.Lk)("div",se,[(0,l.Lk)("span",ae,(0,i.v_)(e.$t("uploadSettings.channelType")),1),(0,l.bF)(p,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{label:"telegram",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"telegram",class:"channel-icon channel-brand-telegram"}),t[13]||(t[13]=(0,l.Lk)("span",null,"TG",-1))]),_:1}),(0,l.bF)(u,{label:"cfr2",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"cfr2",class:"channel-icon channel-brand-cfr2"}),t[14]||(t[14]=(0,l.Lk)("span",null,"R2",-1))]),_:1}),(0,l.bF)(u,{label:"s3",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"s3",class:"channel-icon channel-brand-s3"}),t[15]||(t[15]=(0,l.Lk)("span",null,"S3",-1))]),_:1}),(0,l.bF)(u,{label:"discord",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"discord",class:"channel-icon channel-brand-discord"}),t[16]||(t[16]=(0,l.Lk)("span",null,"DC",-1))]),_:1}),(0,l.bF)(u,{label:"huggingface",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"huggingface",class:"channel-icon channel-brand-huggingface"}),t[17]||(t[17]=(0,l.Lk)("span",null,"HF",-1))]),_:1}),(0,l.bF)(u,{label:"webdav",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(c,{type:"webdav",class:"channel-icon channel-brand-webdav"}),t[18]||(t[18]=(0,l.Lk)("span",null,"WD",-1))]),_:1})]),_:1},8,["model-value"])]),o.currentChannelList.length>1?((0,l.uX)(),(0,l.CE)("div",le,[(0,l.Lk)("span",ie,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.bF)(f,{"model-value":o.channelName,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,l.k6)(()=>[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(o.currentChannelList,e=>((0,l.uX)(),(0,l.Wv)(g,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,l.Q3)("",!0),(0,l.Lk)("div",ne,[(0,l.Lk)("span",re,(0,i.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,l.bF)(y,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,l.Lk)("div",de,[(0,l.Lk)("span",ce,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.bF)(b,{"model-value":o.autoRetry,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,l.Lk)("div",ue,[(0,l.Lk)("div",pe,[(0,l.Lk)("span",he,(0,i.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,l.Lk)("div",me,[(0,l.bF)(p,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{label:"default",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"cog",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,l.bF)(u,{label:"index",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"hashtag",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,l.bF)(u,{label:"origin",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"file-signature",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,l.bF)(u,{label:"short",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"compress-alt",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,l.Lk)("div",ge,[(0,l.Lk)("div",fe,[(0,l.Lk)("span",ye,(0,i.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,l.bF)(m,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",be,[(0,l.Lk)("div",ve,[(0,l.Lk)("span",Ce,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.bF)(b,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,l.Lk)("div",ke,[(0,l.Lk)("span",we,(0,i.v_)(e.$t("uploadSettings.fileCompress")),1),(0,l.bF)(b,{"model-value":o.customerCompress,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,l.uX)(),(0,l.CE)("div",Fe,[(0,l.Lk)("span",Le,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",Ue,[(0,l.bF)(v,{"model-value":o.compressBar,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,l.Lk)("div",$e,[(0,l.bF)(C,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("update:compressBar",t)),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["model-value"]),t[19]||(t[19]=(0,l.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,l.Q3)("",!0),o.customerCompress?((0,l.uX)(),(0,l.CE)("div",Se,[(0,l.Lk)("span",Te,[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,l.bF)(m,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",_e,[(0,l.bF)(v,{"model-value":o.compressQuality,"onUpdate:modelValue":t[8]||(t[8]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["model-value","max","format-tooltip"]),(0,l.Lk)("div",xe,[(0,l.bF)(C,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["model-value","max"]),t[20]||(t[20]=(0,l.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,l.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,l.uX)(),(0,l.CE)("div",Me,[(0,l.Lk)("div",Ae,[(0,l.Lk)("span",Ee,(0,i.v_)(e.$t("uploadSettings.serverCompress")),1),(0,l.bF)(m,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,l.k6)(()=>[(0,l.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",Re,[(0,l.Lk)("div",De,[(0,l.Lk)("span",Ie,(0,i.v_)(e.$t("uploadSettings.enableCompress")),1),(0,l.bF)(b,{"model-value":o.serverCompress,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,l.Q3)("",!0),(0,l.Lk)("div",Ne,[(0,l.bF)(k,{type:"primary",onClick:t[11]||(t[11]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}var Pe={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},methods:{handleUploadFolderInput(e){e&&!e.startsWith("/")&&(e="/"+e),this.$emit("update:uploadFolder",e)}},props:{modelValue:{type:Boolean,default:!1},uploadChannel:{type:String,default:"telegram"},channelName:{type:String,default:""},currentChannelList:{type:Array,default:()=>[]},uploadFolder:{type:String,default:""},autoRetry:{type:Boolean,default:!0},uploadNameType:{type:String,default:"default"},convertToWebp:{type:Boolean,default:!1},customerCompress:{type:Boolean,default:!0},compressBar:{type:Number,default:5},compressQuality:{type:Number,default:4},serverCompress:{type:Boolean,default:!0}},emits:["update:modelValue","update:uploadChannel","update:channelName","update:uploadFolder","update:autoRetry","update:uploadNameType","update:convertToWebp","update:customerCompress","update:compressBar","update:compressQuality","update:serverCompress"],computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const Ve=(0,W.A)(Pe,[["render",ze]]);var We=Ve,Be=o(88559),He=(o(85970),o(813)),Xe=(o(34896),o(69655)),Oe=(o(2893),o(74253));o(79899);const Qe={class:"upload-list-item"},je=["href"],qe={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ge=["src"],Ke=["src"],Je={key:2,style:{width:"10vw","border-radius":"12px"}},Ye={class:"upload-list-item-content"},Ze={class:"upload-list-item-name-wrapper"},et={key:0,class:"upload-list-item-url"},tt={class:"upload-list-item-url-row"},ot={class:"upload-list-item-url-row"},st={key:1,class:"upload-list-item-progress"},at={class:"upload-list-item-action"};function lt(e,t,o,s,a,n){const r=(0,l.g2)("font-awesome-icon"),d=Oe.$g,c=G.WK,u=Xe.ve,p=(0,l.g2)("Link"),h=He.tk,m=(0,l.g2)("Delete");return(0,l.uX)(),(0,l.CE)("div",Qe,[(0,l.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,l.uX)(),(0,l.CE)("video",qe,[(0,l.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ge),t[7]||(t[7]=(0,l.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,l.uX)(),(0,l.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:o.file.url,onError:t[0]||(t[0]=t=>e.$emit("preview-error",o.file))},null,40,Ke)):((0,l.uX)(),(0,l.CE)("div",Je,[(0,l.bF)(r,{icon:"file",class:"file-icon"})]))],8,je),(0,l.Lk)("div",Ye,[(0,l.Lk)("div",Ze,[(0,l.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,l.uX)(),(0,l.CE)("div",et,[(0,l.Lk)("div",tt,[(0,l.bF)(c,{modelValue:o.file.finalURL,"onUpdate:modelValue":t[1]||(t[1]=e=>o.file.finalURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[8]||(t[8]=[(0,l.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,l.bF)(c,{modelValue:o.file.mdURL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.file.mdURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[9]||(t[9]=[(0,l.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,l.Lk)("div",ot,[(0,l.bF)(c,{modelValue:o.file.htmlURL,"onUpdate:modelValue":t[3]||(t[3]=e=>o.file.htmlURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[10]||(t[10]=[(0,l.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,l.bF)(c,{modelValue:o.file.ubbURL,"onUpdate:modelValue":t[4]||(t[4]=e=>o.file.ubbURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,l.k6)(()=>[...t[11]||(t[11]=[(0,l.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,l.uX)(),(0,l.CE)("div",st,[(0,l.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,l.Lk)("div",at,[(0,l.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,l.bF)(h,null,{default:(0,l.k6)(()=>[(0,l.bF)(p)]),_:1})]),(0,l.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,l.bF)(h,null,{default:(0,l.k6)(()=>[(0,l.bF)(m)]),_:1})])])])}var it=o(57477);const nt=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],rt=["mp4","webm","ogg","mkv"];var dt={name:"UploadFileItem",components:{Link:it.Link,Delete:it.Delete},props:{file:{type:Object,required:!0}},emits:["copy","remove","preview-error"],computed:{urlSize(){return window.innerWidth<768?"small":"default"}},methods:{isImage(e){const t=e.split(".").pop().toLowerCase();return nt.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return rt.includes(t)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let s,a;o>0?(s=e.substring(0,o),a=e.substring(o)):(s=e,a="");const l=a.length+4,i=t-l-3;return i<=0?e.substring(0,t-3)+"...":s.substring(0,i)+"..."+s.slice(-4)+a},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("uploadForm.copyFailed")})})}}};const ct=(0,W.A)(dt,[["render",lt],["__scopeId","data-v-4848c2b0"]]);var ut=ct,pt=o(62086),ht=(o(40670),o(88830),o(23597),o(70683)),mt=(o(95385),o(3261),o(47358));const gt={class:"upload-form"},ft={class:"upload-card-glow",ref:"uploadCardGlow"},yt=["innerHTML"],bt={key:0,class:"upload-card"},vt={class:"paste-card-actions"},Ct={class:"upload-list-dashboard-action"},kt={class:"modern-action-group"},wt={class:"modern-dropdown-item-content"},Ft={class:"modern-action-btn modern-action-btn-danger"};function Lt(e,t,n,r,d,c){const u=(0,l.g2)("CameraFilled"),p=He.tk,h=mt.j5,m=G.WK,g=a.S2,f=J.Zh,y=J.MQ,b=ht.Ik,v=(0,l.g2)("List"),C=(0,l.g2)("Checked"),k=(0,l.g2)("Failed"),w=Oe.$g,F=(0,l.g2)("font-awesome-icon"),L=s.R7,U=q.qi,$=pt.c6,S=pt.Iy,T=pt.dW,_=ut,x=Be.kA;return(0,l.uX)(),(0,l.CE)("div",gt,[(0,l.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[0]||(t[0]=(...e)=>c.handleUploadCardMouseMove&&c.handleUploadCardMouseMove(...e)),onMouseleave:t[1]||(t[1]=(...e)=>c.handleUploadCardMouseLeave&&c.handleUploadCardMouseLeave(...e))},[(0,l.Lk)("div",ft,null,512),"default"===n.uploadMethod?((0,l.uX)(),(0,l.Wv)(h,{key:0,class:(0,i.C4)(["upload-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}]),drag:"",multiple:"","http-request":c.uploadFile,onSuccess:c.handleSuccess,"on-error":c.handleError,"before-upload":c.beforeUpload,"on-progress":c.handleProgress,"file-list":d.fileList,"show-file-list":!1},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:(0,i.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,l.k6)(()=>[(0,l.bF)(u)]),_:1},8,["class"]),(0,l.Lk)("div",{class:(0,i.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText")},null,10,yt)]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,l.Q3)("",!0)],32),"paste"===n.uploadMethod?((0,l.uX)(),(0,l.CE)("div",bt,[(0,l.bF)(b,{class:(0,i.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,l.k6)(()=>[(0,l.bF)(m,{modelValue:d.pastedUrls,"onUpdate:modelValue":t[2]||(t[2]=e=>d.pastedUrls=e),class:"upload-card-textarea",placeholder:e.$t("upload.pasteUrlPlaceholder"),type:"textarea",rows:d.fileList.length?4:14},null,8,["modelValue","placeholder","rows"]),(0,l.Lk)("div",vt,[(0,l.bF)(g,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,l.bF)(y,{modelValue:d.pasteUploadMethod,"onUpdate:modelValue":t[3]||(t[3]=e=>d.pasteUploadMethod=e),class:"paste-card-method-group",size:c.pasteCardMethodButtonSize},{default:(0,l.k6)(()=>[(0,l.bF)(f,{label:"save"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.pasteSave")),1)]),_:1}),(0,l.bF)(f,{label:"external"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.pasteExternal")),1)]),_:1})]),_:1},8,["modelValue","size"])])]),_:1},8,["class"])])):(0,l.Q3)("",!0),(0,l.bF)(b,{class:(0,i.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length,"is-uploading":d.uploading}])},{default:(0,l.k6)(()=>[(0,l.Lk)("div",{class:(0,i.C4)(["upload-list-container",{"upload-list-busy":d.fileList.length}])},[(0,l.bF)(x,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",{class:(0,i.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,l.bF)(w,{class:"upload-list-dashboard-title"},{default:(0,l.k6)(()=>[(0,l.bF)(p,null,{default:(0,l.k6)(()=>[(0,l.bF)(v)]),_:1}),(0,l.eW)((0,i.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,l.bF)(p,null,{default:(0,l.k6)(()=>[(0,l.bF)(C)]),_:1}),(0,l.eW)((0,i.v_)(c.uploadSuccessCount)+" ",1),(0,l.bF)(p,null,{default:(0,l.k6)(()=>[(0,l.bF)(k)]),_:1}),(0,l.eW)((0,i.v_)(c.uploadErrorCount),1)]),_:1}),(0,l.Lk)("div",Ct,[(0,l.Lk)("div",kt,[(0,l.bF)(L,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.Lk)("button",{class:"modern-action-btn",onClick:t[4]||(t[4]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,l.bF)(F,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,l.bF)(L,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(T,null,{dropdown:(0,l.k6)(()=>[(0,l.bF)(S,{class:"modern-dropdown-menu"},{default:(0,l.k6)(()=>[(0,l.bF)($,null,{default:(0,l.k6)(()=>[(0,l.Lk)("div",wt,[(0,l.Lk)("span",null,(0,i.v_)(e.$t("uploadForm.autoRetry")),1),(0,l.bF)(U,{modelValue:d.autoReUpload,"onUpdate:modelValue":t[6]||(t[6]=e=>d.autoReUpload=e),onChange:c.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,l.k6)(()=>[(0,l.Lk)("button",{class:"modern-action-btn",onClick:t[5]||(t[5]=(...e)=>c.retryError&&c.retryError(...e))},[(0,l.bF)(F,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,l.bF)(L,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(T,null,{dropdown:(0,l.k6)(()=>[(0,l.bF)(S,{class:"modern-dropdown-menu"},{default:(0,l.k6)(()=>[(0,l.bF)($,{onClick:c.clearFileList},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,l.bF)($,{onClick:c.clearSuccessList},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,l.k6)(()=>[(0,l.Lk)("button",Ft,[(0,l.bF)(F,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(d.fileList.slice().reverse(),e=>((0,l.uX)(),(0,l.Wv)(_,{key:e.name,file:e,onCopy:c.handleCopy,onRemove:c.handleRemove,onPreviewError:t[7]||(t[7]=e=>e.url=o(96682))},null,8,["file","onCopy","onRemove"]))),128))]),_:1},8,["onScroll"])],2)]),_:1},8,["class"])])}o(16573),o(78100),o(77936),o(20116),o(18237),o(79577),o(41549),o(49797),o(49631),o(35623),o(64979),o(14603),o(47566),o(98721);var Ut=o(457),$t=o(76334),St=o(60782);function Tt(e,t,o){const s=o+e;return{finalURL:s,mdURL:`![${t}](${s})`,htmlURL:`${t}`,ubbURL:`[img]${s}[/img]`}}function _t(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function xt(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=Tt(e.srcID,e.name,t);Object.assign(e,o)})}const Mt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),At=(e,t)=>e>>>t|e<<32-t;function Et(e,t){const o=new Uint32Array(64);for(let u=0;u<16;u++)o[u]=e[4*u]<<24|e[4*u+1]<<16|e[4*u+2]<<8|e[4*u+3];for(let u=16;u<64;u++){const e=At(o[u-15],7)^At(o[u-15],18)^o[u-15]>>>3,t=At(o[u-2],17)^At(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[s,a,l,i,n,r,d,c]=t;for(let u=0;u<64;u++){const e=At(n,6)^At(n,11)^At(n,25),t=n&r^~n&d,p=c+e+t+Mt[u]+o[u]>>>0,h=At(s,2)^At(s,13)^At(s,22),m=s&a^s&l^a&l,g=h+m>>>0;c=d,d=r,r=n,n=i+p>>>0,i=l,l=a,a=s,s=p+g>>>0}t[0]=t[0]+s>>>0,t[1]=t[1]+a>>>0,t[2]=t[2]+l>>>0,t[3]=t[3]+i>>>0,t[4]=t[4]+n>>>0,t[5]=t[5]+r>>>0,t[6]=t[6]+d>>>0,t[7]=t[7]+c>>>0}function Rt(){let e=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),t=new Uint8Array(64),o=0,s=0;return{update(a){s+=a.length;let l=0;if(o>0){const s=64-o,i=Math.min(s,a.length);t.set(a.subarray(0,i),o),o+=i,l=i,64===o&&(Et(t,e),o=0)}while(l+64<=a.length)Et(a.subarray(l,l+64),e),l+=64;l56&&(t.fill(0,o,64),Et(t,e),o=0),t.fill(0,o,56);const l=new DataView(t.buffer);l.setUint32(56,Math.floor(a/4294967296),!1),l.setUint32(60,a>>>0,!1),Et(t,e);let i="";for(let t=0;t<8;t++)i+=e[t].toString(16).padStart(8,"0");return i}}}async function Dt(e){const t=Rt(),o=4194304;let s=0;while(sthis.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){xt(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&xt(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,St.L8)(["storeAutoReUpload"]),uploadSuccessCount(){return this.fileList.filter(e=>"done"===e.status||"success"===e.status).length},uploadErrorCount(){return this.fileList.filter(e=>"exception"===e.status).length},uploadingCount(){return this.fileList.filter(e=>"uploading"===e.status).length},waitingCount(){return this.uploadQueue.length},urlSize(){return window.innerWidth<768?"small":"default"},disableTooltip(){return window.innerWidth<768},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},pasteCardMethodButtonSize(){return this.fileList.length||window.innerWidth<768?"small":"medium"}},mounted(){document.addEventListener("paste",this.handlePaste),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),this.uploadQueue=[],this.fileList=[],this.activeUploads=0},methods:{truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let s,a;o>0?(s=e.substring(0,o),a=e.substring(o)):(s=e,a="");const l=a.length+4,i=t-l-3;return i<=0?e.substring(0,t-3)+"...":s.substring(0,i)+"..."+s.slice(-4)+a},uploadFile(e){if(!this.fileList.find(t=>t.uid===e.file.uid))return;if(this.activeUploads>=this.maxConcurrentUploads){this.uploadQueue.push(e);const t=this.fileList.find(t=>t.uid===e.file.uid);return void(t&&(t.status="waiting"))}this.activeUploads++;const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.status="uploading");const o=this.fileList.find(t=>t.uid===e.file.uid),s=o?.uploadChannel||this.uploadChannel;if("external"===s)return void this.uploadSingleFile(e);if("huggingface"===s){const t=20971520;return void(e.file.size>=t?this.uploadToHuggingFaceDirect(e):this.uploadSingleFile(e))}if("discord"===s){const t=9437184;return void(e.file.size>t?this.uploadFileInChunks(e):this.uploadSingleFile(e))}const a=20971520;e.file.size>a?this.uploadFileInChunks(e):this.uploadSingleFile(e)},processUploadQueue(){if(0===this.uploadQueue.length||this.activeUploads>=this.maxConcurrentUploads)return;const e=this.uploadQueue.shift();e&&this.fileList.find(t=>t.uid===e.file.uid)?this.uploadFile(e):this.processUploadQueue()},onUploadComplete(){this.activeUploads=Math.max(0,this.activeUploads-1),this.processUploadQueue(),0===this.activeUploads&&0===this.uploadQueue.length&&(this.uploading=!1)},async uploadSingleFile(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.serverCompress,s=t.uploadChannel||this.uploadChannel,a=this.autoRetry&&"external"!==s,l="external"===s?"default":this.uploadNameType,i=new AbortController;this.abortControllers.set(e.file.uid,i);const n=new FormData;if(n.append("file",e.file),"external"===s&&n.append("url",e.file.url),"huggingface"===s)try{console.log("Computing SHA256 for HuggingFace upload...");const t=await Dt(e.file);n.append("sha256",t),console.log("SHA256 computed:",t)}catch(r){console.error("Failed to compute SHA256:",r)}(0,Ut.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+s+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+l+"&autoRetry="+a+"&uploadFolder="+encodeURIComponent(this.uploadFolder),method:"post",data:n,withAuthCode:!0,signal:i.signal,onUploadProgress:t=>{const o=Math.round(t.loaded/t.total*100);e.onProgress({percent:o,file:e.file})}}).then(t=>{e.onSuccess(t,e.file)}).catch(t=>{"CanceledError"!==t.name&&"ERR_CANCELED"!==t.code?t.response&&401!==t.response.status?(this.exceptionList.push(e),e.onError(t,e.file)):t.response||(this.exceptionList.push(e),e.onError(t,e.file)):console.log("上传已取消:",e.file.name)}).finally(()=>{this.abortControllers.delete(e.file.uid),this.onUploadComplete()})},async uploadFileInChunks(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.uploadChannel||this.uploadChannel,s=new AbortController;this.abortControllers.set(e.file.uid,s);const a="discord"===o?9437184:16777216,l=e.file.size,i=e.file.type||"application/octet-stream",n=Math.ceil(l/a),r=t.serverCompress,d=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType;let u=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),u=await Dt(e.file),console.log("SHA256 computed:",u)}catch(p){console.error("Failed to compute SHA256:",p)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",i),t.append("totalChunks",n.toString());const h=await(0,Ut.A)({url:"/upload?serverCompress="+r+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+d+"&uploadFolder="+encodeURIComponent(this.uploadFolder)+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!h.data.success)throw new Error(this.$t("uploadForm.chunkInitFailed")+": "+h.data.message);const m=h.data.uploadId;console.log("分块上传初始化成功,uploadId:",m);const g=this.fileList.find(t=>t.uid===e.file.uid);g&&(g.totalChunks=n,g.uploadId=m);const f=3,y=new Array(n).fill(0);let b=0,v=!1,C="",k=!1;const w=async t=>{if(v||k)return;const u=t*a,h=Math.min(u+a,l),g=e.file.slice(u,h),f=new FormData;f.append("file",g,`${e.file.name}.part${t.toString().padStart(3,"0")}`),f.append("chunkIndex",t.toString()),f.append("totalChunks",n.toString()),f.append("uploadId",m),f.append("originalFileName",e.file.name),f.append("originalFileType",i);let b=0;const w=3;while(b{if(v||k)return;const s=Math.round(o.loaded/o.total*100);y[t]=s;const a=Math.round(y.reduce((e,t)=>e+t,0)/n);e.onProgress({percent:a,file:e.file})}})}catch(p){if("CanceledError"===p.name||"ERR_CANCELED"===p.code)return k=!0,void console.log("分块上传已取消:",e.file.name);if(b++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${b}/${w}):`,p),b>=w)throw v=!0,C=`分块 ${t+1}/${n} 上传失败: ${p.message}`,new Error(C);await new Promise(e=>setTimeout(e,2e3*b))}}},F=[];for(let e=0;e{while(bt.uid===e.file.uid);t&&t.uploadId&&this.cleanupUploadResources(t.uploadId,t.totalChunks).then(()=>{console.log(`已清理分块上传失败的资源: ${t.uploadId}`)}).catch(e=>{console.warn("清理分块上传失败资源时出错:",e)}),p.response&&401!==p.response.status?(this.exceptionList.push(e),e.onError(p,e.file)):p.response||(this.exceptionList.push(e),e.onError(p,e.file))}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},handleRemove(e){this.abortControllers.has(e.uid)&&(this.abortControllers.get(e.uid).abort(),this.abortControllers.delete(e.uid)),this.uploadQueue=this.uploadQueue.filter(t=>t.file.uid!==e.uid),this.fileList=this.fileList.filter(t=>t.uid!==e.uid),this.$message({type:"info",message:this.$t("uploadForm.deleted",{name:this.truncateFilename(e.name)})})},async cleanupUploadResources(e,t=0){try{await(0,Ut.A)({url:`/upload?cleanup=true&uploadId=${e}&totalChunks=${t}`,method:"get",withAuthCode:!0,timeout:5e3}),console.log(`清理上传资源成功: ${e}`)}catch(o){console.warn("清理上传资源失败:",o)}},handleSuccess(e,t){const o=this.fileList.find(e=>e.uid===t.uid);if(o)try{const s=o.uploadChannel||this.uploadChannel;if("external"!==s){const s=e.data[0].src.replace("/file/","");o.url=`${window.location.protocol}//${window.location.host}/file/`+s;const a=Tt(s,t.name,this.rootUrl);Object.assign(o,a),o.srcID=s}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message:this.$t("uploadForm.uploadSuccess",{name:this.truncateFilename(t.name)})}),setTimeout(()=>{const e=this.fileList.find(e=>e.uid===t.uid);e&&(e.status="done")},1e3)}catch(s){this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception"}},saveToHistory(e){try{const t=JSON.parse(localStorage.getItem("uploadHistory")||"[]"),o={name:e.name,url:e.finalURL,time:Date.now(),type:e.name.split(".").pop().toLowerCase()};t.push(o),localStorage.setItem("uploadHistory",JSON.stringify(t))}catch(t){console.error("Failed to save history",t)}},handleError(e,t){const o=this.fileList.find(e=>e.uid===t.uid);o&&(this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception",this.autoReUpload&&this.scheduleAutoRetry())},handleCopy(e){const t=this.fileList.find(t=>t.uid===e.uid).status;"done"===t||"success"===t?(navigator.clipboard.writeText(_t(e,this.selectedUrlForm)),this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})):this.$message({type:"warning",message:this.$t("uploadForm.fileNotUploaded")})},beforeUpload(e){return new Promise(async(t,o)=>{let s=e;const a=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(a)try{const t=await this.convertImageToWebp(e);t&&(s=t,console.log(`WebP转换成功: ${e.name} -> ${t.name}, 大小: ${(e.size/1024).toFixed(1)}KB -> ${(t.size/1024).toFixed(1)}KB`))}catch(r){console.warn("WebP转换失败,使用原文件:",r)}const l=s.type.includes("image")&&this.customerCompress&&s.size/1024/1024>this.compressBar,i=s.size/1024/1024<=1024||"telegram"!==this.uploadChannel,n=(e,o)=>{const s=URL.createObjectURL(e);this.fileList.push({uid:e.uid,name:e.name,url:s,finalURL:"",mdURL:"",htmlURL:"",ubbURL:"",srcID:"",status:"uploading",progreess:0,serverCompress:o,retryCount:0}),t(e)};if(l)$t.compressAccurately(s,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(this.$t("uploadForm.compressedFileTooLarge",{name:s.name})),o(this.$t("uploadForm.fileSizeTooLarge"))),this.uploading=!0;const a=new File([t],s.name,{type:t.type});a.uid=e.uid;const l=this.uploadCount++,i=this.serverCompress&&a.size/1024/1024<10&&"telegram"===this.uploadChannel;0===l?n(a,i):setTimeout(()=>{n(a,i),this.uploadCount--},300*l)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:s.name})),o(e)});else if(i){this.uploading=!0;const e=this.uploadCount++,t="telegram"===this.uploadChannel&&this.serverCompress&&(!s.type.includes("image")||s.size/1024/1024<10);0===e?n(s,t):setTimeout(()=>{n(s,t),this.uploadCount--},300*e)}else this.$message.error(this.$t("uploadForm.fileTooLarge",{name:s.name})),o(this.$t("uploadForm.fileSizeTooLarge"))})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){const e=this.fileList.filter(e=>"done"===e.status||"success"===e.status).map(e=>_t(e,this.selectedUrlForm)).join("\n");navigator.clipboard.writeText(e),this.$message({type:"success",message:this.$t("uploadForm.copyAllSuccess")})},clearFileList(){this.fileList.length>0?(this.abortControllers.forEach((e,t)=>{e.abort()}),this.abortControllers.clear(),this.uploadQueue=[],this.fileList=[],this.$message({type:"success",message:this.$t("uploadForm.fileListCleared")})):this.$message({type:"info",message:this.$t("uploadForm.fileListEmpty")})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:this.$t("uploadForm.successFilesCleared")})):this.$message({type:"info",message:this.$t("uploadForm.successFilesEmpty")})},handlePaste(e){if("INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName)return;const t=e.clipboardData.items;t.length>0&&this.uploadFromUrl(t)},handleUploadPasteUrls(){const e=this.pastedUrls.split("\n"),t=e.map(e=>e.trim()).filter(e=>""!==e).filter(e=>/^(https?:\/\/[^\s$.?#].[^\s]*)$/.test(e));if("save"===this.pasteUploadMethod)this.uploadFromUrl(t.map(e=>({kind:"string",getAsString:t=>{t(e)}})));else if("external"===this.pasteUploadMethod)for(let o=0;o`,i=`[img]${e}[/img]`,n=new File([],e.split("/").pop(),{type:"text/plain"});n.uid=Date.now()+o,n.url=e,this.fileList.push({uid:n.uid,name:n.name,url:e,finalURL:e,mdURL:a,htmlURL:l,ubbURL:i,srcID:e,status:"uploading",progreess:0,serverCompress:!1,uploadChannel:"external",retryCount:0}),this.uploadFile({file:n,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}},uploadFromUrl(e){for(let t=0;t{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}else"string"===e[t].kind&&e[t].getAsString(e=>{const o=/^(https?:\/\/[^\s$.?#].[^\s]*)$/;let s="";o.test(e)&&Ut.A.post("/api/fetchRes",{url:e},{responseType:"blob",withAuthCode:!0}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const l=o.headers["content-disposition"];if(l){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(l);if(null!=o&&o[1]){s=o[1].replace(/['"]/g,"");try{s=decodeURIComponent(s)}catch(a){s=""}}""===s&&(o=t.exec(l),null!=o&&o[1]&&(s=decodeURIComponent(o[1])))}if(""===s){const t=new URL(e);s=t.pathname.split("/").pop()}if(""===s){const o=new URL(e);let a=o.pathname.split(".").pop();(!a||""===a||a.length>10)&&(a="bin"),s="PastedFile"+Date.now()+t+"."+a}const i=o.data,n=new File([i],s,{type:i.type});n.uid=Date.now()+t;const r=this.beforeUpload(n);r instanceof Promise&&r.then(e=>{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}}).catch(e=>{this.$message({type:"warning",message:this.$t("uploadForm.urlRequestFailed")})})})},handleScroll(e){this.listScrolled=e.scrollTop>0&&this.fileList.length>0},retryError(){this.exceptionList.length>0?(this.retryFailedFiles(this.exceptionList),this.exceptionList=[]):this.$message({type:"info",message:this.$t("uploadForm.noFailedFiles")})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?this.$t("uploadForm.autoRetryOn"):this.$t("uploadForm.autoRetryOff")}),e&&this.exceptionList.length>0&&this.scheduleAutoRetry()},retryFailedFiles(e){e.forEach(e=>{const t=e.retryCount||0;tthis.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})):this.$message({type:"warning",message:this.$t("uploadForm.maxRetryReached",{name:e.name,max:this.maxRetryCount})})})},scheduleAutoRetry(){this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{if(this.autoReUpload&&this.exceptionList.length>0){const e=[...this.exceptionList];this.exceptionList=[],this.retryFailedFiles(e)}},this.retryDelay)},async uploadToHuggingFaceDirect(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=new AbortController;this.abortControllers.set(e.file.uid,o);try{console.log("=== HuggingFace Direct Upload ==="),console.log("File:",e.file.name,"Size:",e.file.size),e.onProgress({percent:5,file:e.file}),console.log("Computing SHA256...");const t=await Dt(e.file);if(console.log("SHA256:",t),o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);const s=new Uint8Array(await e.file.slice(0,512).arrayBuffer()),a=btoa(String.fromCharCode(...s));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const l=await(0,Ut.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:a,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:this.uploadFolder},withAuthCode:!0,signal:o.signal});if(!l.data.success)throw new Error(l.data.error||"Failed to get upload URL");const i=l.data;if(console.log("Upload info:",i),i.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(i.needsLfs&&i.uploadAction){const{href:t,header:s}=i.uploadAction;if(s?.chunk_size)await this.uploadToHuggingFaceMultipart(e,i,o);else{console.log("Uploading to S3 (basic)...");const a=await fetch(t,{method:"PUT",headers:s||{},body:e.file,signal:o.signal});if(!a.ok){const e=await a.text();throw new Error(`S3 upload failed: ${a.status} - ${e}`)}console.log("S3 upload complete")}}if(o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);e.onProgress({percent:95,file:e.file}),console.log("Committing file...");const n=await(0,Ut.A)({url:"/upload/huggingface/commitUpload",method:"post",data:{fullId:i.fullId,filePath:i.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:i.channelName},withAuthCode:!0,signal:o.signal});if(!n.data.success)throw new Error(n.data.error||"Failed to commit file");console.log("Upload complete:",n.data);const r={data:[{src:n.data.src}]};e.onSuccess(r,e.file)}catch(s){if("CanceledError"===s.name||"ERR_CANCELED"===s.code||"AbortError"===s.name)return void console.log("HuggingFace 上传已取消:",e.file.name);console.error("HuggingFace direct upload error:",s),this.exceptionList.push(e),e.onError(s,e.file)}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},async uploadToHuggingFaceMultipart(e,t,o){const{uploadAction:s}=t,{href:a,header:l}=s,i=parseInt(l.chunk_size),n=Object.keys(l).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${i}`);const r=[],d=n.length;for(const u of n){if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");const t=parseInt(u)-1,s=t*i,a=Math.min(s+i,e.file.size),n=e.file.slice(s,a);console.log(`Uploading part ${u}/${d}`);const c=await fetch(l[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!c.ok)throw new Error(`Failed to upload part ${u}: ${c.status}`);const p=c.headers.get("ETag");if(!p)throw new Error(`No ETag for part ${u}`);r.push({partNumber:parseInt(u),etag:p});const h=10+Math.round(parseInt(u)/d*80);e.onProgress({percent:h,file:e.file})}if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");console.log("Completing multipart upload...");const c=await fetch(a,{method:"POST",headers:{Accept:"application/vnd.git-lfs+json","Content-Type":"application/vnd.git-lfs+json"},body:JSON.stringify({oid:t.oid,parts:r}),signal:o?o.signal:void 0});if(!c.ok){const e=await c.text();throw new Error(`Multipart complete failed: ${c.status} - ${e}`)}console.log("Multipart upload complete")},async convertImageToWebp(e){return new Promise((t,o)=>{if(e.type.includes("gif")||e.type.includes("svg")||e.type.includes("webp"))return void t(null);const s=new Image,a=document.createElement("canvas"),l=a.getContext("2d");s.onload=()=>{a.width=s.width,a.height=s.height,l.drawImage(s,0,0),a.toBlob(a=>{if(a){const o=e.name,s=o.lastIndexOf("."),l=s>0?o.substring(0,s)+".webp":o+".webp",i=new File([a],l,{type:"image/webp"});i.uid=e.uid,t(i)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(s.src)},"image/webp",.92)},s.onerror=()=>{URL.revokeObjectURL(s.src),o(new Error(this.$t("uploadForm.imageLoadFailed")))},s.src=URL.createObjectURL(e)})},handleUploadCardMouseMove(e){const t=this.$refs.uploadCardGlow;if(!t)return;const o=e.currentTarget.getBoundingClientRect(),s=e.clientX-o.left,a=e.clientY-o.top;t.style.opacity="1",t.style.left=s+"px",t.style.top=a+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const Nt=(0,W.A)(It,[["render",Lt],["__scopeId","data-v-be7542f0"]]);var zt=Nt,Pt=o(732),Vt=o(33892),Wt=o(45130);const Bt={class:"directory-suggestion-input",ref:"wrapperRef"},Ht={class:"suggestion-dropdown"},Xt={class:"suggestion-list"},Ot=["title","onMousedown"];function Qt(e,t,o,s,a,n){const r=G.WK;return(0,l.uX)(),(0,l.CE)("div",Bt,[(0,l.bF)(r,{ref:"inputRef",modelValue:n.inputValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputValue=e),placeholder:o.placeholder,onFocus:n.handleFocus,onBlur:n.handleBlur,onInput:n.handleInput},null,8,["modelValue","placeholder","onFocus","onBlur","onInput"]),(0,l.bo)((0,l.Lk)("div",Ht,[(0,l.Lk)("ul",Xt,[((0,l.uX)(!0),(0,l.CE)(l.FK,null,(0,l.pI)(a.suggestions,(e,t)=>((0,l.uX)(),(0,l.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,Wt.D$)(t=>n.selectItem(e),["prevent"])},(0,i.v_)(e.value),41,Ot))),128))])],512),[[Wt.aG,a.dropdownVisible&&a.suggestions.length>0]])],512)}var jt={name:"DirectorySuggestionInput",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:""}},emits:["update:modelValue","focus","blur","select"],data(){return{directoryTreeRoot:null,directoryTreeLoaded:!1,directoryTreeLoading:!1,directoryChildrenMap:{},focusTime:null,dropdownVisible:!1,isFocused:!1,suggestions:[]}},computed:{inputValue:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},watch:{modelValue(){this.isFocused&&this.refreshSuggestions()}},methods:{handleFocus(){this.isFocused=!0,this.focusTime=Date.now(),this.ensureDirectoryTreeLoaded(),this.$emit("focus"),setTimeout(()=>{this.isFocused&&(this.refreshSuggestions(),this.dropdownVisible=!0)},500)},handleBlur(){this.isFocused=!1,this.dropdownVisible=!1,this.$emit("blur")},handleInput(e){this.$nextTick(()=>{this.refreshSuggestions(),this.isFocused&&(this.dropdownVisible=!0)})},selectItem(e){const t=e.value;this.inputValue=t,this.$emit("select",t);const o=this.normalizeDirectoryPath(t),s=this.directoryChildrenMap[o];s&&s.length>0?this.$nextTick(()=>{this.refreshSuggestions(),this.dropdownVisible=!0,this.$refs.inputRef?.focus()}):this.dropdownVisible=!1},refreshSuggestions(){this.suggestions=this.getDirectorySuggestions(this.modelValue||"")},normalizeDirectoryPath(e){if(!e)return"/";let t=e;return t.startsWith("/")||(t="/"+t),"/"===t||t.endsWith("/")||(t+="/"),t},buildDirectoryChildrenMap(e){const t={},o=e=>{const s=this.normalizeDirectoryPath(e.path),a=Array.isArray(e.children)?e.children:[];t[s]=a.map(e=>({name:e.name,path:this.normalizeDirectoryPath(e.path)})),a.forEach(o)};o(e),this.directoryChildrenMap=t},async ensureDirectoryTreeLoaded(){if(!this.directoryTreeLoaded&&!this.directoryTreeLoading){this.directoryTreeLoading=!0;try{const e=await Ut.A.get("/api/directoryTree",{withAuthCode:!0}),t=e?.data?.tree;t&&(this.directoryTreeRoot=t,this.buildDirectoryChildrenMap(t),this.directoryTreeLoaded=!0)}catch(e){console.error("Failed to load directory tree for autocomplete:",e)}finally{this.directoryTreeLoading=!1}}},parseDirectoryQuery(e){const t=e&&e.startsWith("/")?e:`/${e||""}`,o=t.slice(1),s=o.split("/"),a=s[s.length-1]||"",l=s.slice(0,-1).filter(Boolean),i=l.length>0?`/${l.join("/")}/`:"/";return{segmentInput:a,parentPath:i}},getDirectorySuggestions(e){const{segmentInput:t,parentPath:o}=this.parseDirectoryQuery(e),s=this.directoryChildrenMap[o]||[];if(!t)return s.slice(0,10).map(e=>({value:e.path}));const a=t.toLowerCase();return s.filter(e=>e.name.toLowerCase().startsWith(a)).slice(0,10).map(e=>({value:e.path}))}}};const qt=(0,W.A)(jt,[["render",Qt],["__scopeId","data-v-0ff63416"]]);var Gt=qt,Kt=o(6834);const Jt={class:"container"},Yt={class:"upload-home"},Zt={class:"toolbar-manage"},eo={class:"toolbar"},to={class:"header"},oo={class:"title"},so={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},ao={class:"dialog-section"},lo={class:"section-header"},io={class:"section-title"},no={class:"section-content"},ro={class:"dialog-section"},co={class:"section-header"},uo={class:"section-title"},po={class:"section-content"},ho={class:"setting-item"},mo={class:"setting-label"},go={key:0,class:"setting-item"},fo={class:"setting-label"},yo={class:"dialog-action"},bo=["innerHTML"],vo={class:"dialog-footer"};function Co(e,t,o,n,r,d){const c=Kt.A,u=(0,l.g2)("font-awesome-icon"),p=a.S2,h=pt.c6,m=pt.Iy,g=pt.dW,f=Gt,y=G.WK,b=Vt.A,v=s.R7,C=Pt.A,k=zt,w=J.ll,F=J.MQ,L=q.qi,U=O.kZ,$=We,S=X.A,T=H;return(0,l.uX)(),(0,l.CE)("div",Jt,[(0,l.Lk)("div",Yt,[(0,l.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,l.bF)(g,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,l.k6)(()=>[(0,l.bF)(m,null,{default:(0,l.k6)(()=>[(0,l.bF)(h,{command:"showHistory"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,l.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,l.bF)(h,{command:"toggleLanguage"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,l.bF)(h,{command:"viewDocs"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"more-button"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,l.Lk)("div",{class:(0,i.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,l.Lk)("div",{class:(0,i.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,l.uX)(),(0,l.Wv)(f,{key:0,modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),class:"inner-folder-input",placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur,onSelect:d.handleDirectorySelect},null,8,["modelValue","placeholder","onFocus","onBlur","onSelect"])):((0,l.uX)(),(0,l.Wv)(y,{key:1,class:"inner-folder-input",modelValue:r.uploadFolder,"onUpdate:modelValue":t[1]||(t[1]=e=>r.uploadFolder=e),placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur},null,8,["modelValue","placeholder","onFocus","onBlur"]))],2),d.showDirectorySuggestions?((0,l.uX)(),(0,l.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,l.k6)(()=>[(0,l.bF)(p,{class:"directory-tree-trigger"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,l.Q3)("",!0)],2),(0,l.bF)(v,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,l.k6)(()=>["default"===r.uploadMethod?((0,l.uX)(),(0,l.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,l.uX)(),(0,l.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,l.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,l.bF)(g,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,l.k6)(()=>[(0,l.bF)(m,null,{default:(0,l.k6)(()=>[(0,l.bF)(h,{command:"toggleTheme"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,l.eW)(" "+(0,i.v_)(d.getThemeText()),1)]),_:1}),(0,l.bF)(h,{command:"toggleUploadMethod"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,l.eW)(" "+(0,i.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,l.bF)(h,{command:"showHistory"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.history")),1)]),_:1}),(0,l.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,l.bF)(h,{command:"toggleLanguage"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,l.bF)(h,{command:"viewDocs"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,l.eW)(" "+(0,i.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,l.k6)(()=>[(0,l.bF)(p,{class:"mobile-more-button"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,l.Lk)("div",Zt,[(0,l.bF)(p,{class:(0,i.C4)(["toolbar-manage-button",{active:r.isToolBarOpen}]),size:"large",onClick:d.handleOpenToolbar,circle:""},{default:(0,l.k6)(()=>[r.isToolBarOpen?((0,l.uX)(),(0,l.Wv)(u,{key:1,icon:"times",class:"manage-icon",size:"lg"})):((0,l.uX)(),(0,l.Wv)(u,{key:0,icon:"bars",class:"manage-icon",size:"lg"}))]),_:1},8,["class","onClick"])]),(0,l.Lk)("div",eo,[(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"top"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:(0,i.C4)(["toolbar-button compress-button",{active:r.isToolBarOpen}]),size:"large",onClick:d.openCompressDialog,circle:""},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"cloud-upload",class:"compress-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled","content"]),(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.linkFormat"),placement:"left"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:(0,i.C4)(["toolbar-button link-button",{active:r.isToolBarOpen}]),size:"large",onClick:d.openUrlDialog,circle:""},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"link",class:"link-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled","content"]),(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.manage"),placement:"left"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:(0,i.C4)(["toolbar-button config-button",{active:r.isToolBarOpen}]),size:"large",onClick:d.handleManage,circle:""},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"cog",class:"config-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled","content"]),(0,l.bF)(v,{disabled:d.disableTooltip,content:e.$t("upload.logout"),placement:"left"},{default:(0,l.k6)(()=>[(0,l.bF)(p,{class:(0,i.C4)(["toolbar-button sign-out-button",{active:r.isToolBarOpen}]),size:"large",onClick:d.handleLogout,circle:""},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"sign-out-alt",class:"sign-out-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled","content"])]),(0,l.bF)(C,{useConfigLink:!0}),(0,l.Lk)("div",to,[(0,l.Lk)("h1",oo,[(0,l.Lk)("a",so,(0,i.v_)(d.ownerName),1),t[21]||(t[21]=(0,l.eW)(" ImgHub",-1))])]),(0,l.bF)(k,{selectedUrlForm:r.selectedUrlForm,customerCompress:r.customerCompress,compressQuality:r.compressQuality,compressBar:r.compressBar,serverCompress:r.serverCompress,uploadChannel:r.uploadChannel,channelName:r.channelName,uploadNameType:r.uploadNameType,useCustomUrl:r.useCustomUrl,customUrlPrefix:r.customUrlPrefix,autoRetry:r.autoRetry,urlPrefix:d.urlPrefix,uploadMethod:r.uploadMethod,uploadFolder:r.uploadFolder,convertToWebp:r.convertToWebp,class:"upload"},null,8,["selectedUrlForm","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadMethod","uploadFolder","convertToWebp"]),(0,l.bF)(U,{title:e.$t("settings.linkFormatTitle"),modelValue:r.showUrlDialog,"onUpdate:modelValue":t[6]||(t[6]=e=>r.showUrlDialog=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,l.k6)(()=>[(0,l.Lk)("div",ao,[(0,l.Lk)("div",lo,[(0,l.Lk)("span",io,(0,i.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,l.Lk)("div",no,[(0,l.bF)(F,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[2]||(t[2]=e=>r.selectedUrlForm=e),onChange:d.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,l.k6)(()=>[(0,l.bF)(w,{value:"url",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"link",class:"radio-icon"}),(0,l.Lk)("span",null,(0,i.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,l.bF)(w,{value:"md",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"code",class:"radio-icon"}),t[22]||(t[22]=(0,l.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,l.bF)(w,{value:"html",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[23]||(t[23]=(0,l.Lk)("span",null,"HTML",-1))]),_:1}),(0,l.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[24]||(t[24]=(0,l.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,l.Lk)("div",ro,[(0,l.Lk)("div",co,[(0,l.Lk)("span",uo,(0,i.v_)(e.$t("settings.customLink")),1),(0,l.bF)(v,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,l.k6)(()=>[(0,l.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,l.Lk)("div",po,[(0,l.Lk)("div",ho,[(0,l.Lk)("span",mo,(0,i.v_)(e.$t("settings.enableCustom")),1),(0,l.bF)(L,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[3]||(t[3]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,l.uX)(),(0,l.CE)("div",go,[(0,l.Lk)("span",fo,(0,i.v_)(e.$t("settings.customPrefix")),1),(0,l.bF)(y,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[4]||(t[4]=e=>r.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,l.Q3)("",!0)])]),(0,l.Lk)("div",yo,[(0,l.bF)(p,{type:"primary",onClick:t[5]||(t[5]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,l.bF)($,{modelValue:r.showCompressDialog,"onUpdate:modelValue":t[7]||(t[7]=e=>r.showCompressDialog=e),uploadChannel:r.uploadChannel,"onUpdate:uploadChannel":t[8]||(t[8]=e=>r.uploadChannel=e),channelName:r.channelName,"onUpdate:channelName":t[9]||(t[9]=e=>r.channelName=e),currentChannelList:d.currentChannelList,uploadFolder:r.uploadFolder,"onUpdate:uploadFolder":t[10]||(t[10]=e=>r.uploadFolder=e),autoRetry:r.autoRetry,"onUpdate:autoRetry":t[11]||(t[11]=e=>r.autoRetry=e),uploadNameType:r.uploadNameType,"onUpdate:uploadNameType":t[12]||(t[12]=e=>r.uploadNameType=e),convertToWebp:r.convertToWebp,"onUpdate:convertToWebp":t[13]||(t[13]=e=>r.convertToWebp=e),customerCompress:r.customerCompress,"onUpdate:customerCompress":t[14]||(t[14]=e=>r.customerCompress=e),compressBar:r.compressBar,"onUpdate:compressBar":t[15]||(t[15]=e=>r.compressBar=e),compressQuality:r.compressQuality,"onUpdate:compressQuality":t[16]||(t[16]=e=>r.compressQuality=e),serverCompress:r.serverCompress,"onUpdate:serverCompress":t[17]||(t[17]=e=>r.serverCompress=e)},null,8,["modelValue","uploadChannel","channelName","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,l.bF)(S,{class:"footer"}),(0,l.bF)(U,{title:e.$t("upload.announcementTitle"),modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[19]||(t[19]=e=>r.showAnnouncementDialog=e),width:d.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,l.k6)(()=>[(0,l.Lk)("span",vo,[(0,l.bF)(p,{type:"primary",onClick:t[18]||(t[18]=e=>r.showAnnouncementDialog=!1)},{default:(0,l.k6)(()=>[(0,l.eW)((0,i.v_)(e.$t("upload.announcementAck")),1)]),_:1})])]),default:(0,l.k6)(()=>[(0,l.Lk)("div",{innerHTML:r.announcementContent},null,8,bo)]),_:1},8,["title","modelValue","width"]),(0,l.bF)(T,{show:r.showHistory,onClose:t[20]||(t[20]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var ko=o(46638),wo=o(48903),Fo=o(90144),Lo=o(62388),Uo={name:"UploadHome",mixins:[wo.A],data(){return{selectedUrlForm:(0,Fo.KR)(""),showUrlDialog:!1,showCompressDialog:!1,customerCompress:!0,compressQuality:4,compressBar:5,convertToWebp:!1,serverCompress:!0,uploadChannel:"",channelName:"",availableChannels:{},uploadNameType:"",customUrlPrefix:"",useCustomUrl:"false",autoRetry:!0,useDefaultWallPaper:!1,isToolBarOpen:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,showAnnouncementDialog:!1,announcementContent:"",showHistory:!1,themeMode:"auto"}},watch:{customerCompress(e){this.updateCompressConfig("customerCompress",e)},compressQuality(e){this.updateCompressConfig("compressQuality",e)},compressBar(e){null===e||void 0===e||e<1?this.compressBar=1:(this.compressQuality>e&&(this.compressQuality=e),this.updateCompressConfig("compressBar",e))},serverCompress(e){this.updateCompressConfig("serverCompress",e)},convertToWebp(e){this.updateCompressConfig("convertToWebp",e)},uploadChannel(e){this.updateStoreUploadChannel(e);const t=this.availableChannels[e]||[],o=this.storeChannelName;o&&t.some(e=>e.name===o)?this.channelName=o:this.channelName=""},channelName(e){this.$store.commit("setStoreChannelName",e||"")},uploadNameType(e){this.updateStoreUploadNameType(e)},customUrlPrefix(e){this.$store.commit("setCustomUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setCustomUrlSettings",{key:"useCustomUrl",value:e})},autoRetry(e){this.$store.commit("setStoreAutoRetry",e)},uploadFolder(e){if(this.validateUploadFolder(e,!1)){const t=(0,Lo.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,St.L8)(["userConfig","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeUploadNameType","customUrlSettings","storeAutoRetry","storeUploadMethod","storeUploadFolder"]),ownerName(){return this.userConfig?.ownerName||"Sanyue"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},disableTooltip(){return window.innerWidth<768},urlPrefix(){return this.userConfig?.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},announcementAvailable(){return!!this.userConfig?.announcement},showDirectorySuggestions(){return this.userConfig?.showDirectorySuggestions??!1},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!1,!0),this.selectedUrlForm=this.uploadCopyUrlForm||"url",this.customerCompress=this.compressConfig.customerCompress??this.parseBoolean(this.userConfig?.defaultCustomerCompress,!0),this.compressQuality=this.compressConfig.compressQuality??this.parseNumber(this.userConfig?.defaultCompressQuality,4),this.compressBar=this.compressConfig.compressBar??this.parseNumber(this.userConfig?.defaultCompressBar,5),this.serverCompress=this.compressConfig.serverCompress??!0,this.convertToWebp=this.compressConfig.convertToWebp??this.parseBoolean(this.userConfig?.defaultConvertToWebp,!1),this.uploadChannel=this.storeUploadChannel||this.userConfig?.defaultUploadChannel||"telegram",this.autoRetry=this.storeAutoRetry,this.uploadNameType=this.storeUploadNameType||this.userConfig?.defaultUploadNameType||"default",this.customUrlPrefix=this.customUrlSettings.customUrlPrefix,this.useCustomUrl=this.customUrlSettings.useCustomUrl,this.uploadMethod=this.storeUploadMethod,this.fetchAvailableChannels(),this.uploadFolder=this.storeUploadFolder||this.userConfig?.defaultUploadFolder||"";const e=this.$store.getters.cusDarkMode,t=this.$store.getters.useDarkMode;this.themeMode=e?t?"dark":"light":"auto";const o=localStorage.getItem("visitedUploadHome"),s=this.userConfig?.announcement;!o&&s&&(this.announcementContent=s,this.showAnnouncementDialog=!0,localStorage.setItem("visitedUploadHome","true"))},components:{UploadForm:zt,Footer:X.A,ToggleDark:Kt.A,Logo:Pt.A,UploadHistory:H,UploadSettingsDialog:We,DirectoryTreePicker:Vt.A,DirectorySuggestionInput:Gt},methods:{async fetchAvailableChannels(){try{const e=await Ut.A.get("/api/channels",{withAuthCode:!0});if(e.data){this.availableChannels=e.data;const t=this.storeChannelName,o=this.userConfig?.defaultChannelName,s=this.availableChannels[this.uploadChannel]||[];t&&s.some(e=>e.name===t)?this.channelName=t:""!==t&&null!==t&&void 0!==t||""!==t&&o&&s.some(e=>e.name===o)&&(this.channelName=o)}}catch(e){console.error("Failed to fetch available channels:",e)}},validateUploadFolder(e,t=!0){e&&!e.startsWith("/")&&(e="/"+e,this.uploadFolder=e);const o=(0,Lo.G)(e,{strict:t});return!!o.valid||(this.$message.error(o.error),!1)},handleFolderInputFocus(){this.isFolderInputActive=!0},handleFolderInputBlur(){this.isFolderInputActive=!1,this.uploadFolder&&!this.uploadFolder.startsWith("/")&&(this.uploadFolder="/"+this.uploadFolder),this.validateUploadFolder(this.uploadFolder,!0)||this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})},handleManage(){this.$router.push("/dashboard")},parseBoolean(e,t){return void 0===e||null===e?t:"boolean"===typeof e?e:"string"===typeof e?"true"===e:t},parseNumber(e,t){if(void 0===e||null===e)return t;const o=parseFloat(e);return isNaN(o)?t:o},openUrlDialog(){this.showUrlDialog=!0},handleLogout(){Ut.A.post("/api/auth/logout",{authType:"user"},{withCredentials:!0}).finally(()=>{this.$store.commit("setUserLoggedIn",!1),this.$router.push("/login"),this.$message.success(this.$t("upload.logoutSuccess"))})},changeUrlForm(){this.$store.commit("setUploadCopyUrlForm",this.selectedUrlForm)},openCompressDialog(){this.showCompressDialog=!0},updateCompressConfig(e,t){this.$store.commit("setCompressConfig",{key:e,value:t})},updateStoreUploadChannel(e){this.$store.commit("setStoreUploadChannel",e)},updateStoreUploadNameType(e){this.$store.commit("setStoreUploadNameType",e)},handleOpenToolbar(){this.isToolBarOpen=!this.isToolBarOpen,setTimeout(()=>{const e=document.querySelectorAll(".toolbar-button");e.forEach(e=>{e.style.pointerEvents=this.isToolBarOpen?"auto":"none"})},300)},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){if("toggleTheme"===e)"auto"===this.themeMode?(this.themeMode="light",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):"light"===this.themeMode?(this.themeMode="dark",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0)):(this.themeMode="auto",this.$store.commit("setCusDarkMode",!1));else if("toggleUploadMethod"===e)this.handleChangeUploadMethod();else if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,ko.xS)(e)}},handleDesktopMenuCommand(e){if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,ko.xS)(e)}},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?this.$t("theme.lightMode"):"light"===this.themeMode?this.$t("theme.darkMode"):this.$t("theme.autoMode")},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?(this.announcementContent=e,this.showAnnouncementDialog=!0):this.$message.info(this.$t("upload.noAnnouncement"))},handleDirectorySelect(e){this.uploadFolder=e,this.validateUploadFolder(e,!0)&&this.$store.commit("setStoreUploadFolder",e)}}};const $o=(0,W.A)(Uo,[["render",Co],["__scopeId","data-v-f50dcc42"]]);var So=$o},33892:function(e,t,o){"use strict";o.d(t,{A:function(){return $}});var s=o(99114),a=(o(85331),o(30694),o(49385)),l=(o(37952),o(30650)),i=(o(19104),o(31802)),n=(o(13378),o(80047)),r=(o(99648),o(56768)),d=o(45130),c=o(24232);const u={class:"directory-tree-picker"},p={class:"tree-container"},h={key:0,class:"error-state"},m={class:"error-text"},g={class:"node-label"},f={class:"tree-container"},y={key:0,class:"error-state"},b={class:"error-text"},v={class:"node-label"};function C(e,t,o,C,k,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=i.qk,$=l.Vc,S=a.pw,T=s.A;return(0,r.uX)(),(0,r.CE)("div",u,[w.isDesktop?((0,r.uX)(),(0,r.Wv)($,{key:0,visible:k.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>k.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,r.k6)(()=>[(0,r.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",p,[k.error?((0,r.uX)(),(0,r.CE)("div",h,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",m,(0,c.v_)(k.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRef",data:k.treeData,props:k.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",g,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,k.loading]])]),_:3},8,["visible"])):((0,r.uX)(),(0,r.CE)(r.FK,{key:1},[(0,r.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,r.bF)(S,{modelValue:k.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>k.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",f,[k.error?((0,r.uX)(),(0,r.CE)("div",y,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",b,(0,c.v_)(k.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRefMobile",data:k.treeData,props:k.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",v,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,k.loading]])]),_:1},8,["modelValue","title"])],64))])}var k=o(457),w=o(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,w.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await k.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},L=o(71241);const U=(0,L.A)(F,[["render",C],["__scopeId","data-v-62eab69a"]]);var $=U},34396:function(e,t,o){"use strict";o(85331),o(4885)},37952:function(e,t,o){"use strict";o(85331),o(97197)},38736:function(e,t,o){"use strict";o(85331)},40670:function(e,t,o){"use strict";o(85331),o(99648),o(19104),o(85970)},50333:function(e,t,o){"use strict";o(85331),o(29092)},53676:function(e,t,o){"use strict";o.d(t,{A:function(){return u}});var s=o(56768);const a={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},l={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function n(e,t,o,n,r,d){const c=(0,s.g2)("font-awesome-icon");return(0,s.uX)(),(0,s.CE)("span",(0,s.v6)(e.$attrs,{class:"channel-icon-wrapper"}),["telegram"===o.type?((0,s.uX)(),(0,s.CE)("svg",a,[...t[0]||(t[0]=[(0,s.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===o.type?((0,s.uX)(),(0,s.CE)("svg",l,[...t[1]||(t[1]=[(0,s.Fv)('',9)])])):"webdav"===o.type?((0,s.uX)(),(0,s.CE)("svg",i,[...t[2]||(t[2]=[(0,s.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,s.uX)(),(0,s.Wv)(c,{key:3,icon:d.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},d=o(71241);const c=(0,d.A)(r,[["render",n],["__scopeId","data-v-33933ada"]]);var u=c},62388:function(e,t,o){"use strict";o.d(t,{G:function(){return a}});var s=o(46638);function a(e,{strict:t=!0}={}){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:s.Ay.global.t("validation.pathMustStartWithSlash")};if(/(?:^|\/)\.\.(\/|$)/.test(e)||e.includes(".."))return{valid:!1,error:s.Ay.global.t("validation.pathTraversalNotAllowed")};const o=t?/\/\.(\/|$)/:/\/\.\//;if(o.test(e))return{valid:!1,error:s.Ay.global.t("validation.singleDotNotAllowed")};if(e.includes("//"))return{valid:!1,error:s.Ay.global.t("validation.consecutiveSlashNotAllowed")};const a=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return a.test(e)?{valid:!1,error:s.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},67819:function(e,t,o){"use strict";o(85331)},70797:function(e,t,o){"use strict";o.d(t,{A:function(){return i}});o(44114);var s=o(25507),a=o(16915);let l=!1;async function i(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||l||(l=!0,s.A.commit("setAdminLoggedIn",!1),a.A.push("/adminLogin").finally(()=>{l=!1})),o}},76334:function(e,t,o){e.exports=o(11393)},79899:function(e,t,o){"use strict";o(85331)},85970:function(e,t,o){"use strict";o(85331)},88830:function(e,t,o){"use strict";o(85331)},95385:function(e,t,o){"use strict";o(85331)},96682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},96808:function(e,t,o){"use strict";o(85331),o(18785),o(67819),o(85970),o(19104)}}]); -//# sourceMappingURL=518.47daf62c.js.map \ No newline at end of file diff --git a/frontend-dist/js/518.47daf62c.js.gz b/frontend-dist/js/518.47daf62c.js.gz deleted file mode 100644 index 43da5a18b4ddfdb0dcb93752eb4881915c8a1814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29494 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¥Y%K*M1sk#?h9@yYI_aJn(%r$}Y+T!Km_S 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 ZIA1)8yrh5I(2K>({{#bZur1r60RY^qE3W_m diff --git a/frontend-dist/js/518.47daf62c.js.map b/frontend-dist/js/518.47daf62c.js.map deleted file mode 100644 index 3f87d322..00000000 --- a/frontend-dist/js/518.47daf62c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/518.47daf62c.js","mappings":"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","sources":["webpack://sanyue_imghub/./node_modules/image-conversion/build/conversion.js","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?61df","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?d5f5","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?0f5d","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?adb2","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?d2e4","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?420c","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?28db","webpack://sanyue_imghub/./src/utils/upload/urlBuilder.js","webpack://sanyue_imghub/./src/utils/upload/sha256.js","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?bdbd","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?be1c","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?69c3","webpack://sanyue_imghub/./src/views/UploadHome.vue?728c","webpack://sanyue_imghub/./src/views/UploadHome.vue","webpack://sanyue_imghub/./src/views/UploadHome.vue?af00","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?4482","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05","webpack://sanyue_imghub/./src/utils/pathValidator.js","webpack://sanyue_imghub/./src/utils/fetchWithAuth.js","webpack://sanyue_imghub/./node_modules/image-conversion/index.js"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.imageConversion=e():t.imageConversion=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=0)}([function(t,e,n){\"use strict\";var r;function o(t){return[\"image/png\",\"image/jpeg\",\"image/gif\"].some(e=>e===t)}n.r(e),n.d(e,\"canvastoDataURL\",(function(){return a})),n.d(e,\"canvastoFile\",(function(){return c})),n.d(e,\"dataURLtoFile\",(function(){return s})),n.d(e,\"dataURLtoImage\",(function(){return l})),n.d(e,\"downloadFile\",(function(){return d})),n.d(e,\"filetoDataURL\",(function(){return f})),n.d(e,\"imagetoCanvas\",(function(){return g})),n.d(e,\"urltoBlob\",(function(){return w})),n.d(e,\"urltoImage\",(function(){return m})),n.d(e,\"compress\",(function(){return p})),n.d(e,\"compressAccurately\",(function(){return b})),n.d(e,\"EImageType\",(function(){return r})),function(t){t.PNG=\"image/png\",t.JPEG=\"image/jpeg\",t.GIF=\"image/gif\"}(r||(r={}));var i=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function a(t,e=.92,n=r.JPEG){return i(this,void 0,void 0,(function*(){return o(n)||(n=r.JPEG),t.toDataURL(n,e)}))}function c(t,e=.92,n=r.JPEG){return new Promise(r=>t.toBlob(t=>r(t),n,e))}var u=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function s(t,e){return u(this,void 0,void 0,(function*(){const n=t.split(\",\");let r=n[0].match(/:(.*?);/)[1];const i=atob(n[1]);let a=i.length;const c=new Uint8Array(a);for(;a--;)c[a]=i.charCodeAt(a);return o(e)&&(r=e),new Blob([c],{type:r})}))}function l(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"dataURLtoImage(): dataURL is illegal\")),r.src=t})}function d(t,e){const n=document.createElement(\"a\");n.href=window.URL.createObjectURL(t),n.download=e||Date.now().toString(36),document.body.appendChild(n);const r=document.createEvent(\"MouseEvents\");r.initEvent(\"click\",!1,!1),n.dispatchEvent(r),document.body.removeChild(n)}function f(t){return new Promise(e=>{const n=new FileReader;n.onloadend=t=>e(t.target.result),n.readAsDataURL(t)})}var h=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function g(t,e={}){return h(this,void 0,void 0,(function*(){const n=Object.assign({},e),r=document.createElement(\"canvas\"),o=r.getContext(\"2d\");let i,a;for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=Number(n[t]));if(n.scale){const e=n.scale>0&&n.scale<10?n.scale:1;a=t.width*e,i=t.height*e}else a=n.width||n.height*t.width/t.height||t.width,i=n.height||n.width*t.height/t.width||t.height;switch([5,6,7,8].some(t=>t===n.orientation)?(r.height=a,r.width=i):(r.height=i,r.width=a),n.orientation){case 3:o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 6:o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 8:o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;case 2:o.translate(r.width,0),o.scale(-1,1),o.drawImage(t,0,0,r.width,r.height);break;case 4:o.translate(r.width,0),o.scale(-1,1),o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 5:o.translate(r.width,0),o.scale(-1,1),o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 7:o.translate(r.width,0),o.scale(-1,1),o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;default:o.drawImage(t,0,0,r.width,r.height)}return r}))}function w(t){return fetch(t).then(t=>t.blob())}function m(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"urltoImage(): Image failed to load, please check the image URL\")),r.src=t})}var y=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function p(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compress(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({quality:e})),e.quality=Number(e.quality),Number.isNaN(e.quality))return t;const n=yield f(t);let i=n.split(\",\")[0].match(/:(.*?);/)[1],c=r.JPEG;o(e.type)&&(c=e.type,i=e.type);const u=yield l(n),d=yield g(u,Object.assign({},e)),h=yield a(d,e.quality,c),w=yield s(h,i);return w.size>t.size?t:w}))}function b(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compressAccurately(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({size:e})),e.size=Number(e.size),Number.isNaN(e.size))return t;if(1024*e.size>t.size)return t;e.accuracy=Number(e.accuracy),(!e.accuracy||e.accuracy<.8||e.accuracy>.99)&&(e.accuracy=.95);const n=e.size*(2-e.accuracy)*1024,i=1024*e.size,c=e.size*e.accuracy*1024,u=yield f(t);let d=u.split(\",\")[0].match(/:(.*?);/)[1],h=r.JPEG;o(e.type)&&(h=e.type,d=e.type);const w=yield l(u),m=yield g(w,Object.assign({},e));let y,p=.5;const b=[null,null];for(let t=1;t<=7;t++){y=yield a(m,p,h);const e=.75*y.length;if(7===t){(ne)&&(y=[y,...b].filter(t=>t).sort((t,e)=>Math.abs(.75*t.length-i)-Math.abs(.75*e.length-i))[0]);break}if(ne))break;b[0]=y,p+=Math.pow(.5,t+1)}}const v=yield s(y,d);return v.size>t.size?t:v}))}}])}));","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"history-header\"\n};\nconst _hoisted_2 = {\n class: \"header-left\"\n};\nconst _hoisted_3 = {\n class: \"record-count\"\n};\nconst _hoisted_4 = {\n class: \"header-right\"\n};\nconst _hoisted_5 = {\n class: \"timeline-header\"\n};\nconst _hoisted_6 = {\n class: \"date-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"grid-view\"\n};\nconst _hoisted_8 = {\n class: \"grid-preview\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = {\n key: 2,\n class: \"file-icon-wrapper\"\n};\nconst _hoisted_12 = {\n class: \"grid-overlay\"\n};\nconst _hoisted_13 = {\n class: \"grid-actions\"\n};\nconst _hoisted_14 = {\n class: \"grid-info\"\n};\nconst _hoisted_15 = [\"title\"];\nconst _hoisted_16 = {\n class: \"upload-time\"\n};\nconst _hoisted_17 = {\n key: 1,\n class: \"list-view\"\n};\nconst _hoisted_18 = {\n class: \"list-preview\"\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = [\"src\"];\nconst _hoisted_21 = {\n key: 2,\n class: \"file-icon-wrapper-small\"\n};\nconst _hoisted_22 = {\n class: \"list-info\"\n};\nconst _hoisted_23 = [\"title\"];\nconst _hoisted_24 = [\"title\"];\nconst _hoisted_25 = {\n class: \"list-meta\"\n};\nconst _hoisted_26 = {\n class: \"upload-time\"\n};\nconst _hoisted_27 = {\n class: \"list-actions\"\n};\nconst _hoisted_28 = {\n key: 0,\n class: \"load-more-container\"\n};\nconst _hoisted_29 = {\n key: 0,\n class: \"loading-indicator\"\n};\nconst _hoisted_30 = {\n key: 1,\n class: \"load-more-hint\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"no-more-hint\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"empty-state\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"history-container\", {\n 'active': $props.show\n }])\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t('uploadHistory.title')), 1), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadHistory.totalRecords', {\n count: $data.totalCount\n })), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.switchView'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n onClick: $options.toggleViewMode\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'grid' ? 'list' : 'th-large'\n }, null, 8, [\"icon\"])]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.clearRecords'),\n placement: \"bottom\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n type: \"danger\",\n onClick: $options.clearHistory\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_button, {\n circle: \"\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('close'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })])]), $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"history-content\",\n ref: \"historyContent\",\n onScroll: _cache[3] || (_cache[3] = (...args) => $options.handleScroll && $options.handleScroll(...args))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedHistory, group => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: group.date,\n class: \"history-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"timeline-dot\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_6, _toDisplayString(group.date), 1)]), $data.viewMode === 'grid' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"grid-item\"\n }, [_createElementVNode(\"div\", _hoisted_8, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[1] || (_cache[1] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_9)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_10)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_15), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.formatTime(item.time)), 1)])]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"list-item\"\n }, [_createElementVNode(\"div\", _hoisted_18, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[2] || (_cache[2] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_19)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_20)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\"\n })]))]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_23), _createElementVNode(\"div\", {\n class: \"file-url\",\n title: item.url\n }, _toDisplayString(item.url), 9, _hoisted_24)]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, _toDisplayString($options.formatTime(item.time)), 1)]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])]);\n }), 128))]))]);\n }), 128)), $options.hasMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [$data.loadingMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"spinner\",\n spin: \"\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadHistory.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('uploadHistory.pullToLoadMore')), 1))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('uploadHistory.noMoreRecords')), 1)) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('uploadHistory.emptyHistory')), 1)]))], 2);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nexport default {\n name: 'UploadHistory',\n props: {\n show: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n historyList: [],\n allHistory: [],\n // 完整历史记录\n viewMode: 'grid',\n // 'grid' or 'list'\n pageSize: 30,\n // 每次加载数量\n currentPage: 0,\n loadingMore: false,\n totalCount: 0\n };\n },\n watch: {\n show(val) {\n if (val) {\n this.resetAndLoad();\n }\n }\n },\n computed: {\n hasMore() {\n return this.historyList.length < this.totalCount;\n },\n groupedHistory() {\n const groups = {};\n this.historyList.forEach(item => {\n const date = new Date(item.time);\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n if (!groups[dateStr]) {\n groups[dateStr] = [];\n }\n groups[dateStr].push(item);\n });\n\n // Sort dates descending\n return Object.keys(groups).sort((a, b) => new Date(b) - new Date(a)).map(date => ({\n date,\n items: groups[date]\n }));\n }\n },\n mounted() {\n // Load view mode preference\n const savedMode = localStorage.getItem('historyViewMode');\n if (savedMode) {\n this.viewMode = savedMode;\n }\n },\n methods: {\n resetAndLoad() {\n this.historyList = [];\n this.currentPage = 0;\n this.loadAllHistory();\n this.loadMore();\n },\n loadAllHistory() {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n // Sort by time desc\n this.allHistory = history.sort((a, b) => b.time - a.time);\n this.totalCount = this.allHistory.length;\n } catch (e) {\n console.error('Failed to load history', e);\n this.allHistory = [];\n this.totalCount = 0;\n }\n },\n loadMore() {\n if (this.loadingMore || !this.hasMore) return;\n this.loadingMore = true;\n\n // 模拟异步加载,避免阻塞UI\n setTimeout(() => {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n const newItems = this.allHistory.slice(start, end);\n this.historyList = [...this.historyList, ...newItems];\n this.currentPage++;\n this.loadingMore = false;\n }, 50);\n },\n handleScroll(e) {\n const container = e.target;\n const scrollTop = container.scrollTop;\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n\n // 距离底部 100px 时加载更多\n if (scrollHeight - scrollTop - clientHeight < 100) {\n this.loadMore();\n }\n },\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n localStorage.setItem('historyViewMode', this.viewMode);\n },\n clearHistory() {\n this.$confirm(this.$t('uploadHistory.clearConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.historyList = [];\n this.allHistory = [];\n this.totalCount = 0;\n this.currentPage = 0;\n localStorage.removeItem('uploadHistory');\n this.$message.success(this.$t('uploadHistory.recordsCleared'));\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm(this.$t('uploadHistory.deleteConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // Remove from lists\n this.historyList = this.historyList.filter(i => i.time !== item.time);\n this.allHistory = this.allHistory.filter(i => i.time !== item.time);\n this.totalCount = this.allHistory.length;\n\n // Update localStorage\n try {\n localStorage.setItem('uploadHistory', JSON.stringify(this.allHistory));\n this.$message.success(this.$t('uploadHistory.recordDeleted'));\n } catch (e) {\n console.error('Failed to update history', e);\n }\n }).catch(() => {});\n },\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return imageExtensions.includes(extension);\n },\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return videoExtensions.includes(extension);\n },\n formatTime(timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n },\n copyLink(url) {\n navigator.clipboard.writeText(url).then(() => {\n this.$message.success(this.$t('uploadHistory.linkCopied'));\n }).catch(() => {\n this.$message.error(this.$t('uploadHistory.copyFailed'));\n });\n },\n openLink(url) {\n window.open(url, '_blank');\n },\n handleImageError(e) {\n e.target.src = require('@/assets/404.png');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHistory.vue?vue&type=template&id=550797ce&scoped=true\"\nimport script from \"./UploadHistory.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHistory.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHistory.vue?vue&type=style&index=0&id=550797ce&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-550797ce\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"dialog-section\"\n};\nconst _hoisted_2 = {\n class: \"section-header\"\n};\nconst _hoisted_3 = {\n class: \"section-title\"\n};\nconst _hoisted_4 = {\n class: \"section-content\"\n};\nconst _hoisted_5 = {\n class: \"setting-item\"\n};\nconst _hoisted_6 = {\n class: \"setting-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_8 = {\n class: \"setting-label\"\n};\nconst _hoisted_9 = {\n class: \"setting-item\"\n};\nconst _hoisted_10 = {\n class: \"setting-label\"\n};\nconst _hoisted_11 = {\n class: \"setting-item\"\n};\nconst _hoisted_12 = {\n class: \"setting-label\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-header\"\n};\nconst _hoisted_19 = {\n class: \"section-title\"\n};\nconst _hoisted_20 = {\n class: \"section-content\"\n};\nconst _hoisted_21 = {\n class: \"setting-item\"\n};\nconst _hoisted_22 = {\n class: \"setting-label\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_30 = {\n class: \"setting-label\"\n};\nconst _hoisted_31 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_32 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_34 = {\n class: \"section-header\"\n};\nconst _hoisted_35 = {\n class: \"section-title\"\n};\nconst _hoisted_36 = {\n class: \"section-content\"\n};\nconst _hoisted_37 = {\n class: \"setting-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('uploadSettings.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadSettings.uploadChannel')), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"span\", _hoisted_6, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"telegram\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"telegram\",\n class: \"channel-icon channel-brand-telegram\"\n }), _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, \"TG\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"cfr2\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"cfr2\",\n class: \"channel-icon channel-brand-cfr2\"\n }), _cache[14] || (_cache[14] = _createElementVNode(\"span\", null, \"R2\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"s3\",\n class: \"channel-icon channel-brand-s3\"\n }), _cache[15] || (_cache[15] = _createElementVNode(\"span\", null, \"S3\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"discord\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"discord\",\n class: \"channel-icon channel-brand-discord\"\n }), _cache[16] || (_cache[16] = _createElementVNode(\"span\", null, \"DC\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"huggingface\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"huggingface\",\n class: \"channel-icon channel-brand-huggingface\"\n }), _cache[17] || (_cache[17] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"webdav\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"webdav\",\n class: \"channel-icon channel-brand-webdav\"\n }), _cache[18] || (_cache[18] = _createElementVNode(\"span\", null, \"WD\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.channelName')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.channelNameTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_select, {\n \"model-value\": $props.channelName,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.$emit('update:channelName', $event)),\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\", \"placeholder\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('uploadSettings.uploadDirectory')), 1), _createVNode(_component_el_input, {\n \"model-value\": $props.uploadFolder,\n \"onUpdate:modelValue\": $options.handleUploadFolderInput,\n placeholder: _ctx.$t('uploadSettings.uploadDirectoryPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"model-value\", \"onUpdate:modelValue\", \"placeholder\"])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"span\", _hoisted_12, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.autoSwitch')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.autoSwitchTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.autoRetry,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => _ctx.$emit('update:uploadNameType', $event)),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"default\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingDefault')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"index\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingIndex')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"origin\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"file-signature\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingOrigin')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"short\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"compress-alt\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingShort')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])])]), _createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('uploadSettings.filePreprocess')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.filePreprocessTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"span\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.convertToWebp')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.convertToWebpTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.convertToWebp,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.compressThreshold')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.compressThresholdTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[19] || (_cache[19] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createElementVNode(\"span\", _hoisted_30, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.expectedSize')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.expectedSizeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_31, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"span\", _hoisted_35, _toDisplayString(_ctx.$t('uploadSettings.serverCompress')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.serverCompressTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[11] || (_cache[11] = $event => $options.visible = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","import ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n methods: {\n handleUploadFolderInput(val) {\n // 自动补全前导 /\n if (val && !val.startsWith('/')) {\n val = '/' + val;\n }\n this.$emit('update:uploadFolder', val);\n }\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram'\n },\n channelName: {\n type: String,\n default: ''\n },\n currentChannelList: {\n type: Array,\n default: () => []\n },\n uploadFolder: {\n type: String,\n default: ''\n },\n autoRetry: {\n type: Boolean,\n default: true\n },\n uploadNameType: {\n type: String,\n default: 'default'\n },\n convertToWebp: {\n type: Boolean,\n default: false\n },\n customerCompress: {\n type: Boolean,\n default: true\n },\n compressBar: {\n type: Number,\n default: 5\n },\n compressQuality: {\n type: Number,\n default: 4\n },\n serverCompress: {\n type: Boolean,\n default: true\n }\n },\n emits: ['update:modelValue', 'update:uploadChannel', 'update:channelName', 'update:uploadFolder', 'update:autoRetry', 'update:uploadNameType', 'update:convertToWebp', 'update:customerCompress', 'update:compressBar', 'update:compressQuality', 'update:serverCompress'],\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=3eb5cfdc\"\nimport script from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UploadSettingsDialog.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 { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-list-item\"\n};\nconst _hoisted_2 = [\"href\"];\nconst _hoisted_3 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_7 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_8 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-item-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_Delete = _resolveComponent(\"Delete\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"a\", {\n href: $props.file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo($props.file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_3, [_createElementVNode(\"source\", {\n src: $props.file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_4), _cache[7] || (_cache[7] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage($props.file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: $props.file.url,\n onError: _cache[0] || (_cache[0] = $event => _ctx.$emit('preview-error', $props.file))\n }, null, 40, _hoisted_5)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename($props.file.name)), 1)]),\n _: 1\n })]), $props.file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_input, {\n modelValue: $props.file.finalURL,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $props.file.finalURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.mdURL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $props.file.mdURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_input, {\n modelValue: $props.file.htmlURL,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $props.file.htmlURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.ubbURL,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $props.file.ubbURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[11] || (_cache[11] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_el_progress, {\n percentage: $props.file.progreess,\n status: $props.file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: _cache[5] || (_cache[5] = $event => _ctx.$emit('copy', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })]), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: _cache[6] || (_cache[6] = $event => _ctx.$emit('remove', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })])])]);\n}","import { Link, Delete } from '@element-plus/icons-vue';\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mkv'];\nexport default {\n name: 'UploadFileItem',\n components: {\n Link,\n Delete\n },\n props: {\n file: {\n type: Object,\n required: true\n }\n },\n emits: ['copy', 'remove', 'preview-error'],\n computed: {\n urlSize() {\n return window.innerWidth < 768 ? 'small' : 'default';\n }\n },\n methods: {\n isImage(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return IMAGE_EXTENSIONS.includes(ext);\n },\n isVideo(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return VIDEO_EXTENSIONS.includes(ext);\n },\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) return filename;\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n const keepEnd = ext.length + 4;\n const keepStart = maxLength - keepEnd - 3;\n if (keepStart <= 0) return filename.substring(0, maxLength - 3) + '...';\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n selectAllText(event) {\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('uploadForm.copyFailed')\n });\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadFileItem.vue?vue&type=template&id=4848c2b0&scoped=true\"\nimport script from \"./UploadFileItem.vue?vue&type=script&lang=js\"\nexport * from \"./UploadFileItem.vue?vue&type=script&lang=js\"\n\nimport \"./UploadFileItem.vue?vue&type=style&index=0&id=4848c2b0&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-4848c2b0\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-form\"\n};\nconst _hoisted_2 = {\n class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_3 = [\"innerHTML\"];\nconst _hoisted_4 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_5 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_6 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_7 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_8 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_9 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_CameraFilled = _resolveComponent(\"CameraFilled\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_upload = _resolveComponent(\"el-upload\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_card = _resolveComponent(\"el-card\");\n const _component_List = _resolveComponent(\"List\");\n const _component_Checked = _resolveComponent(\"Checked\");\n const _component_Failed = _resolveComponent(\"Failed\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_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_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_UploadFileItem = _resolveComponent(\"UploadFileItem\");\n const _component_el_scrollbar = _resolveComponent(\"el-scrollbar\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"upload-card-wrapper\",\n onMousemove: _cache[0] || (_cache[0] = (...args) => $options.handleUploadCardMouseMove && $options.handleUploadCardMouseMove(...args)),\n onMouseleave: _cache[1] || (_cache[1] = (...args) => $options.handleUploadCardMouseLeave && $options.handleUploadCardMouseLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_2, null, 512), $props.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_el_upload, {\n key: 0,\n class: _normalizeClass([\"upload-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }]),\n drag: \"\",\n multiple: \"\",\n \"http-request\": $options.uploadFile,\n onSuccess: $options.handleSuccess,\n \"on-error\": $options.handleError,\n \"before-upload\": $options.beforeUpload,\n \"on-progress\": $options.handleProgress,\n \"file-list\": $data.fileList,\n \"show-file-list\": false\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, {\n class: _normalizeClass([\"el-icon--upload\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_CameraFilled)]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText')\n }, null, 10, _hoisted_3)]),\n _: 1\n }, 8, [\"class\", \"http-request\", \"onSuccess\", \"on-error\", \"before-upload\", \"on-progress\", \"file-list\"])) : _createCommentVNode(\"\", true)], 32), $props.uploadMethod === 'paste' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_createVNode(_component_el_card, {\n class: _normalizeClass([\"paste-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.pastedUrls,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.pastedUrls = $event),\n class: \"upload-card-textarea\",\n placeholder: _ctx.$t('upload.pasteUrlPlaceholder'),\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"placeholder\", \"rows\"]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_button, {\n class: \"paste-card-upload-button\",\n type: \"primary\",\n size: $options.pasteCardMethodButtonSize,\n onClick: $options.handleUploadPasteUrls\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteUploadBtn')), 1)]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createVNode(_component_el_radio_group, {\n modelValue: $data.pasteUploadMethod,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.pasteUploadMethod = $event),\n class: \"paste-card-method-group\",\n size: $options.pasteCardMethodButtonSize\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"save\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteSave')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"external\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteExternal')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"size\"])])]),\n _: 1\n }, 8, [\"class\"])])) : _createCommentVNode(\"\", true), _createVNode(_component_el_card, {\n class: _normalizeClass([\"upload-list-card\", {\n 'upload-list-busy': $data.fileList.length,\n 'is-uploading': $data.uploading\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-container\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, [_createVNode(_component_el_scrollbar, {\n onScroll: $options.handleScroll,\n ref: \"scrollContainer\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-dashboard\", {\n 'list-scrolled': $data.listScrolled\n }])\n }, [_createVNode(_component_el_text, {\n class: \"upload-list-dashboard-title\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_List)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadingCount + $options.waitingCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Checked)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadSuccessCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Failed)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadErrorCount), 1)]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_6, [_createElementVNode(\"div\", _hoisted_7, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.copyAll'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn\",\n onClick: _cache[4] || (_cache[4] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.retryFailed'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadForm.autoRetry')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.autoReUpload = $event),\n onChange: $options.handleAutoRetryChange,\n size: \"small\"\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.clearList'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n onClick: $options.clearFileList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearUploaded')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_9, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createBlock(_component_UploadFileItem, {\n key: file.name,\n file: file,\n onCopy: $options.handleCopy,\n onRemove: $options.handleRemove,\n onPreviewError: _cache[7] || (_cache[7] = f => f.url = require('@/assets/404.png'))\n }, null, 8, [\"file\", \"onCopy\", \"onRemove\"]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])], 2)]),\n _: 1\n }, 8, [\"class\"])]);\n}","/**\n * URL 构建工具函数\n * 用于生成各种格式的文件链接(原始链接、Markdown、HTML、BBCode)\n */\n\n/**\n * 根据 srcID 和文件名生成所有格式的 URL\n * @param {string} srcID - 文件资源 ID\n * @param {string} name - 文件名\n * @param {string} rootUrl - 链接前缀\n * @returns {{ finalURL: string, mdURL: string, htmlURL: string, ubbURL: string }}\n */\nexport function buildFileUrls(srcID, name, rootUrl) {\n const url = rootUrl + srcID\n return {\n finalURL: url,\n mdURL: `![${name}](${url})`,\n htmlURL: `\"${name}\"`,\n ubbURL: `[img]${url}[/img]`\n }\n}\n\n/**\n * 根据 selectedUrlForm 获取对应格式的 URL 值\n * @param {object} file - 文件对象,包含 finalURL/mdURL/htmlURL/ubbURL\n * @param {string} format - 格式类型:'url' | 'md' | 'html' | 'ubb'\n * @returns {string}\n */\nexport function getUrlByFormat(file, format) {\n const map = {\n url: file.finalURL,\n md: file.mdURL,\n html: file.htmlURL,\n ubb: file.ubbURL\n }\n return map[format] || file.finalURL\n}\n\n/**\n * 批量更新文件列表中的 URL(当自定义链接前缀变化时)\n * @param {Array} fileList - 文件列表\n * @param {string} rootUrl - 新的链接前缀\n */\nexport function updateFileListUrls(fileList, rootUrl) {\n fileList.forEach(item => {\n if (item.uploadChannel === 'external') {\n return\n }\n const urls = buildFileUrls(item.srcID, item.name, rootUrl)\n Object.assign(item, urls)\n })\n}\n","/**\n * SHA256 计算工具\n * 纯 JavaScript 实现的增量 SHA256 哈希算法,支持任意大小文件\n */\n\n// SHA256 常量\nconst K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n])\n\nconst rotr = (x, n) => (x >>> n) | (x << (32 - n))\n\nfunction processBlock(block, H) {\n const W = new Uint32Array(64)\n\n for (let i = 0; i < 16; i++) {\n W[i] = (block[i * 4] << 24) | (block[i * 4 + 1] << 16) | (block[i * 4 + 2] << 8) | block[i * 4 + 3]\n }\n\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3)\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10)\n W[i] = (W[i - 16] + s0 + W[i - 7] + s1) >>> 0\n }\n\n let [a, b, c, d, e, f, g, h] = H\n\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)\n const ch = (e & f) ^ (~e & g)\n const temp1 = (h + S1 + ch + K[i] + W[i]) >>> 0\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)\n const maj = (a & b) ^ (a & c) ^ (b & c)\n const temp2 = (S0 + maj) >>> 0\n\n h = g; g = f; f = e\n e = (d + temp1) >>> 0\n d = c; c = b; b = a\n a = (temp1 + temp2) >>> 0\n }\n\n H[0] = (H[0] + a) >>> 0\n H[1] = (H[1] + b) >>> 0\n H[2] = (H[2] + c) >>> 0\n H[3] = (H[3] + d) >>> 0\n H[4] = (H[4] + e) >>> 0\n H[5] = (H[5] + f) >>> 0\n H[6] = (H[6] + g) >>> 0\n H[7] = (H[7] + h) >>> 0\n}\n\n/**\n * 创建增量 SHA256 哈希器\n * @returns {{ update: (data: Uint8Array) => void, digest: () => string }}\n */\nexport function createSha256() {\n let H = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ])\n\n let buffer = new Uint8Array(64)\n let bufferLength = 0\n let totalLength = 0\n\n return {\n update(data) {\n totalLength += data.length\n let offset = 0\n\n if (bufferLength > 0) {\n const needed = 64 - bufferLength\n const toCopy = Math.min(needed, data.length)\n buffer.set(data.subarray(0, toCopy), bufferLength)\n bufferLength += toCopy\n offset = toCopy\n\n if (bufferLength === 64) {\n processBlock(buffer, H)\n bufferLength = 0\n }\n }\n\n while (offset + 64 <= data.length) {\n processBlock(data.subarray(offset, offset + 64), H)\n offset += 64\n }\n\n if (offset < data.length) {\n buffer.set(data.subarray(offset), 0)\n bufferLength = data.length - offset\n }\n },\n digest() {\n const bitLength = totalLength * 8\n\n // Padding\n buffer[bufferLength++] = 0x80\n\n if (bufferLength > 56) {\n buffer.fill(0, bufferLength, 64)\n processBlock(buffer, H)\n bufferLength = 0\n }\n\n buffer.fill(0, bufferLength, 56)\n\n // Length in bits (big-endian, 64-bit)\n const view = new DataView(buffer.buffer)\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false)\n view.setUint32(60, bitLength >>> 0, false)\n\n processBlock(buffer, H)\n\n // Convert to hex\n let hex = ''\n for (let i = 0; i < 8; i++) {\n hex += H[i].toString(16).padStart(8, '0')\n }\n return hex\n }\n }\n}\n\n/**\n * 计算文件的 SHA256 哈希\n * 使用增量哈希算法,支持任意大小文件\n * @param {File} file - 要计算哈希的文件\n * @returns {Promise} SHA256 哈希值(十六进制字符串)\n */\nexport async function computeSha256(file) {\n const sha256 = createSha256()\n\n const CHUNK_SIZE = 4 * 1024 * 1024 // 4MB chunks\n let offset = 0\n\n while (offset < file.size) {\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size))\n const buffer = await chunk.arrayBuffer()\n sha256.update(new Uint8Array(buffer))\n offset += CHUNK_SIZE\n\n // 每处理 20MB 打印一次进度\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`)\n }\n }\n\n return sha256.digest()\n}\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array-buffer.detached.js\";\nimport \"core-js/modules/es.array-buffer.transfer.js\";\nimport \"core-js/modules/es.array-buffer.transfer-to-fixed-length.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.json.parse.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-hex.js\";\nimport \"core-js/modules/esnext.uint8-array.to-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.to-hex.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport \"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 axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nimport { buildFileUrls, updateFileListUrls, getUrlByFormat } from '@/utils/upload/urlBuilder';\nimport { computeSha256 } from '@/utils/upload/sha256';\nimport UploadFileItem from '@/components/upload/UploadFileItem.vue';\nexport default {\n name: 'UploadForm',\n components: {\n UploadFileItem\n },\n props: {\n selectedUrlForm: {\n type: String,\n default: 'url',\n required: false\n },\n customerCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n compressQuality: {\n type: Number,\n default: 4,\n required: false\n },\n compressBar: {\n type: Number,\n default: 5,\n required: false\n },\n serverCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram',\n required: false\n },\n channelName: {\n type: String,\n default: '',\n required: false\n },\n uploadNameType: {\n type: String,\n default: 'default',\n required: false\n },\n useCustomUrl: {\n type: String,\n default: 'false',\n required: false\n },\n customUrlPrefix: {\n type: String,\n default: '',\n required: false\n },\n autoRetry: {\n type: Boolean,\n default: true,\n required: false\n },\n urlPrefix: {\n type: String,\n default: '',\n required: false\n },\n uploadMethod: {\n type: String,\n default: 'default',\n required: false\n },\n uploadFolder: {\n type: String,\n default: '',\n required: false\n },\n convertToWebp: {\n type: Boolean,\n default: false,\n required: false\n }\n },\n data() {\n return {\n fileList: [],\n uploading: false,\n maxUploading: 6,\n exceptionList: [],\n listScrolled: false,\n fileListLength: 0,\n uploadCount: 0,\n pastedUrls: '',\n pasteUploadMethod: 'save',\n // 失败文件自动重试相关\n autoReUpload: true,\n maxRetryCount: 10,\n // 最大重试次数\n retryTimer: null,\n // 自动重试定时器\n retryDelay: 12000,\n // 重试延迟时间(毫秒)\n // 批量上传并发控制\n uploadQueue: [],\n // 等待上传的文件队列\n activeUploads: 0,\n // 当前正在上传的文件数\n maxConcurrentUploads: 6,\n // 最大并发上传数\n // 取消上传控制\n abortControllers: new Map() // 存储每个文件的 AbortController\n };\n },\n watch: {\n fileList: {\n handler() {\n if (this.fileList.length > this.fileListLength) {\n this.$nextTick(() => {\n setTimeout(() => {\n if (this.$refs.scrollContainer) {\n // this.$refs.scrollContainer.setScrollTop(this.$refs.scrollContainer.wrapRef.scrollHeight) // 滚动到底部\n this.$refs.scrollContainer.setScrollTop(0); // 滚动到顶部\n }\n }, 100);\n });\n }\n this.fileListLength = this.fileList.length;\n },\n deep: true\n },\n useCustomUrl: {\n handler() {\n updateFileListUrls(this.fileList, this.rootUrl);\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n updateFileListUrls(this.fileList, this.rootUrl);\n }\n },\n immediate: true\n },\n autoReUpload(val) {\n this.$store.commit('setStoreAutoReUpload', val);\n }\n },\n computed: {\n ...mapGetters(['storeAutoReUpload']),\n uploadSuccessCount() {\n return this.fileList.filter(item => item.status === 'done' || item.status === 'success').length;\n },\n uploadErrorCount() {\n return this.fileList.filter(item => item.status === 'exception').length;\n },\n uploadingCount() {\n return this.fileList.filter(item => item.status === 'uploading').length;\n },\n waitingCount() {\n return this.uploadQueue.length;\n },\n urlSize() {\n // 移动端为small\n return window.innerWidth < 768 ? 'small' : 'default';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n pasteCardMethodButtonSize() {\n if (this.fileList.length) {\n return 'small';\n } else {\n return window.innerWidth < 768 ? 'small' : 'medium';\n }\n }\n },\n mounted() {\n document.addEventListener('paste', this.handlePaste);\n this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\n // 清理状态\n this.uploadQueue = [];\n this.fileList = [];\n this.activeUploads = 0;\n },\n methods: {\n // 文件名中间截断,保留前缀和扩展名\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) {\n return filename;\n }\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n // 保留扩展名和部分前后缀\n const keepEnd = ext.length + 4; // 扩展名 + 4个字符\n const keepStart = maxLength - keepEnd - 3; // 3个字符留给...\n if (keepStart <= 0) {\n return filename.substring(0, maxLength - 3) + '...';\n }\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n uploadFile(file) {\n // 如果fileList中不存在该文件,说明已被删除,直接返回\n if (!this.fileList.find(item => item.uid === file.file.uid)) {\n return;\n }\n\n // 并发控制:如果当前上传数已达上限,加入队列等待\n if (this.activeUploads >= this.maxConcurrentUploads) {\n this.uploadQueue.push(file);\n const waitingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (waitingItem) waitingItem.status = 'waiting';\n return;\n }\n\n // 开始上传,增加计数\n this.activeUploads++;\n const uploadingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (uploadingItem) uploadingItem.status = 'uploading';\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n const uploadChannel = fileItem?.uploadChannel || this.uploadChannel;\n\n // 如果上传渠道为外链,直接使用外链上传\n if (uploadChannel === 'external') {\n this.uploadSingleFile(file);\n return;\n }\n\n // HuggingFace 渠道:根据文件大小选择上传方式\n // 小文件(<20MB):通过 CF Workers 代理上传\n // 大文件(>=20MB):前端直传到 HuggingFace S3,绕过 CF Workers 限制\n if (uploadChannel === 'huggingface') {\n const HF_DIRECT_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size >= HF_DIRECT_THRESHOLD) {\n this.uploadToHuggingFaceDirect(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // Discord 渠道:限制 10MB,超过 9MB 就用分块上传(留安全余量)\n if (uploadChannel === 'discord') {\n const DISCORD_CHUNK_THRESHOLD = 9 * 1024 * 1024; // 9MB\n if (file.file.size > DISCORD_CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // 其他渠道,检查文件大小,决定是否使用分块上传\n const CHUNK_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size > CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n },\n // 处理上传队列中的下一个文件\n processUploadQueue() {\n // 如果队列为空或已达并发上限,不处理\n if (this.uploadQueue.length === 0 || this.activeUploads >= this.maxConcurrentUploads) {\n return;\n }\n\n // 从队列中取出下一个文件并上传\n const nextFile = this.uploadQueue.shift();\n if (nextFile && this.fileList.find(item => item.uid === nextFile.file.uid)) {\n this.uploadFile(nextFile);\n } else {\n // 如果文件已被删除,继续处理下一个\n this.processUploadQueue();\n }\n },\n // 上传完成后的清理工作(成功或失败都调用)\n onUploadComplete() {\n this.activeUploads = Math.max(0, this.activeUploads - 1);\n\n // 处理队列中的下一个文件\n this.processUploadQueue();\n\n // 更新上传状态\n if (this.activeUploads === 0 && this.uploadQueue.length === 0) {\n this.uploading = false;\n }\n },\n // 单文件上传\n async uploadSingleFile(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const needServerCompress = fileItem.serverCompress;\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const formData = new FormData();\n formData.append('file', file.file);\n if (uploadChannel === 'external') {\n formData.append('url', file.file.url);\n }\n\n // HuggingFace 渠道:在前端预计算 SHA256,避免后端 CPU 超时\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace upload...');\n const sha256 = await computeSha256(file.file);\n formData.append('sha256', sha256);\n console.log('SHA256 computed:', sha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n // 继续上传,让后端计算(可能会超时)\n }\n }\n axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder),\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round(progressEvent.loaded / progressEvent.total * 100);\n file.onProgress({\n percent: percentCompleted,\n file: file.file\n });\n }\n }).then(res => {\n file.onSuccess(res, file.file);\n }).catch(err => {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('上传已取消:', file.file.name);\n return;\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误(如 ERR_HTTP2_PROTOCOL_ERROR),也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n }).finally(() => {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n });\n },\n // 分块上传\n async uploadFileInChunks(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n\n // Discord 使用 9MB 分块(留安全余量,Discord 限制 10MB)\n // Telegram 使用 16MB 分块(TG Bot getFile 下载限制 20MB,留 4MB 安全余量)\n // 其他渠道使用 16MB 分块\n const CHUNK_SIZE = uploadChannel === 'discord' ? 9 * 1024 * 1024 // 9MB for Discord\n : 16 * 1024 * 1024; // 16MB for Telegram and others (TG getFile limit: 20MB)\n\n const fileSize = file.file.size;\n const fileType = file.file.type || 'application/octet-stream';\n const totalChunks = Math.ceil(fileSize / CHUNK_SIZE);\n const needServerCompress = fileItem.serverCompress;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // HuggingFace 渠道:在前端预计算 SHA256\n let precomputedSha256 = null;\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace chunked upload...');\n precomputedSha256 = await computeSha256(file.file);\n console.log('SHA256 computed:', precomputedSha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n }\n }\n try {\n // 第一步:初始化分块上传,获取uploadId\n const initFormData = new FormData();\n initFormData.append('originalFileName', file.file.name);\n initFormData.append('originalFileType', fileType);\n initFormData.append('totalChunks', totalChunks.toString());\n const initResponse = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error(this.$t('uploadForm.chunkInitFailed') + ': ' + initResponse.data.message);\n }\n const uploadId = initResponse.data.uploadId;\n console.log('分块上传初始化成功,uploadId:', uploadId);\n\n // 记录 totalChunks 和 uploadId 到文件项,用于后续清理\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem) {\n fileItem.totalChunks = totalChunks;\n fileItem.uploadId = uploadId;\n }\n\n // 第二步:并发上传所有分块\n const maxConcurrency = 3; // 最大并发数\n const chunkProgress = new Array(totalChunks).fill(0);\n let nextChunkIndex = 0;\n let hasError = false;\n let errorMsg = '';\n let isCancelled = false; // 标记是否被取消\n\n const uploadChunk = async chunkIndex => {\n if (hasError || isCancelled) return;\n const start = chunkIndex * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, fileSize);\n const chunk = file.file.slice(start, end);\n const formData = new FormData();\n formData.append('file', chunk, `${file.file.name}.part${chunkIndex.toString().padStart(3, '0')}`);\n formData.append('chunkIndex', chunkIndex.toString());\n formData.append('totalChunks', totalChunks.toString());\n formData.append('uploadId', uploadId);\n formData.append('originalFileName', file.file.name);\n formData.append('originalFileType', fileType);\n let retryCount = 0;\n const maxRetries = 3;\n while (retryCount < maxRetries) {\n if (hasError || isCancelled) return;\n try {\n await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true',\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n if (hasError || isCancelled) return;\n const percent = Math.round(progressEvent.loaded / progressEvent.total * 100);\n chunkProgress[chunkIndex] = percent;\n const totalPercent = Math.round(chunkProgress.reduce((a, b) => a + b, 0) / totalChunks);\n file.onProgress({\n percent: totalPercent,\n file: file.file\n });\n }\n });\n return; // Success\n } catch (err) {\n // 如果是取消操作,直接返回\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n isCancelled = true;\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n retryCount++;\n console.warn(`分块 ${chunkIndex + 1}/${totalChunks} 上传失败 (重试 ${retryCount}/${maxRetries}):`, err);\n if (retryCount >= maxRetries) {\n hasError = true;\n errorMsg = `分块 ${chunkIndex + 1}/${totalChunks} 上传失败: ${err.message}`;\n throw new Error(errorMsg);\n }\n // 等待后重试\n await new Promise(resolve => setTimeout(resolve, 2000 * retryCount));\n }\n }\n };\n\n // 创建并发池\n const pool = [];\n for (let i = 0; i < maxConcurrency; i++) {\n pool.push((async () => {\n while (nextChunkIndex < totalChunks && !hasError && !isCancelled) {\n const currentIndex = nextChunkIndex++;\n try {\n await uploadChunk(currentIndex);\n } catch (e) {\n if (!isCancelled) {\n hasError = true;\n errorMsg = e.message;\n }\n break;\n }\n }\n })());\n }\n await Promise.all(pool);\n\n // 如果被取消,直接返回\n if (isCancelled) {\n console.log('分块上传已取消,跳过合并步骤');\n return;\n }\n if (hasError) {\n throw new Error(errorMsg || this.$t('uploadForm.uploadError'));\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.chunkMerging'),\n duration: 0 // 不自动关闭\n });\n const mergeFormData = new FormData();\n mergeFormData.append('uploadId', uploadId);\n mergeFormData.append('totalChunks', totalChunks.toString());\n mergeFormData.append('originalFileName', file.file.name);\n mergeFormData.append('originalFileType', fileType);\n // HuggingFace 渠道:传递预计算的 SHA256\n if (precomputedSha256) {\n mergeFormData.append('sha256', precomputedSha256);\n }\n const response = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true&merge=true',\n method: 'post',\n data: mergeFormData,\n withAuthCode: true\n });\n\n // 关闭提示\n this.$message.closeAll();\n\n // 同步处理完成\n file.onSuccess(response, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n console.error('分块上传失败:', err);\n\n // 如果有uploadId,清理相关资源\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem && fileItem.uploadId) {\n this.cleanupUploadResources(fileItem.uploadId, fileItem.totalChunks).then(() => {\n console.log(`已清理分块上传失败的资源: ${fileItem.uploadId}`);\n }).catch(cleanupError => {\n console.warn('清理分块上传失败资源时出错:', cleanupError);\n });\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误,也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n handleRemove(file) {\n // 如果文件正在上传,取消上传\n if (this.abortControllers.has(file.uid)) {\n this.abortControllers.get(file.uid).abort();\n this.abortControllers.delete(file.uid);\n }\n // 从上传队列中移除(如果在等待中)\n this.uploadQueue = this.uploadQueue.filter(item => item.file.uid !== file.uid);\n // 从文件列表中移除\n this.fileList = this.fileList.filter(item => item.uid !== file.uid);\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.deleted', {\n name: this.truncateFilename(file.name)\n })\n });\n },\n // 清理上传资源\n async cleanupUploadResources(uploadId, totalChunks = 0) {\n try {\n await axios({\n url: `/upload?cleanup=true&uploadId=${uploadId}&totalChunks=${totalChunks}`,\n method: 'get',\n withAuthCode: true,\n timeout: 5000\n });\n console.log(`清理上传资源成功: ${uploadId}`);\n } catch (error) {\n console.warn('清理上传资源失败:', error);\n }\n },\n handleSuccess(response, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n try {\n // 对上传渠道为外链的,不修改链接\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n if (uploadChannel !== 'external') {\n // 从response.data[0].src中去除/file/前缀\n const srcID = response.data[0].src.replace('/file/', '');\n fileItem.url = `${window.location.protocol}//${window.location.host}/file/` + srcID;\n const urls = buildFileUrls(srcID, file.name, this.rootUrl);\n Object.assign(fileItem, urls);\n fileItem.srcID = srcID;\n }\n fileItem.progreess = 100;\n fileItem.status = 'success';\n\n // Save to history\n this.saveToHistory(fileItem);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.uploadSuccess', {\n name: this.truncateFilename(file.name)\n })\n });\n setTimeout(() => {\n const item = this.fileList.find(item => item.uid === file.uid);\n if (item) item.status = 'done';\n }, 1000);\n } catch (error) {\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n saveToHistory(fileItem) {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n const newRecord = {\n name: fileItem.name,\n url: fileItem.finalURL,\n time: Date.now(),\n type: fileItem.name.split('.').pop().toLowerCase()\n };\n history.push(newRecord);\n localStorage.setItem('uploadHistory', JSON.stringify(history));\n } catch (e) {\n console.error('Failed to save history', e);\n }\n },\n handleError(err, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n\n // 如果开启了自动重试,安排自动重试\n if (this.autoReUpload) {\n this.scheduleAutoRetry();\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n handleCopy(file) {\n const status = this.fileList.find(item => item.uid === file.uid).status;\n if (status !== 'done' && status !== 'success') {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.fileNotUploaded')\n });\n return;\n }\n navigator.clipboard.writeText(getUrlByFormat(file, this.selectedUrlForm));\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n },\n beforeUpload(file) {\n return new Promise(async (resolve, reject) => {\n let processedFile = file;\n\n // WebP 转换:在压缩之前进行\n // 条件:1.开启WebP转换 2.文件类型为图片 3.不是WebP/GIF/SVG格式\n const canConvertToWebp = this.convertToWebp && file.type.includes('image') && !file.type.includes('webp') && !file.type.includes('gif') && !file.type.includes('svg');\n if (canConvertToWebp) {\n try {\n const convertedFile = await this.convertImageToWebp(file);\n if (convertedFile) {\n processedFile = convertedFile;\n console.log(`WebP转换成功: ${file.name} -> ${convertedFile.name}, 大小: ${(file.size / 1024).toFixed(1)}KB -> ${(convertedFile.size / 1024).toFixed(1)}KB`);\n }\n } catch (err) {\n console.warn('WebP转换失败,使用原文件:', err);\n // 转换失败,继续使用原文件\n }\n }\n\n // 客户端压缩条件:1.文件类型为图片 2.开启客户端压缩,且文件大小大于压缩阈值\n const needCustomCompress = processedFile.type.includes('image') && this.customerCompress && processedFile.size / 1024 / 1024 > this.compressBar;\n const isLtLim = processedFile.size / 1024 / 1024 <= 1024 || this.uploadChannel !== 'telegram';\n const pushFileToQueue = (file, serverCompress) => {\n const fileUrl = URL.createObjectURL(file);\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: fileUrl,\n finalURL: '',\n mdURL: '',\n htmlURL: '',\n ubbURL: '',\n srcID: '',\n status: 'uploading',\n progreess: 0,\n serverCompress: serverCompress,\n retryCount: 0\n });\n resolve(file);\n };\n if (needCustomCompress) {\n //尝试压缩图片\n imageConversion.compressAccurately(processedFile, 1024 * this.compressQuality).then(res => {\n //如果压缩后大于1024MB,且上传渠道为telegram,则不上传\n if (res.size / 1024 / 1024 > 1024 && this.uploadChannel === 'telegram') {\n this.$message.error(this.$t('uploadForm.compressedFileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n this.uploading = true;\n //将res包装成新的file\n const newFile = new File([res], processedFile.name, {\n type: res.type\n });\n newFile.uid = file.uid;\n const myUploadCount = this.uploadCount++;\n\n //开启服务端压缩条件:1.开启服务端压缩 2.文件大小小于10MB 3.上传渠道为Telegram\n const needServerCompress = this.serverCompress && newFile.size / 1024 / 1024 < 10 && this.uploadChannel === 'telegram';\n if (myUploadCount === 0) {\n pushFileToQueue(newFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(newFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n }).catch(err => {\n this.$message.error(this.$t('uploadForm.compressFailedCannotUpload', {\n name: processedFile.name\n }));\n reject(err);\n });\n } else if (isLtLim) {\n this.uploading = true;\n const myUploadCount = this.uploadCount++;\n\n // 开启服务端压缩条件:1.上传渠道为Telegram 2.开启服务端压缩 3.如果为图片,则文件大小小于10MB,否则不限制大小\n const needServerCompress = this.uploadChannel === 'telegram' && this.serverCompress && (processedFile.type.includes('image') ? processedFile.size / 1024 / 1024 < 10 : true);\n if (myUploadCount === 0) {\n pushFileToQueue(processedFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(processedFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n } else {\n this.$message.error(this.$t('uploadForm.fileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n });\n },\n handleProgress(event) {\n const fileItem = this.fileList.find(item => item.uid === event.file.uid);\n if (fileItem) {\n fileItem.progreess = event.percent;\n }\n },\n copyAll() {\n const urls = this.fileList.filter(item => item.status === 'done' || item.status === 'success').map(item => getUrlByFormat(item, this.selectedUrlForm)).join('\\n');\n navigator.clipboard.writeText(urls);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copyAllSuccess')\n });\n },\n clearFileList() {\n if (this.fileList.length > 0) {\n // 取消所有正在上传的文件\n this.abortControllers.forEach((controller, uid) => {\n controller.abort();\n });\n this.abortControllers.clear();\n // 清空上传队列\n this.uploadQueue = [];\n // 清空文件列表\n this.fileList = [];\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.fileListCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.fileListEmpty')\n });\n }\n },\n clearSuccessList() {\n if (this.uploadSuccessCount > 0) {\n this.fileList = this.fileList.filter(item => item.status !== 'done' && item.status !== 'success');\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.successFilesCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.successFilesEmpty')\n });\n }\n },\n handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {\n return;\n }\n const items = event.clipboardData.items;\n if (items.length > 0) {\n this.uploadFromUrl(items);\n }\n },\n handleUploadPasteUrls() {\n // 用于上传在上传文本框中粘贴的外链\n const urls = this.pastedUrls.split('\\n');\n // 处理空行和首尾空字符,链接须符合URL规范\n const validUrls = urls.map(url => url.trim()).filter(url => url !== '').filter(url => /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/.test(url));\n\n // 根据粘贴上传方式进行上传\n if (this.pasteUploadMethod === 'save') {\n // 正常上传\n this.uploadFromUrl(validUrls.map(url => {\n return {\n kind: 'string',\n getAsString: callback => {\n callback(url);\n }\n };\n }));\n } else if (this.pasteUploadMethod === 'external') {\n // 仅保存外链,使用 external 渠道上传\n for (let i = 0; i < validUrls.length; i++) {\n const url = validUrls[i];\n const fileName = url.split('/').pop();\n const mdUrl = `![${fileName}](${url})`;\n const htmlUrl = `\"${fileName}\"`;\n const ubbUrl = `[img]${url}[/img]`;\n // 将 url 作为文件内容,文件名为 URL 的最后一部分\n const file = new File([], url.split('/').pop(), {\n type: 'text/plain'\n });\n file.uid = Date.now() + i;\n file.url = url;\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: url,\n finalURL: url,\n mdURL: mdUrl,\n htmlURL: htmlUrl,\n ubbURL: ubbUrl,\n srcID: url,\n status: 'uploading',\n progreess: 0,\n serverCompress: false,\n uploadChannel: 'external',\n retryCount: 0\n });\n // 上传\n this.uploadFile({\n file: file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }\n },\n uploadFromUrl(items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'file') {\n const file = items[i].getAsFile();\n // 允许上传任意类型的文件\n file.uid = Date.now() + i;\n //接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else if (items[i].kind === 'string') {\n items[i].getAsString(text => {\n const urlPattern = /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/;\n let fileName = '';\n if (urlPattern.test(text)) {\n axios.post('/api/fetchRes', {\n url: text\n }, {\n responseType: 'blob',\n withAuthCode: true\n }).then(response => {\n const contentType = response.headers['content-type'];\n if (response.status == 200) {\n // 提取文件名\n const disposition = response.headers['content-disposition'];\n if (disposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const filenameStarRegex = /filename\\*\\s*=\\s*UTF-8''([^;\\n]*)/; // 处理 filename*\n\n let matches = filenameRegex.exec(disposition);\n if (matches != null && matches[1]) {\n fileName = matches[1].replace(/['\"]/g, '');\n // 尝试解码\n try {\n fileName = decodeURIComponent(fileName);\n } catch (e) {\n fileName = '';\n }\n }\n if (fileName === '') {\n matches = filenameStarRegex.exec(disposition); // 尝试匹配 filename*\n if (matches != null && matches[1]) {\n fileName = decodeURIComponent(matches[1]);\n }\n }\n }\n // 尝试从URL中提取文件名\n if (fileName === '') {\n const url = new URL(text);\n fileName = url.pathname.split('/').pop();\n }\n // 未提取到文件名,使用默认文件名\n if (fileName === '') {\n // 获取文件后缀\n const url = new URL(text);\n let extension = url.pathname.split('.').pop();\n // 未能从URL提取有效后缀,使用bin作为默认后缀\n if (!extension || extension === '' || extension.length > 10) {\n extension = 'bin';\n }\n fileName = 'PastedFile' + Date.now() + i + '.' + extension;\n }\n\n // 读取文件内容\n const blob = response.data;\n const file = new File([blob], fileName, {\n type: blob.type\n });\n file.uid = Date.now() + i;\n // 接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else {\n throw new Error('URL地址请求失败');\n }\n }).catch(error => {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.urlRequestFailed')\n });\n });\n }\n });\n }\n }\n },\n handleScroll(event) {\n this.listScrolled = event.scrollTop > 0 && this.fileList.length > 0;\n },\n retryError() {\n if (this.exceptionList.length > 0) {\n this.retryFailedFiles(this.exceptionList);\n this.exceptionList = [];\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.noFailedFiles')\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? this.$t('uploadForm.autoRetryOn') : this.$t('uploadForm.autoRetryOff')\n });\n\n // 如果开启自动重试且有失败文件,立即开始重试\n if (val && this.exceptionList.length > 0) {\n this.scheduleAutoRetry();\n }\n },\n retryFailedFiles(files) {\n files.forEach(file => {\n const retryCount = file.retryCount || 0;\n if (retryCount < this.maxRetryCount) {\n file.retryCount = retryCount + 1;\n this.uploadFile({\n file: file.file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n } else {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.maxRetryReached', {\n name: file.name,\n max: this.maxRetryCount\n })\n });\n }\n });\n },\n scheduleAutoRetry() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n this.retryTimer = setTimeout(() => {\n if (this.autoReUpload && this.exceptionList.length > 0) {\n const filesToRetry = [...this.exceptionList];\n this.exceptionList = [];\n this.retryFailedFiles(filesToRetry);\n }\n }, this.retryDelay);\n },\n // HuggingFace 大文件直传(绕过 CF Workers 限制)\n // 流程:前端计算 SHA256 → 获取 S3 上传 URL → 直传到 S3 → 提交文件引用\n async uploadToHuggingFaceDirect(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n try {\n console.log('=== HuggingFace Direct Upload ===');\n console.log('File:', file.file.name, 'Size:', file.file.size);\n\n // 1. 计算 SHA256\n file.onProgress({\n percent: 5,\n file: file.file\n });\n console.log('Computing SHA256...');\n const sha256 = await computeSha256(file.file);\n console.log('SHA256:', sha256);\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 2. 获取文件样本(前512字节的base64)\n const sampleBytes = new Uint8Array(await file.file.slice(0, 512).arrayBuffer());\n const fileSample = btoa(String.fromCharCode(...sampleBytes));\n\n // 3. 获取 LFS 上传 URL\n file.onProgress({\n percent: 10,\n file: file.file\n });\n console.log('Getting LFS upload URL...');\n const uploadInfoRes = await axios({\n url: '/upload/huggingface/getUploadUrl',\n method: 'post',\n data: {\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n sha256,\n fileSample,\n channelName: this.channelName,\n // 传递指定的渠道名称\n uploadNameType: this.uploadNameType,\n uploadFolder: this.uploadFolder\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!uploadInfoRes.data.success) {\n throw new Error(uploadInfoRes.data.error || 'Failed to get upload URL');\n }\n const uploadInfo = uploadInfoRes.data;\n console.log('Upload info:', uploadInfo);\n\n // 检查文件是否已存在\n if (uploadInfo.alreadyExists) {\n console.log('File already exists in LFS, skipping upload');\n file.onProgress({\n percent: 90,\n file: file.file\n });\n } else if (uploadInfo.needsLfs && uploadInfo.uploadAction) {\n // 4. 直接上传到 S3\n const {\n href,\n header\n } = uploadInfo.uploadAction;\n if (header?.chunk_size) {\n // 分片上传\n await this.uploadToHuggingFaceMultipart(file, uploadInfo, abortController);\n } else {\n // 基本上传\n console.log('Uploading to S3 (basic)...');\n const uploadRes = await fetch(href, {\n method: 'PUT',\n headers: header || {},\n body: file.file,\n signal: abortController.signal\n });\n if (!uploadRes.ok) {\n const error = await uploadRes.text();\n throw new Error(`S3 upload failed: ${uploadRes.status} - ${error}`);\n }\n console.log('S3 upload complete');\n }\n }\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 5. 提交文件引用\n file.onProgress({\n percent: 95,\n file: file.file\n });\n console.log('Committing file...');\n const commitRes = await axios({\n url: '/upload/huggingface/commitUpload',\n method: 'post',\n data: {\n fullId: uploadInfo.fullId,\n filePath: uploadInfo.filePath,\n sha256,\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n channelName: uploadInfo.channelName\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!commitRes.data.success) {\n throw new Error(commitRes.data.error || 'Failed to commit file');\n }\n console.log('Upload complete:', commitRes.data);\n // 转换响应格式以匹配 handleSuccess 期望的格式\n const formattedResponse = {\n data: [{\n src: commitRes.data.src\n }]\n };\n file.onSuccess(formattedResponse, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED' || err.name === 'AbortError') {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n console.error('HuggingFace direct upload error:', err);\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n // HuggingFace 分片上传到 S3\n async uploadToHuggingFaceMultipart(file, uploadInfo, abortController) {\n const {\n uploadAction\n } = uploadInfo;\n const {\n href: completionUrl,\n header\n } = uploadAction;\n const chunkSize = parseInt(header.chunk_size);\n\n // 获取所有分片的上传 URL\n const parts = Object.keys(header).filter(key => /^[0-9]+$/.test(key));\n console.log(`Multipart upload: ${parts.length} parts, chunk size: ${chunkSize}`);\n const completeParts = [];\n const totalParts = parts.length;\n for (const part of parts) {\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n const index = parseInt(part) - 1;\n const start = index * chunkSize;\n const end = Math.min(start + chunkSize, file.file.size);\n const chunk = file.file.slice(start, end);\n console.log(`Uploading part ${part}/${totalParts}`);\n const response = await fetch(header[part], {\n method: 'PUT',\n body: chunk,\n signal: abortController ? abortController.signal : undefined\n });\n if (!response.ok) {\n throw new Error(`Failed to upload part ${part}: ${response.status}`);\n }\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag for part ${part}`);\n }\n completeParts.push({\n partNumber: parseInt(part),\n etag\n });\n\n // 更新进度(10% - 90%)\n const progress = 10 + Math.round(parseInt(part) / totalParts * 80);\n file.onProgress({\n percent: progress,\n file: file.file\n });\n }\n\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n\n // 完成分片上传\n console.log('Completing multipart upload...');\n const completeResponse = await fetch(completionUrl, {\n method: 'POST',\n headers: {\n 'Accept': 'application/vnd.git-lfs+json',\n 'Content-Type': 'application/vnd.git-lfs+json'\n },\n body: JSON.stringify({\n oid: uploadInfo.oid,\n parts: completeParts\n }),\n signal: abortController ? abortController.signal : undefined\n });\n if (!completeResponse.ok) {\n const error = await completeResponse.text();\n throw new Error(`Multipart complete failed: ${completeResponse.status} - ${error}`);\n }\n console.log('Multipart upload complete');\n },\n // 将图片转换为 WebP 格式\n async convertImageToWebp(file) {\n return new Promise((resolve, reject) => {\n // 不支持转换的格式直接返回 null\n if (file.type.includes('gif') || file.type.includes('svg') || file.type.includes('webp')) {\n resolve(null);\n return;\n }\n const img = new Image();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n canvas.toBlob(blob => {\n if (blob) {\n // 修改文件名:将原扩展名替换为 .webp\n const originalName = file.name;\n const lastDotIndex = originalName.lastIndexOf('.');\n const newName = lastDotIndex > 0 ? originalName.substring(0, lastDotIndex) + '.webp' : originalName + '.webp';\n const webpFile = new File([blob], newName, {\n type: 'image/webp'\n });\n webpFile.uid = file.uid;\n resolve(webpFile);\n } else {\n reject(new Error('WebP 转换失败'));\n }\n\n // 清理\n URL.revokeObjectURL(img.src);\n }, 'image/webp', 0.92); // 0.92 质量参数,平衡质量和大小\n };\n img.onerror = () => {\n URL.revokeObjectURL(img.src);\n reject(new Error(this.$t('uploadForm.imageLoadFailed')));\n };\n img.src = URL.createObjectURL(file);\n });\n },\n // 拖拽上传卡片鼠标移动事件 - 悬浮光斑效果\n handleUploadCardMouseMove(e) {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n glow.style.opacity = '1';\n glow.style.left = x + 'px';\n glow.style.top = y + 'px';\n },\n // 拖拽上传卡片鼠标离开事件\n handleUploadCardMouseLeave() {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n glow.style.opacity = '0';\n }\n },\n beforeDestroy() {\n // 清理定时器\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadForm.vue?vue&type=template&id=be7542f0&scoped=true\"\nimport script from \"./UploadForm.vue?vue&type=script&lang=js\"\nexport * from \"./UploadForm.vue?vue&type=script&lang=js\"\n\nimport \"./UploadForm.vue?vue&type=style&index=0&id=be7542f0&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-be7542f0\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-suggestion-input\",\n ref: \"wrapperRef\"\n};\nconst _hoisted_2 = {\n class: \"suggestion-dropdown\"\n};\nconst _hoisted_3 = {\n class: \"suggestion-list\"\n};\nconst _hoisted_4 = [\"title\", \"onMousedown\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_input, {\n ref: \"inputRef\",\n modelValue: $options.inputValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $options.inputValue = $event),\n placeholder: $props.placeholder,\n onFocus: $options.handleFocus,\n onBlur: $options.handleBlur,\n onInput: $options.handleInput\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onInput\"]), _withDirectives(_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"ul\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, (item, index) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: \"suggestion-item\",\n title: item.value,\n onMousedown: _withModifiers($event => $options.selectItem(item), [\"prevent\"])\n }, _toDisplayString(item.value), 41, _hoisted_4);\n }), 128))])], 512), [[_vShow, $data.dropdownVisible && $data.suggestions.length > 0]])], 512);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport axios from '@/utils/axios';\nexport default {\n name: 'DirectorySuggestionInput',\n props: {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'focus', 'blur', 'select'],\n data() {\n return {\n directoryTreeRoot: null,\n directoryTreeLoaded: false,\n directoryTreeLoading: false,\n directoryChildrenMap: {},\n focusTime: null,\n dropdownVisible: false,\n isFocused: false,\n suggestions: []\n };\n },\n computed: {\n inputValue: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n }\n },\n watch: {\n modelValue() {\n // 外部修改 modelValue 时也刷新建议\n if (this.isFocused) {\n this.refreshSuggestions();\n }\n }\n },\n methods: {\n handleFocus() {\n this.isFocused = true;\n this.focusTime = Date.now();\n this.ensureDirectoryTreeLoaded();\n this.$emit('focus');\n setTimeout(() => {\n if (this.isFocused) {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n }\n }, 500);\n },\n handleBlur() {\n this.isFocused = false;\n this.dropdownVisible = false;\n this.$emit('blur');\n },\n handleInput(val) {\n // val 是 el-input @input 事件传来的最新值\n this.$nextTick(() => {\n this.refreshSuggestions();\n if (this.isFocused) {\n this.dropdownVisible = true;\n }\n });\n },\n selectItem(item) {\n const path = item.value;\n this.inputValue = path;\n this.$emit('select', path);\n const normalizedPath = this.normalizeDirectoryPath(path);\n const children = this.directoryChildrenMap[normalizedPath];\n if (children && children.length > 0) {\n this.$nextTick(() => {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n this.$refs.inputRef?.focus();\n });\n } else {\n this.dropdownVisible = false;\n }\n },\n refreshSuggestions() {\n this.suggestions = this.getDirectorySuggestions(this.modelValue || '');\n },\n normalizeDirectoryPath(path) {\n if (!path) return '/';\n let normalized = path;\n if (!normalized.startsWith('/')) normalized = '/' + normalized;\n if (normalized !== '/' && !normalized.endsWith('/')) normalized += '/';\n return normalized;\n },\n buildDirectoryChildrenMap(treeRoot) {\n const map = {};\n const walk = node => {\n const parentPath = this.normalizeDirectoryPath(node.path);\n const children = Array.isArray(node.children) ? node.children : [];\n map[parentPath] = children.map(child => ({\n name: child.name,\n path: this.normalizeDirectoryPath(child.path)\n }));\n children.forEach(walk);\n };\n walk(treeRoot);\n this.directoryChildrenMap = map;\n },\n async ensureDirectoryTreeLoaded() {\n if (this.directoryTreeLoaded || this.directoryTreeLoading) return;\n this.directoryTreeLoading = true;\n try {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n const tree = response?.data?.tree;\n if (tree) {\n this.directoryTreeRoot = tree;\n this.buildDirectoryChildrenMap(tree);\n this.directoryTreeLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load directory tree for autocomplete:', error);\n } finally {\n this.directoryTreeLoading = false;\n }\n },\n parseDirectoryQuery(value) {\n const normalizedInput = value && value.startsWith('/') ? value : `/${value || ''}`;\n const raw = normalizedInput.slice(1);\n const parts = raw.split('/');\n const segmentInput = parts[parts.length - 1] || '';\n const parentSegments = parts.slice(0, -1).filter(Boolean);\n const parentPath = parentSegments.length > 0 ? `/${parentSegments.join('/')}/` : '/';\n return {\n segmentInput,\n parentPath\n };\n },\n getDirectorySuggestions(queryString) {\n const {\n segmentInput,\n parentPath\n } = this.parseDirectoryQuery(queryString);\n const parentChildren = this.directoryChildrenMap[parentPath] || [];\n if (!segmentInput) {\n return parentChildren.slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n const keyword = segmentInput.toLowerCase();\n return parentChildren.filter(item => item.name.toLowerCase().startsWith(keyword)).slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectorySuggestionInput.vue?vue&type=template&id=0ff63416&scoped=true\"\nimport script from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\nexport * from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\n\nimport \"./DirectorySuggestionInput.vue?vue&type=style&index=0&id=0ff63416&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-0ff63416\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n class: \"toolbar-manage\"\n};\nconst _hoisted_4 = {\n class: \"toolbar\"\n};\nconst _hoisted_5 = {\n class: \"header\"\n};\nconst _hoisted_6 = {\n class: \"title\"\n};\nconst _hoisted_7 = {\n class: \"main-title\",\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n target: \"_blank\"\n};\nconst _hoisted_8 = {\n class: \"dialog-section\"\n};\nconst _hoisted_9 = {\n class: \"section-header\"\n};\nconst _hoisted_10 = {\n class: \"section-title\"\n};\nconst _hoisted_11 = {\n class: \"section-content\"\n};\nconst _hoisted_12 = {\n class: \"dialog-section\"\n};\nconst _hoisted_13 = {\n class: \"section-header\"\n};\nconst _hoisted_14 = {\n class: \"section-title\"\n};\nconst _hoisted_15 = {\n class: \"section-content\"\n};\nconst _hoisted_16 = {\n class: \"setting-item\"\n};\nconst _hoisted_17 = {\n class: \"setting-label\"\n};\nconst _hoisted_18 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_19 = {\n class: \"setting-label\"\n};\nconst _hoisted_20 = {\n class: \"dialog-action\"\n};\nconst _hoisted_21 = [\"innerHTML\"];\nconst _hoisted_22 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ToggleDark = _resolveComponent(\"ToggleDark\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_DirectorySuggestionInput = _resolveComponent(\"DirectorySuggestionInput\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_Logo = _resolveComponent(\"Logo\");\n const _component_UploadForm = _resolveComponent(\"UploadForm\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_UploadSettingsDialog = _resolveComponent(\"UploadSettingsDialog\");\n const _component_Footer = _resolveComponent(\"Footer\");\n const _component_UploadHistory = _resolveComponent(\"UploadHistory\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_ToggleDark, {\n class: \"toggle-dark-button desktop-only\"\n }), _createVNode(_component_el_dropdown, {\n class: \"more-dropdown desktop-only\",\n trigger: \"click\",\n onCommand: $options.handleDesktopMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder-container\", {\n 'no-announcement': !$options.announcementAvailable\n }])\n }, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive\n }])\n }, [$options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectorySuggestionInput, {\n key: 0,\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n class: \"inner-folder-input\",\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur,\n onSelect: $options.handleDirectorySelect\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onSelect\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 1,\n class: \"inner-folder-input\",\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.uploadFolder = $event),\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\"]))], 2), $options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectoryTreePicker, {\n key: 0,\n \"current-directory\": $data.uploadFolder,\n source: \"upload\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-tree-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])) : _createCommentVNode(\"\", true)], 2), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('upload.switchUploadMethod'),\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"upload-method-button desktop-only\",\n onClick: $options.handleChangeUploadMethod\n }, {\n default: _withCtx(() => [$data.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : $data.uploadMethod === 'paste' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"paste\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\", \"disabled\"]), _createVNode(_component_el_dropdown, {\n class: \"mobile-more-dropdown mobile-only\",\n trigger: \"click\",\n onCommand: $options.handleMobileMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"toggleTheme\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $options.getThemeIcon(),\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($options.getThemeText()), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"toggleUploadMethod\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.uploadMethod === 'default' ? 'paste' : 'folder-open',\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? _ctx.$t('upload.pasteUpload') : _ctx.$t('upload.fileUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"mobile-more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", _hoisted_3, [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-manage-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleOpenToolbar,\n circle: \"\"\n }, {\n default: _withCtx(() => [!$data.isToolBarOpen ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"bars\",\n class: \"manage-icon\",\n size: \"lg\"\n })) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"times\",\n class: \"manage-icon\",\n size: \"lg\"\n }))]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.settings'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button compress-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.openCompressDialog,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"compress-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.linkFormat'),\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button link-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.openUrlDialog,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"link-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.manage'),\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button config-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleManage,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"config-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.logout'),\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button sign-out-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleLogout,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"sign-out-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"])]), _createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h1\", _hoisted_6, [_createElementVNode(\"a\", _hoisted_7, _toDisplayString($options.ownerName), 1), _cache[21] || (_cache[21] = _createTextVNode(\" ImgHub\", -1))])]), _createVNode(_component_UploadForm, {\n selectedUrlForm: $data.selectedUrlForm,\n customerCompress: $data.customerCompress,\n compressQuality: $data.compressQuality,\n compressBar: $data.compressBar,\n serverCompress: $data.serverCompress,\n uploadChannel: $data.uploadChannel,\n channelName: $data.channelName,\n uploadNameType: $data.uploadNameType,\n useCustomUrl: $data.useCustomUrl,\n customUrlPrefix: $data.customUrlPrefix,\n autoRetry: $data.autoRetry,\n urlPrefix: $options.urlPrefix,\n uploadMethod: $data.uploadMethod,\n uploadFolder: $data.uploadFolder,\n convertToWebp: $data.convertToWebp,\n class: \"upload\"\n }, null, 8, [\"selectedUrlForm\", \"customerCompress\", \"compressQuality\", \"compressBar\", \"serverCompress\", \"uploadChannel\", \"channelName\", \"uploadNameType\", \"useCustomUrl\", \"customUrlPrefix\", \"autoRetry\", \"urlPrefix\", \"uploadMethod\", \"uploadFolder\", \"convertToWebp\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('settings.linkFormatTitle'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_8, [_createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.selectedUrlForm = $event),\n onChange: $options.changeUrlForm,\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n value: \"url\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"md\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[22] || (_cache[22] = _createElementVNode(\"span\", null, \"MarkDown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"html\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[23] || (_cache[23] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"ubb\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[24] || (_cache[24] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"span\", _hoisted_14, _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_15, [_createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"span\", _hoisted_17, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [_createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_20, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[5] || (_cache[5] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadSettingsDialog, {\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.showCompressDialog = $event),\n uploadChannel: $data.uploadChannel,\n \"onUpdate:uploadChannel\": _cache[8] || (_cache[8] = $event => $data.uploadChannel = $event),\n channelName: $data.channelName,\n \"onUpdate:channelName\": _cache[9] || (_cache[9] = $event => $data.channelName = $event),\n currentChannelList: $options.currentChannelList,\n uploadFolder: $data.uploadFolder,\n \"onUpdate:uploadFolder\": _cache[10] || (_cache[10] = $event => $data.uploadFolder = $event),\n autoRetry: $data.autoRetry,\n \"onUpdate:autoRetry\": _cache[11] || (_cache[11] = $event => $data.autoRetry = $event),\n uploadNameType: $data.uploadNameType,\n \"onUpdate:uploadNameType\": _cache[12] || (_cache[12] = $event => $data.uploadNameType = $event),\n convertToWebp: $data.convertToWebp,\n \"onUpdate:convertToWebp\": _cache[13] || (_cache[13] = $event => $data.convertToWebp = $event),\n customerCompress: $data.customerCompress,\n \"onUpdate:customerCompress\": _cache[14] || (_cache[14] = $event => $data.customerCompress = $event),\n compressBar: $data.compressBar,\n \"onUpdate:compressBar\": _cache[15] || (_cache[15] = $event => $data.compressBar = $event),\n compressQuality: $data.compressQuality,\n \"onUpdate:compressQuality\": _cache[16] || (_cache[16] = $event => $data.compressQuality = $event),\n serverCompress: $data.serverCompress,\n \"onUpdate:serverCompress\": _cache[17] || (_cache[17] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\", \"uploadChannel\", \"channelName\", \"currentChannelList\", \"uploadFolder\", \"autoRetry\", \"uploadNameType\", \"convertToWebp\", \"customerCompress\", \"compressBar\", \"compressQuality\", \"serverCompress\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: _ctx.$t('upload.announcementTitle'),\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.showAnnouncementDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n \"close-on-click-modal\": false,\n \"close-on-press-escape\": false,\n center: \"\"\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_22, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[18] || (_cache[18] = $event => $data.showAnnouncementDialog = false)\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.announcementAck')), 1)]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_21)]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[20] || (_cache[20] = $event => $data.showHistory = false)\n }, null, 8, [\"show\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/upload/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport { setLocale } from '@/locales';\nimport UploadHistory from '@/components/upload/UploadHistory.vue';\nimport UploadSettingsDialog from '@/components/upload/UploadSettingsDialog.vue';\nimport DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport DirectorySuggestionInput from '@/components/DirectorySuggestionInput.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { validateFolderPath } from '@/utils/pathValidator';\nexport default {\n name: 'UploadHome',\n mixins: [backgroundManager],\n data() {\n return {\n selectedUrlForm: ref(''),\n showUrlDialog: false,\n showCompressDialog: false,\n customerCompress: true,\n //上传前压缩\n compressQuality: 4,\n //压缩后大小\n compressBar: 5,\n //压缩阈值\n convertToWebp: false,\n //转换为WebP格式\n serverCompress: true,\n //服务器端压缩\n uploadChannel: '',\n //上传渠道\n channelName: '',\n //指定的渠道名称\n availableChannels: {},\n //可用渠道列表\n uploadNameType: '',\n //上传文件命名方式\n customUrlPrefix: '',\n //自定义链接前缀\n useCustomUrl: 'false',\n //是否启用自定义链接格式\n autoRetry: true,\n //失败自动切换\n useDefaultWallPaper: false,\n isToolBarOpen: false,\n //是否打开工具栏\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\n // 公告内容\n showHistory: false,\n themeMode: 'auto' // 主题模式:light, dark, auto\n };\n },\n watch: {\n customerCompress(val) {\n this.updateCompressConfig('customerCompress', val);\n },\n compressQuality(val) {\n this.updateCompressConfig('compressQuality', val);\n },\n compressBar(val) {\n // 确保值在有效范围内\n if (val === null || val === undefined || val < 1) {\n this.compressBar = 1;\n return;\n }\n // 确保期望大小不超过压缩阈值\n if (this.compressQuality > val) {\n this.compressQuality = val;\n }\n this.updateCompressConfig('compressBar', val);\n },\n serverCompress(val) {\n this.updateCompressConfig('serverCompress', val);\n },\n convertToWebp(val) {\n this.updateCompressConfig('convertToWebp', val);\n },\n uploadChannel(val) {\n this.updateStoreUploadChannel(val);\n // 切换渠道类型时,检查持久化的渠道名是否在新渠道列表中\n const newChannelList = this.availableChannels[val] || [];\n const savedChannelName = this.storeChannelName;\n if (savedChannelName && newChannelList.some(ch => ch.name === savedChannelName)) {\n // 持久化的渠道名在新渠道列表中,恢复它\n this.channelName = savedChannelName;\n } else {\n // 否则清空\n this.channelName = '';\n }\n },\n channelName(val) {\n // 确保清空时保存空字符串而不是null\n this.$store.commit('setStoreChannelName', val || '');\n },\n uploadNameType(val) {\n this.updateStoreUploadNameType(val);\n },\n customUrlPrefix(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n autoRetry(val) {\n this.$store.commit('setStoreAutoRetry', val);\n },\n uploadFolder(val) {\n // 实时输入时用非 strict 模式,不检查末尾的单独 . 以允许继续输入如 .123\n if (this.validateUploadFolder(val, false)) {\n // 非 strict 通过后,再用 strict 模式静默检查,只有完全合法才更新 store\n const strictResult = validateFolderPath(val, {\n strict: true\n });\n if (strictResult.valid) {\n this.$store.commit('setStoreUploadFolder', val);\n }\n // strict 不通过时不更新 store,等失焦时提示并回滚\n } else {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'uploadCopyUrlForm', 'compressConfig', 'storeUploadChannel', 'storeChannelName', 'storeUploadNameType', 'customUrlSettings', 'storeAutoRetry', 'storeUploadMethod', 'storeUploadFolder']),\n ownerName() {\n return this.userConfig?.ownerName || 'Sanyue';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n urlPrefix() {\n // 全局自定义链接前缀\n return this.userConfig?.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n announcementAvailable() {\n return !!this.userConfig?.announcement;\n },\n // 是否显示目录候选项(从 userConfig 获取)\n showDirectorySuggestions() {\n return this.userConfig?.showDirectorySuggestions ?? false;\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', false, true);\n\n // 读取用户选择的链接格式\n this.selectedUrlForm = this.uploadCopyUrlForm || 'url';\n // 读取用户选择的压缩设置(优先用户设置,其次系统默认配置)\n this.customerCompress = this.compressConfig.customerCompress ?? this.parseBoolean(this.userConfig?.defaultCustomerCompress, true);\n this.compressQuality = this.compressConfig.compressQuality ?? this.parseNumber(this.userConfig?.defaultCompressQuality, 4);\n this.compressBar = this.compressConfig.compressBar ?? this.parseNumber(this.userConfig?.defaultCompressBar, 5);\n this.serverCompress = this.compressConfig.serverCompress ?? true;\n this.convertToWebp = this.compressConfig.convertToWebp ?? this.parseBoolean(this.userConfig?.defaultConvertToWebp, false);\n // 读取用户选择的上传渠道\n this.uploadChannel = this.storeUploadChannel || this.userConfig?.defaultUploadChannel || 'telegram';\n // 用户定义的失败自动切换\n this.autoRetry = this.storeAutoRetry;\n // 读取用户选择的上传文件命名方式\n this.uploadNameType = this.storeUploadNameType || this.userConfig?.defaultUploadNameType || 'default';\n // 读取用户自定义链接格式\n this.customUrlPrefix = this.customUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.customUrlSettings.useCustomUrl;\n // 读取用户偏好的上传方式\n this.uploadMethod = this.storeUploadMethod;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 读取用户设置的上传文件夹\n this.uploadFolder = this.storeUploadFolder || this.userConfig?.defaultUploadFolder || '';\n\n // 从 Vuex store 读取主题模式状态\n const cusDarkMode = this.$store.getters.cusDarkMode;\n const useDarkMode = this.$store.getters.useDarkMode;\n if (!cusDarkMode) {\n this.themeMode = 'auto';\n } else if (useDarkMode) {\n this.themeMode = 'dark';\n } else {\n this.themeMode = 'light';\n }\n\n // 首次访问公告\n const visited = localStorage.getItem('visitedUploadHome');\n const announcement = this.userConfig?.announcement;\n if (!visited && announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n localStorage.setItem('visitedUploadHome', 'true');\n }\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory,\n UploadSettingsDialog,\n DirectoryTreePicker,\n DirectorySuggestionInput\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels', {\n withAuthCode: true\n });\n if (response.data) {\n this.availableChannels = response.data;\n // 恢复渠道名称:优先持久化的值,其次系统默认配置\n const savedChannelName = this.storeChannelName;\n const defaultChannelName = this.userConfig?.defaultChannelName;\n const currentChannelList = this.availableChannels[this.uploadChannel] || [];\n\n // 如果用户主动清空过(savedChannelName === ''),则保持为空\n // 如果从未选择过(savedChannelName === null/undefined),则使用默认值\n if (savedChannelName && currentChannelList.some(ch => ch.name === savedChannelName)) {\n this.channelName = savedChannelName;\n } else if (savedChannelName === '' || savedChannelName === null || savedChannelName === undefined) {\n // 用户主动清空或从未选择,检查是否使用默认值\n if (savedChannelName !== '' && defaultChannelName && currentChannelList.some(ch => ch.name === defaultChannelName)) {\n this.channelName = defaultChannelName;\n }\n // 如果 savedChannelName === '',说明用户主动清空,保持为空\n }\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n },\n // 验证上传文件夹路径的合法性\n validateUploadFolder(path, strict = true) {\n // 自动补全前导 /\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n this.uploadFolder = path;\n }\n const result = validateFolderPath(path, {\n strict\n });\n if (!result.valid) {\n this.$message.error(result.error);\n return false;\n }\n return true;\n },\n handleFolderInputFocus() {\n this.isFolderInputActive = true;\n },\n handleFolderInputBlur() {\n this.isFolderInputActive = false;\n // 失焦时自动补全前导 /\n if (this.uploadFolder && !this.uploadFolder.startsWith('/')) {\n this.uploadFolder = '/' + this.uploadFolder;\n }\n // 失焦时做完整校验(包括末尾单独的 .)\n if (!this.validateUploadFolder(this.uploadFolder, true)) {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n },\n handleManage() {\n this.$router.push('/dashboard');\n },\n // 解析布尔值\n parseBoolean(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') return value === 'true';\n return defaultValue;\n },\n // 解析数字\n parseNumber(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n },\n openUrlDialog() {\n this.showUrlDialog = true;\n },\n handleLogout() {\n axios.post('/api/auth/logout', {\n authType: 'user'\n }, {\n withCredentials: true\n }).finally(() => {\n this.$store.commit('setUserLoggedIn', false);\n this.$router.push('/login');\n this.$message.success(this.$t('upload.logoutSuccess'));\n });\n },\n changeUrlForm() {\n this.$store.commit('setUploadCopyUrlForm', this.selectedUrlForm);\n },\n openCompressDialog() {\n this.showCompressDialog = true;\n },\n updateCompressConfig(key, value) {\n this.$store.commit('setCompressConfig', {\n key,\n value\n });\n },\n updateStoreUploadChannel(value) {\n this.$store.commit('setStoreUploadChannel', value);\n },\n updateStoreUploadNameType(value) {\n this.$store.commit('setStoreUploadNameType', value);\n },\n handleOpenToolbar() {\n this.isToolBarOpen = !this.isToolBarOpen;\n // 等过渡动画结束,向active类添加pointer-events属性,使其可以点击\n setTimeout(() => {\n const buttons = document.querySelectorAll('.toolbar-button');\n buttons.forEach(button => {\n button.style.pointerEvents = this.isToolBarOpen ? 'auto' : 'none';\n });\n }, 300);\n },\n handleChangeUploadMethod() {\n this.uploadMethod = this.uploadMethod === 'default' ? 'paste' : 'default';\n this.$store.commit('setUploadMethod', this.uploadMethod);\n },\n handleMobileMenuCommand(command) {\n if (command === 'toggleTheme') {\n // 循环切换:auto -> light -> dark -> auto\n if (this.themeMode === 'auto') {\n // 切换到亮色\n this.themeMode = 'light';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (this.themeMode === 'light') {\n // 切换到暗色\n this.themeMode = 'dark';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 切换到自动\n this.themeMode = 'auto';\n this.$store.commit('setCusDarkMode', false);\n }\n } else if (command === 'toggleUploadMethod') {\n this.handleChangeUploadMethod();\n } else if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n handleDesktopMenuCommand(command) {\n if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n getThemeIcon() {\n // 显示下一个模式的图标\n if (this.themeMode === 'auto') return 'sun'; // auto -> light\n if (this.themeMode === 'light') return 'moon'; // light -> dark\n return 'adjust'; // dark -> auto\n },\n getThemeText() {\n // 显示下一个模式的文字\n if (this.themeMode === 'auto') return this.$t('theme.lightMode');\n if (this.themeMode === 'light') return this.$t('theme.darkMode');\n return this.$t('theme.autoMode');\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n } else {\n this.$message.info(this.$t('upload.noAnnouncement'));\n }\n },\n // 处理目录选择\n handleDirectorySelect(path) {\n // 填入选择的目录路径\n this.uploadFolder = path;\n // 触发路径验证逻辑\n if (this.validateUploadFolder(path, true)) {\n this.$store.commit('setStoreUploadFolder', path);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=f50dcc42&scoped=true\"\nimport script from \"./UploadHome.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHome.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHome.vue?vue&type=style&index=0&id=f50dcc42&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-f50dcc42\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","import { 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__","/**\n * 路径验证器模块\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\n */\nimport i18n from '@/locales'\n\n/**\n * 验证文件夹路径的合法性\n * @param {string} path - 要验证的路径\n * @param {{ strict?: boolean }} options - 选项,strict 为 true 时检查末尾单独的 \".\"(默认 true)\n * @returns {{ valid: boolean, error?: string }} 验证结果\n */\nexport function validateFolderPath(path, { strict = true } = {}) {\n // 如果路径为空或仅为空白字符,返回有效(表示根目录)\n if (!path || path.trim() === '') {\n return { valid: true };\n }\n \n // 如果路径仅为 \"/\",返回有效(表示根目录)\n if (path === '/') {\n return { valid: true };\n }\n \n // 检查路径是否以 \"/\" 开头\n if (!path.startsWith('/')) {\n return { \n valid: false, \n error: i18n.global.t('validation.pathMustStartWithSlash') \n };\n }\n\n // 检查路径穿越:包含 .. 的路径段\n if (/(?:^|\\/)\\.\\.(\\/|$)/.test(path) || path.includes('..')) {\n return {\n valid: false,\n error: i18n.global.t('validation.pathTraversalNotAllowed')\n };\n }\n\n // 检查路径中单独的 . 段\n // strict 模式检查 /./ 和末尾 /.,非 strict 模式仅检查 /./ 以允许用户继续输入如 /.123\n const dotPattern = strict ? /\\/\\.(\\/|$)/ : /\\/\\.\\//;\n if (dotPattern.test(path)) {\n return {\n valid: false,\n error: i18n.global.t('validation.singleDotNotAllowed')\n };\n }\n\n // 检查路径是否包含连续的斜杠\n if (path.includes('//')) {\n return { \n valid: false, \n error: i18n.global.t('validation.consecutiveSlashNotAllowed') \n };\n }\n \n // 检查路径是否包含非法字符\n // 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\n if (invalidChars.test(path)) {\n return { \n valid: false, \n error: i18n.global.t('validation.invalidCharacters') \n };\n }\n \n return { valid: true };\n}\n","import store from '@/store'\nimport router from '@/router'\n\nlet isRedirecting = false;\n\nexport default async function fetchWithAuth(url, options = {}) {\n // 开发环境下添加 /api 前缀\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\n\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\n options.credentials = 'include';\n\n options.headers = {\n ...options.headers,\n };\n\n const response = await fetch(url, options);\n\n if (response.status === 401 && !isRedirecting) {\n isRedirecting = true;\n store.commit('setAdminLoggedIn', false);\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\n router.push('/adminLogin').finally(() => {\n isRedirecting = false;\n });\n }\n\n return response;\n}\n","module.exports = require(\"./build/conversion.js\");\n"],"names":["t","e","module","exports","this","n","r","o","i","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","value","__esModule","create","bind","default","prototype","hasOwnProperty","p","s","some","a","f","g","w","b","PNG","JPEG","GIF","Promise","u","next","throw","done","then","apply","toDataURL","toBlob","split","match","atob","length","Uint8Array","charCodeAt","Blob","type","Image","onload","onerror","Error","src","document","createElement","href","window","URL","createObjectURL","download","Date","now","toString","body","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","target","result","readAsDataURL","h","assign","getContext","Number","scale","width","height","orientation","rotate","Math","PI","drawImage","translate","fetch","blob","y","quality","isNaN","size","accuracy","filter","sort","abs","pow","v","_hoisted_1","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","key","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","_component_el_tooltip","show","$t","count","totalCount","content","placement","circle","onClick","toggleViewMode","icon","viewMode","_","clearHistory","$event","$emit","historyList","ref","onScroll","args","handleScroll","groupedHistory","group","date","items","item","time","isImage","name","url","loading","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","title","formatTime","hasMore","loadingMore","spin","props","Boolean","data","allHistory","pageSize","currentPage","watch","val","resetAndLoad","computed","groups","forEach","dateStr","getFullYear","String","getMonth","padStart","getDate","push","keys","map","mounted","savedMode","localStorage","getItem","methods","loadAllHistory","loadMore","history","JSON","parse","console","error","setTimeout","start","end","newItems","slice","container","scrollTop","scrollHeight","clientHeight","setItem","$confirm","confirmButtonText","cancelButtonText","removeItem","$message","success","catch","stringify","fileName","imageExtensions","extension","pop","toLowerCase","includes","videoExtensions","timestamp","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","navigator","clipboard","writeText","open","__exports__","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_component_ChannelIcon","_component_el_radio","_component_el_radio_group","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","modelValue","visible","dialogWidth","uploadChannel","label","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","components","ChannelIcon","startsWith","Array","emits","set","innerWidth","style","autoplay","playsinline","loop","_component_el_text","_component_el_progress","_component_Link","_component_el_icon","_component_Delete","file","truncated","truncateFilename","status","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","Link","Delete","required","ext","filename","maxLength","lastDotIndex","lastIndexOf","substring","keepEnd","keepStart","event","message","_component_CameraFilled","_component_el_upload","_component_el_radio_button","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_UploadFileItem","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","innerHTML","pastedUrls","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","disabled","disableTooltip","copyAll","dropdown","autoReUpload","onChange","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","onCopy","handleCopy","onRemove","handleRemove","onPreviewError","buildFileUrls","srcID","rootUrl","getUrlByFormat","format","md","html","ubb","updateFileListUrls","urls","K","Uint32Array","rotr","x","processBlock","block","H","W","s0","s1","S1","temp1","S0","maj","temp2","createSha256","buffer","bufferLength","totalLength","update","offset","needed","toCopy","subarray","digest","bitLength","fill","view","DataView","setUint32","floor","hex","async","computeSha256","sha256","CHUNK_SIZE","chunk","arrayBuffer","log","round","UploadFileItem","selectedUrlForm","useCustomUrl","customUrlPrefix","urlPrefix","maxUploading","exceptionList","fileListLength","uploadCount","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","handler","$nextTick","$refs","scrollContainer","setScrollTop","deep","immediate","$store","commit","location","protocol","host","addEventListener","handlePaste","storeAutoReUpload","beforeUnmount","removeEventListener","find","uid","waitingItem","uploadingItem","fileItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","needServerCompress","abortController","AbortController","formData","FormData","append","err","axios","encodeURIComponent","method","withAuthCode","signal","onUploadProgress","progressEvent","percentCompleted","loaded","total","onProgress","percent","res","code","response","finally","delete","fileSize","fileType","totalChunks","ceil","precomputedSha256","initFormData","initResponse","uploadId","maxConcurrency","chunkProgress","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","chunkIndex","retryCount","maxRetries","totalPercent","reduce","warn","resolve","pool","currentIndex","all","duration","mergeFormData","closeAll","cleanupUploadResources","cleanupError","has","abort","timeout","replace","saveToHistory","newRecord","scheduleAutoRetry","reject","processedFile","canConvertToWebp","convertedFile","convertImageToWebp","toFixed","needCustomCompress","isLtLim","pushFileToQueue","fileUrl","newFile","File","myUploadCount","join","controller","clear","tagName","clipboardData","uploadFromUrl","validUrls","trim","test","kind","getAsString","callback","mdUrl","htmlUrl","ubbUrl","evt","getAsFile","checkResult","text","urlPattern","post","responseType","headers","disposition","filenameRegex","filenameStarRegex","matches","exec","decodeURIComponent","pathname","retryFailedFiles","files","clearTimeout","filesToRetry","aborted","sampleBytes","fileSample","btoa","fromCharCode","uploadInfoRes","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","ok","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","index","undefined","etag","partNumber","progress","completeResponse","oid","img","canvas","ctx","originalName","newName","webpFile","revokeObjectURL","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","clientY","top","opacity","beforeDestroy","inputValue","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","suggestions","onMousedown","selectItem","dropdownVisible","directoryTreeRoot","directoryTreeLoaded","directoryTreeLoading","directoryChildrenMap","focusTime","isFocused","refreshSuggestions","ensureDirectoryTreeLoaded","path","normalizedPath","normalizeDirectoryPath","children","inputRef","focus","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","node","parentPath","isArray","child","tree","parseDirectoryQuery","normalizedInput","raw","segmentInput","parentSegments","queryString","parentChildren","keyword","_component_ToggleDark","_component_DirectorySuggestionInput","_component_DirectoryTreePicker","_component_Logo","_component_UploadForm","_component_UploadSettingsDialog","_component_Footer","_component_UploadHistory","trigger","onCommand","handleDesktopMenuCommand","command","announcementAvailable","$i18n","locale","isFolderInputActive","showDirectorySuggestions","handleFolderInputFocus","handleFolderInputBlur","onSelect","handleDirectorySelect","source","handleChangeUploadMethod","handleMobileMenuCommand","getThemeIcon","getThemeText","isToolBarOpen","handleOpenToolbar","openCompressDialog","openUrlDialog","handleManage","handleLogout","useConfigLink","ownerName","showUrlDialog","changeUrlForm","showCompressDialog","showAnnouncementDialog","center","footer","announcementContent","showHistory","onClose","mixins","backgroundManager","availableChannels","useDefaultWallPaper","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","updateStoreUploadNameType","validateUploadFolder","strictResult","strict","valid","storeUploadFolder","userConfig","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","cusDarkMode","getters","useDarkMode","visited","UploadForm","Footer","ToggleDark","Logo","UploadHistory","UploadSettingsDialog","DirectoryTreePicker","DirectorySuggestionInput","defaultChannelName","$router","defaultValue","num","parseFloat","authType","withCredentials","buttons","querySelectorAll","button","pointerEvents","handleShowAnnouncement","info","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","popoverVisible","transition","reference","$slots","fetchDirectoryTree","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","expanded","openDrawer","drawerVisible","direction","validator","windowWidth","newVal","treeRef","store","nodesMap","treeRefMobile","setCurrentKey","handleResize","fetchWithAuth","json","viewBox","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons","cfr2","s3","discord","validateFolderPath","i18n","global","dotPattern","invalidChars","isRedirecting","options","credentials","router"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/518.47daf62c.js.map.gz b/frontend-dist/js/518.47daf62c.js.map.gz deleted file mode 100644 index 49ed788d32e3433fa2431d5164e41465b815622d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73807 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

(E4A30dNb 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 diff --git a/frontend-dist/js/529.317ef371.js.map.gz b/frontend-dist/js/529.317ef371.js.map.gz deleted file mode 100644 index 844d87f72b014d435a5b80d77a1b61769966893e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364685 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

ZG9?CO#)zF|q^&O7}; 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‰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

=o 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

0D|*$ngIbsD-4sZnyi@BWXwu{NKFY*zav(>v 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%0Aq*nB=4~=|u{hEE-S& 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 diff --git a/frontend-dist/js/529.317ef371.js b/frontend-dist/js/529.e05f38bd.js similarity index 99% rename from frontend-dist/js/529.317ef371.js rename to frontend-dist/js/529.e05f38bd.js index 5f6ea271..26d34c9f 100644 --- a/frontend-dist/js/529.317ef371.js +++ b/frontend-dist/js/529.e05f38bd.js @@ -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.317ef371.js.map \ No newline at end of file +//# sourceMappingURL=529.e05f38bd.js.map \ No newline at end of file diff --git a/frontend-dist/js/529.317ef371.js.gz b/frontend-dist/js/529.e05f38bd.js.gz similarity index 99% rename from frontend-dist/js/529.317ef371.js.gz rename to frontend-dist/js/529.e05f38bd.js.gz index 953da8e3dce92e27b3b7f5a455e624a0495c28d3..b9c2eb82e191b63039ecf87e6c4db7795a901d7a 100644 GIT binary patch delta 48 zcmaF2pY8pAHZJ*Y4h9fl;%emD%EfqYzPRh8eN&&E)%<;X(p-N1fA;*{ubda}VPyaS Dq+$}V delta 47 zcmaFApY7d#HZJ*Y4h9fl5^m($%EfqYzSyMnqtP=9zin5wmXG^W&*A5{aq%8j1^|E0 B5a<8^ diff --git a/frontend-dist/js/529.317ef371.js.map b/frontend-dist/js/529.e05f38bd.js.map similarity index 78% rename from frontend-dist/js/529.317ef371.js.map rename to frontend-dist/js/529.e05f38bd.js.map index 9dca067e..d40d5fb1 100644 --- a/frontend-dist/js/529.317ef371.js.map +++ b/frontend-dist/js/529.e05f38bd.js.map @@ -1 +1 @@ -{"version":3,"file":"js/529.317ef371.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","/**\n * BatchProcessor - 批量数据处理类\n * \n * 处理批量数据获取和处理的核心类,使用 cursor 分页机制获取所有数据。\n * 支持进度回调和取消功能。\n */\n\nimport fetchWithAuth from '@/utils/fetchWithAuth';\n\n/**\n * 批量操作错误类\n * 提供错误代码、是否可恢复、建议操作等信息\n */\nexport class BatchOperationError extends Error {\n constructor(message, code, recoverable = false, suggestion = '') {\n super(message);\n this.name = 'BatchOperationError';\n this.code = code;\n this.recoverable = recoverable;\n this.suggestion = suggestion;\n }\n}\n\n/**\n * 错误处理器映射\n * 根据 HTTP 状态码返回对应的错误对象\n */\nconst ERROR_HANDLERS = {\n 401: () => new BatchOperationError(\n '认证失败,请重新登录',\n 'AUTH_FAILED',\n false,\n '请刷新页面并重新登录'\n ),\n 403: () => new BatchOperationError(\n '权限不足或请求被拒绝',\n 'FORBIDDEN',\n false,\n '请确认您有管理员权限'\n ),\n 400: (details) => new BatchOperationError(\n `请求数据无效: ${details}`,\n 'INVALID_DATA',\n true,\n '请检查数据格式后重试'\n ),\n 500: () => new BatchOperationError(\n '服务器内部错误',\n 'SERVER_ERROR',\n true,\n '请稍后重试,如果问题持续请联系管理员'\n ),\n NETWORK: () => new BatchOperationError(\n '网络连接失败',\n 'NETWORK_ERROR',\n true,\n '请检查网络连接后重试'\n ),\n ABORT: () => new BatchOperationError(\n '操作已取消',\n 'ABORTED',\n false,\n ''\n )\n};\n\n/**\n * 根据错误创建 BatchOperationError\n * @param {Error|Response} error - 原始错误或响应对象\n * @param {string} details - 错误详情\n * @returns {BatchOperationError}\n */\nfunction createError(error, details = '') {\n // 处理取消操作\n if (error.name === 'AbortError') {\n return ERROR_HANDLERS.ABORT();\n }\n \n // 处理 HTTP 响应错误\n if (error instanceof Response || (error && typeof error.status === 'number')) {\n const handler = ERROR_HANDLERS[error.status];\n if (handler) {\n return handler(details);\n }\n return new BatchOperationError(\n `请求失败: ${error.status}`,\n 'HTTP_ERROR',\n true,\n '请稍后重试'\n );\n }\n \n // 处理网络错误\n if (error instanceof TypeError && error.message.includes('fetch')) {\n return ERROR_HANDLERS.NETWORK();\n }\n \n // 其他错误\n return new BatchOperationError(\n error.message || '未知错误',\n 'UNKNOWN_ERROR',\n true,\n '请稍后重试'\n );\n}\n\n/**\n * BatchProcessor 类\n * \n * 用于批量获取和处理数据的核心类\n */\nclass BatchProcessor {\n /**\n * 创建 BatchProcessor 实例\n * @param {Object} options - 配置选项\n * @param {number} options.batchSize - 每批数据量,默认 1000\n * @param {Function} options.onProgress - 进度回调函数\n * @param {Function} options.onError - 错误回调函数\n */\n constructor(options = {}) {\n this.batchSize = options.batchSize || 1000;\n this.onProgress = options.onProgress || (() => {});\n this.onError = options.onError || (() => {});\n this.abortController = null;\n }\n\n /**\n * 获取所有数据记录\n * 使用 cursor 分页机制循环获取所有数据,直到没有更多数据或操作被取消\n * \n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\n * @returns {Promise} 所有记录的数组\n * @throws {BatchOperationError} 当发生错误时抛出\n */\n async fetchAllRecords(includeValue = false) {\n // 创建新的 AbortController 用于取消操作\n this.abortController = new AbortController();\n const allRecords = [];\n let cursor = null;\n let totalFetched = 0;\n let batchCount = 0;\n\n try {\n do {\n // 检查是否已取消\n if (this.abortController.signal.aborted) {\n break;\n }\n\n // 获取一批数据\n const response = await this.fetchBatch(cursor, includeValue);\n \n // 合并数据到总数组\n allRecords.push(...response.records);\n cursor = response.nextCursor;\n totalFetched += response.records.length;\n batchCount++;\n\n // 调用进度回调\n this.onProgress({\n phase: 'fetching',\n current: totalFetched,\n batchCount: batchCount,\n message: `已获取 ${totalFetched} 条记录...`\n });\n\n } while (cursor && !this.abortController.signal.aborted);\n\n // 如果是因为取消而退出循环,抛出取消错误\n if (this.abortController.signal.aborted) {\n throw ERROR_HANDLERS.ABORT();\n }\n\n return allRecords;\n } catch (error) {\n // 调用错误回调\n const batchError = error instanceof BatchOperationError \n ? error \n : createError(error);\n this.onError(batchError);\n throw batchError;\n }\n }\n\n /**\n * 获取单批数据\n * \n * @param {string|null} cursor - 分页游标,首次请求为 null\n * @param {boolean} includeValue - 是否包含分块文件的 value 数据\n * @returns {Promise} 包含 records 和 nextCursor 的响应对象\n * @throws {BatchOperationError} 当请求失败时抛出\n */\n async fetchBatch(cursor, includeValue) {\n // 构建查询参数\n const params = new URLSearchParams();\n if (cursor) {\n params.set('cursor', cursor);\n }\n if (includeValue) {\n params.set('includeValue', 'true');\n }\n params.set('limit', String(this.batchSize));\n\n try {\n // 发送请求,传入 abort signal 支持取消\n const response = await fetchWithAuth(\n `/api/manage/batch/list?${params}`,\n { signal: this.abortController.signal }\n );\n\n // 检查响应状态\n if (!response.ok) {\n let errorDetails = '';\n try {\n const errorData = await response.json();\n errorDetails = errorData.error || '';\n } catch {\n // 忽略 JSON 解析错误\n }\n throw createError(response, errorDetails);\n }\n\n // 解析响应数据\n const data = await response.json();\n \n // 验证响应格式\n if (!data.success) {\n throw new BatchOperationError(\n data.error || '请求失败',\n 'API_ERROR',\n true,\n '请稍后重试'\n );\n }\n\n return {\n records: data.records || [],\n nextCursor: data.nextCursor || null,\n totalProcessed: data.totalProcessed || 0\n };\n } catch (error) {\n // 如果已经是 BatchOperationError,直接抛出\n if (error instanceof BatchOperationError) {\n throw error;\n }\n // 否则转换为 BatchOperationError\n throw createError(error);\n }\n }\n\n /**\n * 取消当前操作\n * 调用此方法将中止正在进行的 fetch 请求\n */\n abort() {\n if (this.abortController) {\n this.abortController.abort();\n }\n }\n\n /**\n * 检查操作是否已被取消\n * @returns {boolean}\n */\n isAborted() {\n return this.abortController ? this.abortController.signal.aborted : false;\n }\n\n /**\n * 重置处理器状态\n * 在开始新的批量操作前调用\n */\n reset() {\n this.abortController = null;\n }\n}\n\nexport default BatchProcessor;\n","/**\n * IndexRebuilder - 索引重建类\n * \n * 处理索引重建的完整流程,包括数据获取、排序、分块上传和完成。\n */\n\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport BatchProcessor, { BatchOperationError } from '@/utils/batchProcessor';\n\n/**\n * IndexRebuilder 类\n * \n * 用于重建索引的核心类,协调数据获取、排序和分块上传\n */\nclass IndexRebuilder {\n /**\n * 创建 IndexRebuilder 实例\n * @param {Object} options - 配置选项\n * @param {number} options.chunkSize - 每个分块的记录数,默认从后端获取\n * @param {number} options.maxRetries - 分块上传最大重试次数,默认 3\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\n * @param {Function} options.onProgress - 进度回调函数\n * @param {Function} options.onError - 错误回调函数\n */\n constructor(options = {}) {\n this.chunkSize = options.chunkSize || null; // 从后端获取\n this.maxRetries = options.maxRetries || 3;\n this.retryDelay = options.retryDelay || 1000;\n this.onProgress = options.onProgress || (() => {});\n this.onError = options.onError || (() => {});\n this.sessionId = this.generateSessionId();\n this.aborted = false;\n }\n\n /**\n * 从后端获取索引配置(分块大小等)\n * @returns {Promise} 配置对象 { chunkSize, databaseType }\n */\n async fetchConfig() {\n try {\n const response = await fetchWithAuth('/api/manage/batch/index/config');\n if (!response.ok) {\n throw new Error('获取配置失败');\n }\n const result = await response.json();\n if (result.success) {\n return {\n chunkSize: result.chunkSize || 500,\n databaseType: result.databaseType || 'unknown'\n };\n }\n throw new Error(result.error || '获取配置失败');\n } catch (error) {\n // 获取失败时使用保守的默认值(兼容 D1)\n console.warn('Failed to fetch index config, using default:', error);\n return { chunkSize: 500, databaseType: 'unknown' };\n }\n }\n\n /**\n * 执行索引重建\n * \n * 完整流程:\n * 1. 获取配置(分块大小)\n * 2. 获取所有记录\n * 3. 按时间戳降序排序\n * 4. 分块上传\n * 5. 完成重建\n * \n * @returns {Promise} 重建结果 { success: boolean, totalFiles: number }\n * @throws {BatchOperationError} 当发生错误时抛出\n */\n async rebuild() {\n this.aborted = false;\n \n try {\n // 获取配置(分块大小)\n if (!this.chunkSize) {\n const config = await this.fetchConfig();\n this.chunkSize = config.chunkSize;\n }\n\n // 获取所有记录\n this.onProgress({ \n phase: 'fetching', \n message: '正在获取数据...',\n current: 0\n });\n \n const processor = new BatchProcessor({\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' }),\n onError: (e) => this.onError(e)\n });\n \n const records = await processor.fetchAllRecords(false);\n \n if (this.aborted) {\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\n }\n\n // 排序(按时间戳降序)\n this.onProgress({ \n phase: 'sorting', \n message: '正在排序...',\n current: 0,\n total: records.length\n });\n \n this.sortByTimestampDescending(records);\n \n if (this.aborted) {\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\n }\n\n // 分块上传\n const chunks = this.splitIntoChunks(records);\n \n for (let i = 0; i < chunks.length; i++) {\n if (this.aborted) {\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\n }\n \n // 使用重试机制上传分块\n await this.uploadChunkWithRetry(chunks[i], i);\n \n this.onProgress({\n phase: 'uploading',\n current: i + 1,\n total: chunks.length,\n message: `正在上传分块 ${i + 1}/${chunks.length}...`\n });\n }\n\n // 完成重建\n this.onProgress({ \n phase: 'finalizing', \n message: '正在完成重建...',\n current: chunks.length,\n total: chunks.length\n });\n \n await this.finalize(chunks.length, records.length);\n\n this.onProgress({\n phase: 'completed',\n message: `索引重建完成,共 ${records.length} 个文件`,\n current: records.length,\n total: records.length\n });\n\n return { success: true, totalFiles: records.length };\n } catch (error) {\n const batchError = error instanceof BatchOperationError \n ? error \n : new BatchOperationError(\n error.message || '索引重建失败',\n 'REBUILD_ERROR',\n true,\n '请稍后重试'\n );\n this.onError(batchError);\n throw batchError;\n }\n }\n\n /**\n * 按时间戳降序排序记录\n * \n * @param {Array} records - 要排序的记录数组(原地排序)\n */\n sortByTimestampDescending(records) {\n records.sort((a, b) => {\n const timestampA = (a.metadata && a.metadata.TimeStamp) || 0;\n const timestampB = (b.metadata && b.metadata.TimeStamp) || 0;\n return timestampB - timestampA;\n });\n }\n\n /**\n * 将记录分割为多个块\n * \n * @param {Array} records - 要分割的记录数组\n * @returns {Array} 分块后的二维数组\n */\n splitIntoChunks(records) {\n const chunks = [];\n for (let i = 0; i < records.length; i += this.chunkSize) {\n chunks.push(records.slice(i, i + this.chunkSize));\n }\n return chunks;\n }\n\n /**\n * 带重试机制的分块上传\n * \n * @param {Array} chunk - 要上传的分块数据\n * @param {number} chunkId - 分块 ID\n * @returns {Promise} 上传响应\n * @throws {BatchOperationError} 当所有重试都失败时抛出\n */\n async uploadChunkWithRetry(chunk, chunkId) {\n let lastError;\n \n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n return await this.uploadChunk(chunk, chunkId);\n } catch (error) {\n lastError = error;\n \n // 不重试的错误类型\n if (error instanceof BatchOperationError) {\n if (error.code === 'AUTH_FAILED' || \n error.code === 'FORBIDDEN' || \n error.code === 'ABORTED') {\n throw error;\n }\n }\n \n // 如果还有重试机会,等待后重试\n if (attempt < this.maxRetries) {\n // 指数退避\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\n await this.sleep(delay);\n \n this.onProgress({\n phase: 'retrying',\n message: `分块 ${chunkId + 1} 上传失败,正在重试 (${attempt}/${this.maxRetries})...`,\n current: chunkId,\n attempt: attempt\n });\n }\n }\n }\n \n // 所有重试都失败\n throw lastError instanceof BatchOperationError \n ? lastError \n : new BatchOperationError(\n `分块 ${chunkId + 1} 上传失败,已重试 ${this.maxRetries} 次`,\n 'CHUNK_UPLOAD_FAILED',\n false,\n '请检查网络连接后重新开始重建'\n );\n }\n\n /**\n * 上传单个分块\n * \n * @param {Array} chunk - 要上传的分块数据\n * @param {number} chunkId - 分块 ID\n * @returns {Promise} 上传响应\n * @throws {BatchOperationError} 当上传失败时抛出\n */\n async uploadChunk(chunk, chunkId) {\n const checksum = await this.calculateChecksum(chunk);\n \n try {\n const response = await fetchWithAuth('/api/manage/batch/index/chunk', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n chunkId: String(chunkId),\n sessionId: this.sessionId,\n data: chunk,\n checksum\n })\n });\n\n if (!response.ok) {\n let errorDetails = '';\n try {\n const errorData = await response.json();\n errorDetails = errorData.error || '';\n } catch {\n // 忽略 JSON 解析错误\n }\n throw this.createHttpError(response.status, errorDetails);\n }\n\n const result = await response.json();\n \n if (!result.success) {\n throw new BatchOperationError(\n result.error || '分块上传失败',\n 'CHUNK_UPLOAD_FAILED',\n true,\n '请稍后重试'\n );\n }\n\n return result;\n } catch (error) {\n if (error instanceof BatchOperationError) {\n throw error;\n }\n // 网络错误\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new BatchOperationError(\n '网络连接失败',\n 'NETWORK_ERROR',\n true,\n '请检查网络连接后重试'\n );\n }\n throw new BatchOperationError(\n error.message || '分块上传失败',\n 'CHUNK_UPLOAD_FAILED',\n true,\n '请稍后重试'\n );\n }\n }\n\n /**\n * 完成索引重建\n * \n * @param {number} totalChunks - 总分块数\n * @param {number} totalFiles - 总文件数\n * @returns {Promise} 完成响应\n * @throws {BatchOperationError} 当完成请求失败时抛出\n */\n async finalize(totalChunks, totalFiles) {\n try {\n const response = await fetchWithAuth('/api/manage/batch/index/finalize', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n sessionId: this.sessionId,\n totalChunks,\n totalFiles\n })\n });\n\n if (!response.ok) {\n let errorDetails = '';\n try {\n const errorData = await response.json();\n errorDetails = errorData.error || '';\n } catch {\n // 忽略 JSON 解析错误\n }\n throw this.createHttpError(response.status, errorDetails);\n }\n\n const result = await response.json();\n \n if (!result.success) {\n throw new BatchOperationError(\n result.error || '索引完成失败',\n 'FINALIZE_FAILED',\n true,\n '请稍后重试'\n );\n }\n\n return result;\n } catch (error) {\n if (error instanceof BatchOperationError) {\n throw error;\n }\n throw new BatchOperationError(\n error.message || '索引完成失败',\n 'FINALIZE_FAILED',\n true,\n '请稍后重试'\n );\n }\n }\n\n /**\n * 生成唯一的会话 ID\n * \n * @returns {string} 会话 ID\n */\n generateSessionId() {\n return `rebuild_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n }\n\n /**\n * 计算数据的 SHA-256 校验和\n * \n * @param {Array} data - 要计算校验和的数据\n * @returns {Promise} 十六进制格式的校验和\n */\n async calculateChecksum(data) {\n const text = JSON.stringify(data);\n const encoder = new TextEncoder();\n const dataBuffer = encoder.encode(text);\n\n // crypto.subtle 仅在安全上下文(HTTPS / localhost)下可用\n // 通过 0.0.0.0 等非安全上下文访问时需要 fallback\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n }\n\n // Fallback: 简单但足够用于校验的哈希实现 (FNV-1a 变体, 产生 64 位十六进制)\n let h1 = 0x811c9dc5 >>> 0;\n let h2 = 0x811c9dc5 >>> 0;\n for (let i = 0; i < dataBuffer.length; i++) {\n h1 = Math.imul(h1 ^ dataBuffer[i], 0x01000193) >>> 0;\n h2 = Math.imul(h2 ^ dataBuffer[i], 0x01000193 + 0x10) >>> 0;\n }\n return h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0');\n }\n\n\n /**\n * 根据 HTTP 状态码创建错误对象\n * \n * @param {number} status - HTTP 状态码\n * @param {string} details - 错误详情\n * @returns {BatchOperationError}\n */\n createHttpError(status, details = '') {\n switch (status) {\n case 401:\n return new BatchOperationError(\n '认证失败,请重新登录',\n 'AUTH_FAILED',\n false,\n '请刷新页面并重新登录'\n );\n case 403:\n return new BatchOperationError(\n '权限不足或请求被拒绝',\n 'FORBIDDEN',\n false,\n '请确认您有管理员权限'\n );\n case 400:\n return new BatchOperationError(\n `请求数据无效: ${details}`,\n 'INVALID_DATA',\n true,\n '请检查数据格式后重试'\n );\n case 404:\n return new BatchOperationError(\n '会话不存在',\n 'SESSION_NOT_FOUND',\n false,\n '请重新开始索引重建'\n );\n case 410:\n return new BatchOperationError(\n '会话已过期',\n 'SESSION_EXPIRED',\n false,\n '请重新开始索引重建'\n );\n case 500:\n default:\n return new BatchOperationError(\n `服务器错误: ${details || status}`,\n 'SERVER_ERROR',\n true,\n '请稍后重试'\n );\n }\n }\n\n /**\n * 延迟执行\n * \n * @param {number} ms - 延迟毫秒数\n * @returns {Promise}\n */\n sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n /**\n * 取消当前操作\n */\n abort() {\n this.aborted = true;\n }\n\n /**\n * 重置重建器状态\n * 在开始新的重建操作前调用\n */\n reset() {\n this.aborted = false;\n this.sessionId = this.generateSessionId();\n }\n}\n\nexport default IndexRebuilder;\n","/**\n * BackupGenerator - 备份数据生成类\n * \n * 处理前端辅助备份功能,获取所有文件记录(包含分块文件的 value),\n * 构建完整的备份 JSON 文件,并触发浏览器下载。\n */\n\nimport BatchProcessor from '@/utils/batchProcessor';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport packageInfo from '../../package.json'\n\n/**\n * BackupGenerator 类\n * \n * 用于生成和下载备份数据的类\n */\nclass BackupGenerator {\n /**\n * 创建 BackupGenerator 实例\n * @param {Object} options - 配置选项\n * @param {Function} options.onProgress - 进度回调函数\n */\n constructor(options = {}) {\n this.onProgress = options.onProgress || (() => {});\n this.processor = null;\n }\n\n /**\n * 生成并下载备份\n * \n * 完整流程:\n * 1. 获取所有文件记录(包含分块文件的 value)\n * 2. 构建备份数据结构\n * 3. 获取系统设置\n * 4. 生成并触发下载\n * \n * @returns {Promise} 包含 success 和 fileCount 的结果对象\n * @throws {Error} 当备份过程中发生错误时抛出\n */\n async generateBackup() {\n // 获取所有文件记录(包含分块文件的 value)\n this.processor = new BatchProcessor({\n onProgress: (p) => this.onProgress({ ...p, phase: 'fetching' })\n });\n\n const records = await this.processor.fetchAllRecords(true);\n\n // 构建备份数据\n this.onProgress({ phase: 'building', message: '正在构建备份数据...' });\n\n const backupData = {\n timestamp: Date.now(),\n version: packageInfo.version,\n data: {\n fileCount: records.length,\n files: {},\n settings: {}\n }\n };\n\n // 将记录转换为以 id 为键的对象格式\n for (const record of records) {\n backupData.data.files[record.id] = {\n metadata: record.metadata,\n value: record.value || null\n };\n }\n\n // 3. 获取系统设置\n const settings = await this.fetchSettings();\n backupData.data.settings = settings;\n\n // 生成下载\n this.onProgress({ phase: 'downloading', message: '正在生成下载...' });\n this.downloadBackup(backupData);\n\n const settingsCount = Object.keys(settings).length;\n return { success: true, fileCount: records.length, settingsCount };\n }\n\n /**\n * 获取系统设置\n * \n * @returns {Promise} 系统设置对象,失败时返回空对象\n */\n async fetchSettings() {\n try {\n const response = await fetchWithAuth('/api/manage/batch/settings');\n if (!response.ok) {\n console.warn('Failed to fetch settings:', response.status);\n return {};\n }\n const data = await response.json();\n // 返回 settings 字段,而不是整个响应\n return data.settings || {};\n } catch (error) {\n console.warn('Failed to fetch settings:', error);\n return {};\n }\n }\n\n /**\n * 触发浏览器下载备份文件\n * \n * @param {Object} data - 备份数据对象\n */\n downloadBackup(data) {\n // 将数据转换为格式化的 JSON 字符串\n const json = JSON.stringify(data, null, 2);\n \n // 创建 Blob 对象\n const blob = new Blob([json], { type: 'application/json' });\n \n // 创建下载 URL\n const url = URL.createObjectURL(blob);\n\n // 创建临时下载链接\n const a = document.createElement('a');\n a.href = url;\n // 使用日期作为文件名的一部分\n a.download = `imgbed_backup_${new Date().toISOString().split('T')[0]}.json`;\n \n // 触发下载\n document.body.appendChild(a);\n a.click();\n \n // 清理\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n /**\n * 取消当前备份操作\n */\n abort() {\n if (this.processor) {\n this.processor.abort();\n }\n }\n\n /**\n * 检查操作是否已被取消\n * @returns {boolean}\n */\n isAborted() {\n return this.processor ? this.processor.isAborted() : false;\n }\n}\n\nexport default BackupGenerator;\n","/**\n * RestoreProcessor - 分批恢复数据类\n * \n * 将备份数据分批上传到后端进行恢复,避免 CPU 超时\n */\n\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { BatchOperationError } from '@/utils/batchProcessor';\n\n/**\n * RestoreProcessor 类\n */\nclass RestoreProcessor {\n /**\n * 创建 RestoreProcessor 实例\n * @param {Object} options - 配置选项\n * @param {number} options.chunkSize - 每批数据量,默认 50\n * @param {number} options.maxRetries - 最大重试次数,默认 3\n * @param {number} options.retryDelay - 重试延迟基数(毫秒),默认 1000\n * @param {Function} options.onProgress - 进度回调函数\n * @param {Function} options.onError - 错误回调函数\n */\n constructor(options = {}) {\n this.chunkSize = options.chunkSize || 50;\n this.maxRetries = options.maxRetries || 3;\n this.retryDelay = options.retryDelay || 1000;\n this.onProgress = options.onProgress || (() => {});\n this.onError = options.onError || (() => {});\n this.aborted = false;\n }\n\n /**\n * 执行恢复操作\n * \n * @param {Object} backupData - 备份数据对象\n * @returns {Promise} 恢复结果\n */\n async restore(backupData) {\n this.aborted = false;\n\n // 验证备份数据格式\n if (!backupData || !backupData.data) {\n throw new BatchOperationError(\n '备份文件格式无效',\n 'INVALID_BACKUP',\n false,\n '请选择有效的备份文件'\n );\n }\n\n const { files = {}, settings = {} } = backupData.data;\n const fileEntries = Object.entries(files);\n const settingEntries = Object.entries(settings);\n \n const totalFiles = fileEntries.length;\n const totalSettings = settingEntries.length;\n const totalItems = totalFiles + totalSettings;\n\n let restoredFiles = 0;\n let restoredSettings = 0;\n let failedFiles = 0;\n let failedSettings = 0;\n\n try {\n // 1. 分批恢复文件数据\n this.onProgress({\n phase: 'restoring_files',\n message: '正在恢复文件数据...',\n current: 0,\n total: totalItems\n });\n\n const fileChunks = this.splitIntoChunks(fileEntries, this.chunkSize);\n \n for (let i = 0; i < fileChunks.length; i++) {\n if (this.aborted) {\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\n }\n\n const chunk = fileChunks[i];\n const chunkData = Object.fromEntries(chunk);\n \n const result = await this.uploadChunkWithRetry('files', chunkData);\n restoredFiles += result.restoredCount;\n failedFiles += result.failedCount;\n\n this.onProgress({\n phase: 'restoring_files',\n message: `正在恢复文件数据 ${restoredFiles}/${totalFiles}...`,\n current: restoredFiles,\n total: totalItems,\n percentage: (restoredFiles / totalItems) * 80\n });\n }\n\n // 2. 分批恢复系统设置\n this.onProgress({\n phase: 'restoring_settings',\n message: '正在恢复系统设置...',\n current: restoredFiles,\n total: totalItems\n });\n\n const settingChunks = this.splitIntoChunks(settingEntries, this.chunkSize);\n \n for (let i = 0; i < settingChunks.length; i++) {\n if (this.aborted) {\n throw new BatchOperationError('操作已取消', 'ABORTED', false, '');\n }\n\n const chunk = settingChunks[i];\n const chunkData = Object.fromEntries(chunk);\n \n const result = await this.uploadChunkWithRetry('settings', chunkData);\n restoredSettings += result.restoredCount;\n failedSettings += result.failedCount;\n\n this.onProgress({\n phase: 'restoring_settings',\n message: `正在恢复系统设置 ${restoredSettings}/${totalSettings}...`,\n current: restoredFiles + restoredSettings,\n total: totalItems,\n percentage: 80 + (restoredSettings / totalSettings) * 20\n });\n }\n\n // 3. 完成\n this.onProgress({\n phase: 'completed',\n message: '恢复完成',\n current: totalItems,\n total: totalItems,\n percentage: 100\n });\n\n return {\n success: true,\n restoredFiles,\n restoredSettings,\n failedFiles,\n failedSettings,\n backupTimestamp: backupData.timestamp\n };\n\n } catch (error) {\n const batchError = error instanceof BatchOperationError\n ? error\n : new BatchOperationError(\n error.message || '恢复失败',\n 'RESTORE_ERROR',\n true,\n '请稍后重试'\n );\n this.onError(batchError);\n throw batchError;\n }\n }\n\n /**\n * 将数组分割为多个块\n */\n splitIntoChunks(entries, chunkSize) {\n const chunks = [];\n for (let i = 0; i < entries.length; i += chunkSize) {\n chunks.push(entries.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * 带重试机制的分块上传\n */\n async uploadChunkWithRetry(type, data) {\n let lastError;\n\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n return await this.uploadChunk(type, data);\n } catch (error) {\n lastError = error;\n\n if (error instanceof BatchOperationError) {\n if (error.code === 'AUTH_FAILED' ||\n error.code === 'FORBIDDEN' ||\n error.code === 'ABORTED') {\n throw error;\n }\n }\n\n if (attempt < this.maxRetries) {\n const delay = this.retryDelay * Math.pow(2, attempt - 1);\n await this.sleep(delay);\n }\n }\n }\n\n throw lastError;\n }\n\n /**\n * 上传单个分块\n */\n async uploadChunk(type, data) {\n try {\n const response = await fetchWithAuth('/api/manage/batch/restore/chunk', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ type, data })\n });\n\n if (!response.ok) {\n let errorDetails = '';\n try {\n const errorData = await response.json();\n errorDetails = errorData.error || '';\n } catch {\n // 忽略 JSON 解析错误\n }\n throw this.createHttpError(response.status, errorDetails);\n }\n\n const result = await response.json();\n\n if (!result.success) {\n throw new BatchOperationError(\n result.error || '恢复分块失败',\n 'CHUNK_RESTORE_FAILED',\n true,\n '请稍后重试'\n );\n }\n\n return result;\n } catch (error) {\n if (error instanceof BatchOperationError) {\n throw error;\n }\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new BatchOperationError(\n '网络连接失败',\n 'NETWORK_ERROR',\n true,\n '请检查网络连接后重试'\n );\n }\n throw new BatchOperationError(\n error.message || '恢复分块失败',\n 'CHUNK_RESTORE_FAILED',\n true,\n '请稍后重试'\n );\n }\n }\n\n /**\n * 根据 HTTP 状态码创建错误对象\n */\n createHttpError(status, details = '') {\n switch (status) {\n case 401:\n return new BatchOperationError(\n '认证失败,请重新登录',\n 'AUTH_FAILED',\n false,\n '请刷新页面并重新登录'\n );\n case 403:\n return new BatchOperationError(\n '权限不足或请求被拒绝',\n 'FORBIDDEN',\n false,\n '请确认您有管理员权限'\n );\n case 400:\n return new BatchOperationError(\n `请求数据无效: ${details}`,\n 'INVALID_DATA',\n true,\n '请检查备份文件格式'\n );\n case 500:\n default:\n return new BatchOperationError(\n `服务器错误: ${details || status}`,\n 'SERVER_ERROR',\n true,\n '请稍后重试'\n );\n }\n }\n\n /**\n * 延迟执行\n */\n sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n /**\n * 取消当前操作\n */\n abort() {\n this.aborted = true;\n }\n}\n\nexport default RestoreProcessor;\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}","/**\n * Token 过期时间工具模块\n * 提供 Token 有效期计算、状态判定和向后兼容默认值填充功能\n */\n\n/**\n * 时间单位到毫秒的映射(月和年需要特殊处理)\n */\nconst SIMPLE_UNIT_MS = {\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n};\n\n/**\n * 根据基准时间、数值和时间单位计算过期时间\n * @param {Date|string} baseTime - 基准时间(Date 对象或 ISO 8601 字符串)\n * @param {number} value - 正整数有效期数值\n * @param {string} unit - 时间单位:'s','m','h','d','M','Y'\n * @returns {string} 过期时间 ISO 8601 字符串\n * @throws {Error} 当 value <= 0 或 unit 无效时抛出错误\n */\nexport function computeExpiresAt(baseTime, value, unit) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error('有效期数值必须大于 0');\n }\n\n const base = typeof baseTime === 'string' ? new Date(baseTime) : new Date(baseTime.getTime());\n\n if (SIMPLE_UNIT_MS[unit]) {\n return new Date(base.getTime() + value * SIMPLE_UNIT_MS[unit]).toISOString();\n }\n\n if (unit === 'M') {\n base.setUTCMonth(base.getUTCMonth() + value);\n return base.toISOString();\n }\n\n if (unit === 'Y') {\n base.setUTCFullYear(base.getUTCFullYear() + value);\n return base.toISOString();\n }\n\n throw new Error(`无效的时间单位: ${unit}`);\n}\n\n\n/**\n * 格式化过期时间为可读字符串\n * @param {string} isoString - ISO 8601 时间字符串\n * @returns {string} 格式化后的时间字符串\n */\nfunction formatExpiresTime(isoString) {\n const date = new Date(isoString);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n}\n\n/**\n * 获取 Token 的状态信息\n * @param {string|null} expiresAt - 过期时间 ISO 8601 字符串,null 表示永不过期\n * @param {Date} [now=new Date()] - 当前时间\n * @returns {{ status: 'active'|'expired', label: '有效'|'已过期', expiresText: string }}\n */\nexport function getTokenStatus(expiresAt, now = new Date()) {\n if (expiresAt === null || expiresAt === undefined) {\n return {\n status: 'active',\n label: '有效',\n expiresText: '永不过期',\n };\n }\n\n const expiresDate = new Date(expiresAt);\n const currentTime = now instanceof Date ? now : new Date(now);\n const formattedTime = formatExpiresTime(expiresAt);\n\n if (currentTime.getTime() > expiresDate.getTime()) {\n return {\n status: 'expired',\n label: '已过期',\n expiresText: formattedTime,\n };\n }\n\n return {\n status: 'active',\n label: '有效',\n expiresText: formattedTime,\n };\n}\n\n\n/**\n * 为缺少过期相关字段的旧 Token 数据填充默认值\n * @param {Object} tokenData - Token 数据对象\n * @returns {Object} 填充默认值后的新 Token 数据对象\n */\nexport function applyTokenDefaults(tokenData) {\n return {\n ...tokenData,\n expiresAt: tokenData.expiresAt ?? null,\n autoDelete: tokenData.autoDelete ?? false,\n };\n}\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.e05f38bd.js","mappings":"gYACA,MAAMA,EAAa,CACjBC,MAAO,aAEHC,EAAa,CAAC,WACdC,EAAa,CACjBF,MAAO,aAEF,SAASG,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACvD,OAAO,WAAc,QAAoB,MAAO,CAC9CV,OAAO,QAAgB,CAAC,oBAAqB,CAC3C,eAAgBM,EAAOK,cAEzBC,IAAK,UACLC,OAAO,QAAgBJ,EAASK,eAC/B,EAAC,QAAoB,MAAOf,EAAY,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYS,EAAMO,UAAWC,KACxH,WAAc,QAAoB,MAAO,CAC9CC,IAAKD,EAAKE,MACVlB,OAAO,QAAgB,CAAC,YAAa,CACnC,YAAaM,EAAOa,cAAgBH,EAAKE,SAE3CE,QAASC,GAAUZ,EAASa,aAAaN,EAAKE,QAC7C,EAAC,QAAaR,EAA8B,CAC7Ca,KAAMP,EAAKO,KACXvB,MAAO,aACN,KAAM,EAAG,CAAC,UAAU,QAAoB,OAAQE,GAAY,QAAiBE,EAAKoB,GAAGR,EAAKS,WAAY,IAAK,GAAIxB,KAChH,SAAS,QAAoB,MAAO,CACtCD,MAAO,gBACPoB,QAASf,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAASkB,gBAAkBlB,EAASkB,kBAAkBD,KACrG,EAAC,QAAahB,EAA8B,CAC7Ca,KAAMjB,EAAOK,WAAa,qBAAuB,qBAChD,KAAM,EAAG,CAAC,YAAa,EAC5B,CCjCA,OACEiB,KAAM,gBACNC,MAAO,CACLV,YAAa,CACXW,KAAMC,OACNC,QAAS,UAEXrB,WAAY,CACVmB,KAAMG,QACND,SAAS,IAGb,IAAAE,GACE,MAAO,CACLC,cAAe,KACfpB,UAAW,CAAC,CACVG,MAAO,SACPK,KAAM,YACNE,SAAU,8BACT,CACDP,MAAO,SACPK,KAAM,eACNE,SAAU,gCACT,CACDP,MAAO,WACPK,KAAM,SACNE,SAAU,kCACT,CACDP,MAAO,OACPK,KAAM,QACNE,SAAU,8BACT,CACDP,MAAO,SACPK,KAAM,MACNE,SAAU,gCAGhB,EACAW,SAAU,CACR,cAAAC,GACE,OAAOC,OAAOC,YAAc,IAAM,GAAK,EACzC,EACA,YAAAzB,GACE,OAAI0B,KAAK7B,WACA,CACL8B,MAAOD,KAAKH,eAAiB,MAG1BG,KAAKL,cAAgB,CAC1BM,MAAOD,KAAKL,cAAgB,MAC1B,CAAC,CACP,GAEFO,MAAO,CACL,iBACEF,KAAKG,UAAU,IAAMH,KAAKI,eAC5B,GAEFC,QAAS,CACP,cAAAlB,GACEa,KAAKM,MAAM,qBAAsBN,KAAK7B,WACxC,EACA,WAAAoC,GACE,MAAMC,EAAWV,OAAOC,YAAc,IACtCC,KAAKM,MAAM,oBAAqBE,EAClC,EACA,YAAA1B,CAAaJ,GACXsB,KAAKM,MAAM,qBAAsB5B,EACnC,EACA,YAAA0B,GACE,MAAMK,EAAKT,KAAKU,MAAMC,QACtB,IAAKF,EAAI,OAET,MAAMG,EAAYH,EAAGpC,MAAM4B,MACrBY,EAAiBJ,EAAGpC,MAAMyC,WAC1BC,EAAeN,EAAGO,UAAUC,SAAS,gBAC3CR,EAAGpC,MAAMyC,WAAa,OAClBC,GACFN,EAAGO,UAAUE,OAAO,gBAEtBT,EAAGpC,MAAM4B,MAAQ,OAEZQ,EAAGU,YACR,MAAMC,EAAUX,EAAGY,YAEnBZ,EAAGpC,MAAM4B,MAAQW,EACbG,GACFN,EAAGO,UAAUM,IAAI,gBAEdb,EAAGU,YACRV,EAAGpC,MAAMyC,WAAaD,EACtBb,KAAKL,cAAgByB,CACvB,GAEF,OAAAG,GACEvB,KAAKO,cACLP,KAAKG,UAAU,IAAMH,KAAKI,gBAC1BN,OAAO0B,iBAAiB,SAAUxB,KAAKO,YACzC,EACA,aAAAkB,GACE3B,OAAO4B,oBAAoB,SAAU1B,KAAKO,YAC5C,G,WC9FF,MAAMoB,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAShE,GAAQ,CAAC,YAAY,qBAEzF,Q,8DCRA,MAAM,EAAa,CACjBH,MAAO,aAEH,EAAa,CACjBA,MAAO,kBAEH,EAAa,CACjBA,MAAO,iBAEF,SAAS,EAAOI,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAM2D,EAA2B,IAC3B1D,GAA+B,QAAkB,qBACjD2D,EAAwB,KACxBC,EAAuB,KACvBC,EAA2B,EACjC,OAAO,WAAc,QAAoB,MAAO,EAAY,EAAC,QAAaD,EAAsB,KAAM,CACpGtC,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,EAAY,EAAC,QAAaoC,EAA0B,CACtGI,UAAW,kBACT,QAAoB,MAAO,EAAY,EAAC,QAAaH,EAAuB,CAC9EI,SAAUhE,EAASiE,eACnBC,QAASvE,EAAKoB,GAAG,oBACjBoD,UAAW,UACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,eACNvB,MAAO,cACPoB,QAASX,EAASoE,cACjB,KAAM,EAAG,CAAC,cACbC,EAAG,GACF,EAAG,CAAC,WAAY,kBACnBA,EAAG,KACD,QAAaP,EAA0B,CACzCpD,YAAaX,EAAMW,YACnB,uBAAwBd,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMW,YAAcE,GAChFV,WAAYH,EAAMuE,kBAClB,sBAAuB1E,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMuE,kBAAoB1D,IACpF,KAAM,EAAG,CAAC,cAAe,iBAAiB,WAAc,SAAa,QAAyBZ,EAASuE,kBAAmB,CAC3HhF,OAAO,QAAgB,CAAC,iBAAkB,CACxC,UAAaQ,EAAMuE,sBAEpB,KAAM,EAAG,CAAC,YACf,C,uHCzCA,MAAM,EAAa,CACjB/E,MAAO,uBAEH,EAAa,CACjBA,MAAO,kBAEH,EAAa,CACjBA,MAAO,yBAEHiF,EAAa,CAAC,cACdC,EAAa,CACjBlF,MAAO,wBAEHmF,EAAa,CAAC,cACdC,EAAa,CACjBpF,MAAO,mBAEHqF,EAAa,CAAC,cACdC,EAAa,CACjBtF,MAAO,kBAEHuF,EAAc,CAAC,cACfC,EAAc,CAClBxF,MAAO,qBAEHyF,EAAc,CAClBzF,MAAO,iBAEH0F,EAAc,CAAC,WACd,SAAS,EAAOtF,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACvD,OAAO,WAAc,QAAoB,MAAO,EAAY,EAAC,QAAoB,MAAO,EAAY,EAAC,QAAoB,MAAO,EAAY,EAAC,SAAgB,QAAoB,QAAS,CACxL,sBAAuBL,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMmF,WAAatE,GAC9ErB,MAAO,aACP8B,KAAM,OACN8D,UAAW,UACX,aAAcnF,EAASoF,eACvBC,SAAUzF,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAASsF,mBAAqBtF,EAASsF,qBAAqBrE,KAC5G,KAAM,GAAIuD,GAAa,CAAC,CAAC,KAAazE,EAAMmF,gBAAY,EAAQ,CACjEK,MAAM,OACF,QAAoB,OAAQd,GAAY,QAAiBzE,EAASwF,gBAAiB,IAAI,SAAgB,QAAoB,QAAS,CACxI,sBAAuB5F,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAM0F,SAAW7E,GAC5ErB,MAAO,aACP8B,KAAM,OACN8D,UAAW,UACX,aAAcnF,EAAS0F,aACvBL,SAAUzF,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAASsF,mBAAqBtF,EAASsF,qBAAqBrE,KAC5G,KAAM,GAAIyD,GAAa,CAAC,CAAC,KAAa3E,EAAM0F,cAAU,EAAQ,CAC/DF,MAAM,WACE,QAAoB,MAAOZ,EAAY,EAAC,QAAoB,SAAU,CAC9EtD,KAAM,SACN9B,MAAO,eACP,aAAcS,EAAS2F,mBACvBhF,QAASf,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAAS4F,mBAAqB5F,EAAS4F,qBAAqB3E,KAC3G,EAAC,QAAahB,EAA8B,CAC7Ca,KAAM,kBACH,EAAG8D,IAAa,QAAoB,MAAOC,GAAY,QAAiB7E,EAAS6F,YAAa,IAAI,QAAoB,SAAU,CACnIxE,KAAM,SACN9B,MAAO,eACP,aAAcS,EAAS8F,eACvBnF,QAASf,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAAS+F,eAAiB/F,EAAS+F,iBAAiB9E,KACnG,EAAC,QAAahB,EAA8B,CAC7Ca,KAAM,mBACH,EAAGgE,MAAgB,QAAoB,MAAOC,EAAa,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAY/E,EAASgG,cAAeC,KACpJ,WAAc,QAAoB,OAAQ,CAC/CzF,IAAKyF,IACJ,QAAiBA,GAAU,KAC5B,SAAS,QAAoB,MAAOjB,EAAa,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYhF,EAASkG,aAAcC,KACxI,WAAc,QAAoB,SAAU,CACjD3F,IAAK2F,EAAI3F,IACTa,KAAM,SACN9B,OAAO,QAAgB,CAAC,eAAgB,CACtC,YAAa4G,EAAIC,eACjB,WAAYD,EAAIE,QAChB,iBAAkBF,EAAI3F,MAAQT,EAAMuG,WACpC,eAAgBH,EAAI3F,MAAQT,EAAMwG,SAClC,cAAevG,EAASwG,UAAUL,EAAI3F,QAExCG,QAASC,GAAUZ,EAASyG,UAAUN,EAAI3F,OACzC,QAAiB2F,EAAIO,YAAa,GAAIzB,KACvC,SACN,CClFA,MAAM0B,EAAS,MACf,SAASC,EAAYC,GACnB,OAAOvF,OAAOuF,GAAOC,SAAS,EAAG,IACnC,CACA,SAASC,EAAcC,GACrB,MAAO,GAAGA,EAAKC,iBAAiBL,EAAYI,EAAKE,WAAa,MAAMN,EAAYI,EAAKG,YACvF,CACA,SAASC,EAAaP,GACpB,GAAqB,kBAAVA,EAAoB,OAAO,KACtC,MAAMQ,EAAQR,EAAMtB,OAAO8B,MAAM,uCACjC,IAAKA,EAAO,OAAO,KACnB,MAAMC,EAAOC,OAAOF,EAAM,IACpBG,EAAQD,OAAOF,EAAM,IAAM,EAC3BlB,EAAMoB,OAAOF,EAAM,IACnBL,EAAO,IAAIS,KAAKH,EAAME,EAAOrB,GACnC,OAAIa,EAAKC,gBAAkBK,GAAQN,EAAKE,aAAeM,GAASR,EAAKG,YAAchB,EAC1E,MAETa,EAAKU,SAAS,EAAG,EAAG,EAAG,GAChBV,EACT,CACA,SAASW,EAAWX,EAAMY,GACxB,OAAO,IAAIH,KAAKT,EAAKC,cAAeD,EAAKE,WAAaU,EAAQ,EAChE,CACA,OACEzG,KAAM,oBACNC,MAAO,CACLyG,WAAY,CACVxG,KAAMyG,MACNvG,QAAS,IAAM,KAGnBwG,MAAO,CAAC,oBAAqB,UAC7B,IAAAtG,GACE,MAAMuG,EAAQ,IAAIP,KAElB,OADAO,EAAMN,SAAS,EAAG,EAAG,EAAG,GACjB,CACLO,YAAaD,EAAMf,cACnBiB,aAAcF,EAAMd,WACpBZ,WAAY,GACZC,SAAU,GACVrB,WAAY,GACZO,SAAU,GACV0C,aAAa,EAEjB,EACAxG,SAAU,CACR,kBAAAgE,GACE,OAAO5D,KAAKhB,GAAG,kCACjB,EACA,cAAA+E,GACE,OAAO/D,KAAKhB,GAAG,8BACjB,EACA,cAAAqE,GACE,OAAOrD,KAAKhB,GAAG,8BACjB,EACA,YAAA2E,GACE,OAAO3D,KAAKhB,GAAG,4BACjB,EACA,cAAAyE,GACE,OAAOzD,KAAKhB,GAAG,mCACjB,EACA,UAAA8E,GACE,OAAO9D,KAAKhB,GAAG,+BAAgC,CAC7CuG,KAAMvF,KAAKkG,YACXT,MAAOZ,EAAY7E,KAAKmG,aAAe,IAE3C,EACA,aAAAlC,GACE,MAAO,CAACjE,KAAKhB,GAAG,gCAAiCgB,KAAKhB,GAAG,gCAAiCgB,KAAKhB,GAAG,gCAAiCgB,KAAKhB,GAAG,gCAAiCgB,KAAKhB,GAAG,gCAAiCgB,KAAKhB,GAAG,gCAAiCgB,KAAKhB,GAAG,gCACxQ,EACA,YAAAmF,GACE,MAAMkC,EAAa,IAAIX,KAAK1F,KAAKkG,YAAalG,KAAKmG,aAAc,GAC3DG,EAAQ,IAAIZ,KAAK1F,KAAKkG,YAAalG,KAAKmG,aAAc,EAAIE,EAAWE,UACrEC,EAAWxB,EAAc,IAAIU,MACnC,OAAOK,MAAMU,KAAK,CAChBC,OAAQ,IACP,CAACpE,EAAG5D,KACL,MAAMuG,EAAO,IAAIS,KAAKY,EAAMK,UAAYjI,EAAQkG,GAC1CnG,EAAMuG,EAAcC,GAC1B,MAAO,CACLxG,MACAkG,WAAYM,EAAKG,UACjBf,eAAgBY,EAAKE,aAAenF,KAAKmG,aACzC7B,QAAS7F,IAAQ+H,IAGvB,GAEFtG,MAAO,CACL4F,WAAY,CACVc,WAAW,EACX,OAAAC,CAAQ/B,GACN9E,KAAK8G,cAAchC,EACrB,IAGJzE,QAAS,CACP,aAAAyG,CAAchC,GACZ,MAAMiC,EAAY1B,EAAaP,IAAQ,IACjCkC,EAAU3B,EAAaP,IAAQ,IACrC9E,KAAKuE,WAAawC,EAAY/B,EAAc+B,GAAa,GACzD/G,KAAKwE,SAAWwC,EAAUhC,EAAcgC,GAAW,GACnDhH,KAAKmD,WAAanD,KAAKuE,WACvBvE,KAAK0D,SAAW1D,KAAKwE,SACrBxE,KAAKoG,aAAc,EACnB,MAAMa,EAAcF,GAAaC,EAC7BC,IACFjH,KAAKkG,YAAce,EAAY/B,cAC/BlF,KAAKmG,aAAec,EAAY9B,WAEpC,EACA,iBAAAtB,GACE,MAAMoB,EAAOW,EAAW,IAAIF,KAAK1F,KAAKkG,YAAalG,KAAKmG,aAAc,IAAK,GAC3EnG,KAAKkG,YAAcjB,EAAKC,cACxBlF,KAAKmG,aAAelB,EAAKE,UAC3B,EACA,aAAAnB,GACE,MAAMiB,EAAOW,EAAW,IAAIF,KAAK1F,KAAKkG,YAAalG,KAAKmG,aAAc,GAAI,GAC1EnG,KAAKkG,YAAcjB,EAAKC,cACxBlF,KAAKmG,aAAelB,EAAKE,UAC3B,EACA,SAAAT,CAAUjG,GACR,IAAKuB,KAAKuE,YAAcvE,KAAKwE,WAAaxE,KAAKoG,YAM7C,OALApG,KAAKuE,WAAa9F,EAClBuB,KAAKwE,SAAW,GAChBxE,KAAKmD,WAAa1E,EAClBuB,KAAK0D,SAAW,QAChB1D,KAAKoG,aAAc,GAGrB,MAAMc,EAAQzI,EAAMuB,KAAKuE,WAAa,CAAC9F,EAAKuB,KAAKuE,YAAc,CAACvE,KAAKuE,WAAY9F,GACjFuB,KAAKuE,WAAa2C,EAAM,GACxBlH,KAAKwE,SAAW0C,EAAM,GACtBlH,KAAKmD,WAAa+D,EAAM,GACxBlH,KAAK0D,SAAWwD,EAAM,GACtBlH,KAAKoG,aAAc,EACnBpG,KAAKmH,YAAYD,EACnB,EACA,iBAAA3D,GACE,MAAMwD,EAAY1B,EAAarF,KAAKmD,YAC9B6D,EAAU3B,EAAarF,KAAK0D,UAClC,IAAKqD,IAAcC,EAAS,OAC5B,MAAMI,EAAWpC,EAAc+B,GACzBM,EAASrC,EAAcgC,GACvBE,EAAQE,GAAYC,EAAS,CAACD,EAAUC,GAAU,CAACA,EAAQD,GACjEpH,KAAKuE,WAAa2C,EAAM,GACxBlH,KAAKwE,SAAW0C,EAAM,GACtBlH,KAAKmD,WAAa+D,EAAM,GACxBlH,KAAK0D,SAAWwD,EAAM,GACtBlH,KAAKoG,aAAc,EACnBpG,KAAKkG,YAAca,EAAU7B,cAC7BlF,KAAKmG,aAAeY,EAAU5B,WAC9BnF,KAAKmH,YAAYD,EACnB,EACA,WAAAC,CAAYD,GACVlH,KAAKM,MAAM,oBAAqB4G,GAChClH,KAAKM,MAAM,SAAU4G,EACvB,EACA,SAAAzC,CAAUhG,GACR,OAAOgB,QAAQO,KAAKuE,YAAcvE,KAAKwE,UAAY/F,EAAMuB,KAAKuE,YAAc9F,EAAMuB,KAAKwE,SACzF,IC1JJ,MAAM,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,Q,kDCRA,MAAM,EAAa,CACjBhH,MAAO,gBAEH,EAAa,CACjBA,MAAO,kBAEH,EAAa,CACjBA,MAAO,aAEH,EAAa,CACjBA,MAAO,gBAEH,EAAa,CACjBA,MAAO,cAEH,GAAa,CACjBA,MAAO,cAEH,GAAa,CACjBA,MAAO,iBAEH,GAAa,CACjBA,MAAO,8BAEH,GAAa,CACjBA,MAAO,aAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBA,MAAO,cAEH,GAAc,CAClBA,MAAO,cAEH,GAAc,CAClBA,MAAO,iBAEH8J,GAAc,CAClB9J,MAAO,aAEH+J,GAAc,CAClB/J,MAAO,gBAEHgK,GAAc,CAClBhK,MAAO,cAEHiK,GAAc,CAClBjK,MAAO,cAEHkK,GAAc,CAClBlK,MAAO,iBAEHmK,GAAc,CAClBnK,MAAO,kBAEHoK,GAAc,CAClBpK,MAAO,+BAEHqK,GAAc,CAClBrK,MAAO,mCAEHsK,GAAc,CAClBtK,MAAO,eAEHuK,GAAc,CAClBvK,MAAO,kBAEHwK,GAAc,CAClBxK,MAAO,oBAEHyK,GAAc,CAClBzK,MAAO,qCAEH0K,GAAc,CAClBzJ,IAAK,EACLjB,MAAO,iCAEH2K,GAAc,CAClB1J,IAAK,EACLjB,MAAO,sBAEH4K,GAAc,CAClB5K,MAAO,cAEH6K,GAAc,CAClB7K,MAAO,gBAEH8K,GAAc,CAClB9K,MAAO,iBAEH+K,GAAc,CAClB9J,IAAK,EACLjB,MAAO,eAEHgL,GAAc,CAClB/J,IAAK,EACLjB,MAAO,uBAEHiL,GAAc,CAClBjL,MAAO,qBAEHkL,GAAc,CAClBlL,MAAO,qBAEHmL,GAAc,CAClBnL,MAAO,gBAEHoL,GAAc,CAClBpL,MAAO,gBAEHqL,GAAc,CAClBrL,MAAO,gBAEHsL,GAAc,CAClBtL,MAAO,gBAEHuL,GAAc,CAClBvL,MAAO,gBAEHwL,GAAc,CAClBxL,MAAO,kBAEHyL,GAAc,CAClBzL,MAAO,cAEH0L,GAAc,CAClB1L,MAAO,gBAEH2L,GAAc,CAClB3L,MAAO,iBAEH4L,GAAc,CAClB3K,IAAK,EACLjB,MAAO,eAEH6L,GAAc,CAClB5K,IAAK,EACLjB,MAAO,uBAEH8L,GAAc,CAClB9L,MAAO,qBAEH+L,GAAc,CAClB/L,MAAO,qBAEHgM,GAAc,CAClBhM,MAAO,gBAEHiM,GAAc,CAClBjM,MAAO,gBAEHkM,GAAc,CAClBlM,MAAO,gBAEHmM,GAAc,CAClBnM,MAAO,gBAEHoM,GAAc,CAClBpM,MAAO,gBAEHqM,GAAc,CAClBrM,MAAO,kBAEHsM,GAAc,CAClBtM,MAAO,mBAEHuM,GAAc,CAClBvM,MAAO,eAEHwM,GAAc,CAClBxM,MAAO,iBAEHyM,GAAc,CAClBzM,MAAO,kBAEH0M,GAAc,CAClBzL,IAAK,EACLjB,MAAO,sBAEH2M,GAAc,CAClB3M,MAAO,mBAEH4M,GAAc,CAClB5M,MAAO,kBAEH6M,GAAc,CAClB7M,MAAO,uBAEH8M,GAAc,CAClB9M,MAAO,oBAEH+M,GAAc,CAClB9L,IAAK,EACLjB,MAAO,kBAEHgN,GAAc,CAClB/L,IAAK,EACLjB,MAAO,iBAEHiN,GAAc,CAClBhM,IAAK,EACLjB,MAAO,oBAEHkN,GAAc,CAClBjM,IAAK,EACLjB,MAAO,mBAEHmN,GAAc,CAClBnN,MAAO,cAEHoN,GAAc,CAClBpN,MAAO,iBAEHqN,GAAc,CAClBrN,MAAO,iBAEHsN,GAAc,CAClBrM,IAAK,EACLjB,MAAO,oBAEHuN,GAAc,CAClBvN,MAAO,iBAEHwN,GAAc,CAClBvM,IAAK,EACLjB,MAAO,kBAEHyN,GAAc,CAClBzN,MAAO,mBAEH0N,GAAc,CAClBzM,IAAK,EACLjB,MAAO,qBAEH2N,GAAc,CAAC,OACfC,GAAc,CAClB3M,IAAK,EACLjB,MAAO,oBAEH6N,GAAc,CAClB7N,MAAO,oBAEH8N,GAAc,CAClB9N,MAAO,oBAEH+N,GAAc,CAClB/N,MAAO,aAEHgO,GAAc,CAClBhO,MAAO,aAEHiO,GAAc,CAAC,OACfC,GAAc,CAClBjN,IAAK,EACLjB,MAAO,oBAEHmO,GAAc,CAClBnO,MAAO,4BAEHoO,GAAc,CAClBpO,MAAO,oBAEHqO,GAAc,CAClBrO,MAAO,aAEHsO,GAAc,CAClBtO,MAAO,aAEF,SAAS,GAAOI,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACjD6N,EAAuB,KACvBC,EAA6B,KAC7BC,EAA4B,KAC5BC,EAA+B,EAC/BC,EAAuB,KACvBC,GAAkB,QAAkB,QACpCC,GAAsB,QAAkB,YACxCC,EAAyB,KACzBzK,EAAwB,KACxB0K,EAAsB,KACtBC,EAAqB,IAC3B,OAAO,UAAiB,WAAc,QAAoB,MAAO,EAAY,EAAC,QAAoB,MAAO,EAAY,EAAC,QAAoB,MAAO,CAC/IhP,MAAO,4BACPoB,QAASf,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAASwO,gBAAkBxO,EAASwO,kBAAkBvN,KACrG,EAAC,QAAoB,MAAO,EAAY,EAAC,QAAahB,EAA8B,CACrFa,KAAM,gBACF,QAAoB,MAAO,EAAY,EAAC,QAAoB,MAAO,GAAY,QAAiBnB,EAAKoB,GAAG,yBAA0B,IAAI,QAAoB,MAAO,IAAY,QAAiBhB,EAAM0O,UAAUC,YAAYC,kBAAoB,KAAM,IAAI,QAAoB,MAAO,IAAY,QAAiBhP,EAAKoB,GAAG,6BAA8B,QAAQ,QAAoB,MAAO,GAAY,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAad,EAA8B,CAC7da,KAAM,aACF,QAAoB,MAAO,GAAa,EAAC,QAAoB,MAAO,IAAa,QAAiBnB,EAAKoB,GAAG,8BAA+B,IAAI,QAAoB,MAAO,IAAa,QAAiBf,EAAS4O,WAAW7O,EAAM0O,UAAUI,cAAe,IAAI,QAAoB,MAAO,IAAa,QAAiB7O,EAAS8O,WAAW/O,EAAM0O,UAAUI,cAAe,QAAQ,QAAoB,MAAO,CAChZtP,MAAO,+BACPoB,QAASf,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAAS+O,cAAgB/O,EAAS+O,gBAAgB9N,KACjG,EAAC,QAAoB,MAAOoI,GAAa,EAAC,QAAapJ,EAA8B,CACtFa,KAAM,mBACF,QAAoB,MAAOwI,GAAa,EAAC,QAAoB,MAAOC,IAAa,QAAiB5J,EAAKoB,GAAG,4BAA6B,IAAI,QAAoB,MAAOyI,GAAa,KAAM,QAAiBzJ,EAAMiP,SAAU,IAAI,QAAoB,MAAOvF,IAAa,QAAiB9J,EAAKoB,GAAG,mCAAoC,UAAU,QAAoB,MAAO2I,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAa5J,EAA8B,CAChiBa,KAAM,gBACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,0BAA2B,IAAI,QAAa+M,EAAsB,CAC/HvO,MAAO,qBACP0P,OAAQ,GACR,aAActP,EAAKoB,GAAG,6BACtBJ,QAASX,EAASkP,qBACjB,CACD3N,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,eAERuD,EAAG,GACF,EAAG,CAAC,aAAc,eAAe,QAAoB,MAAOyF,GAAa,EAAC,QAAakE,EAA2B,CACnHnG,WAAY9H,EAAMoP,aAClB,sBAAuBvP,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMoP,aAAevO,GAChFwO,KAAM,QACN7P,MAAO,qBACP,aAAcI,EAAKoB,GAAG,iCACrB,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAawM,EAA4B,CAChEsB,MAAO,WACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,4BAA6B,KAChGsD,EAAG,KACD,QAAa0J,EAA4B,CAC3CsB,MAAO,eACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,4BAA6B,KAChGsD,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,aAAc,oBAAoB,QAAa6J,EAAsB,CAC1ErG,WAAY9H,EAAMuP,uBAClB,sBAAuB1P,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMuP,uBAAyB1O,GAC1F2O,MAAO5P,EAAKoB,GAAG,6BACfiB,MAAOhC,EAASwP,qBAChBjQ,MAAO,oBACP,eAAgB,GAChB,iBAAkB,IACjB,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAOwI,GAAa,EAAC,QAAakE,EAA8B,CAC3GpG,WAAY9H,EAAM0P,eAClB,sBAAuB7P,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAM0P,eAAiB7O,GAClFyE,SAAUrF,EAAS0P,4BAClB,KAAM,EAAG,CAAC,aAAc,iBAC3BrL,EAAG,GACF,EAAG,CAAC,aAAc,QAAS,WAAW,QAAoB,MAAO2F,GAAa,CAAEhK,EAAS2P,eAEE,WAAc,QAAoB,MAAOzF,GAAa,EAAC,QAAaiE,EAAiB,CACjL1M,KAAMzB,EAAS4P,qBACfC,QAAS7P,EAAS8P,kBACjB,KAAM,EAAG,CAAC,OAAQ,iBALuF,WAAc,QAAoB,MAAO7F,GAAa,EAAC,QAAahK,EAA8B,CAC5Ma,KAAM,WACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,qBAAsB,WAG5C,QAAoB,MAAOoJ,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAanK,EAA8B,CACpKa,KAAM,eACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,kCAAmC,MAAM,QAAoB,MAAOsJ,GAAa,CAA4D,IAA3D0F,OAAOC,KAAKjQ,EAAM0O,UAAUwB,cAAgB,CAAC,GAAGxH,SAAgB,WAAc,QAAoB,MAAO6B,GAAa,EAAC,QAAarK,EAA8B,CACjTa,KAAM,WACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,qBAAsB,QAAS,WAAc,QAAoB,MAAOwJ,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAa4D,EAAqB,CAC9N3M,KAAMzB,EAASkQ,iBACfL,QAAS7P,EAASmQ,cACjB,KAAM,EAAG,CAAC,OAAQ,aAAa,QAAoB,MAAO1F,GAAa,EAAC,QAAoB,MAAOC,IAAa,QAAiB3K,EAAM0O,UAAUC,YAAYC,kBAAoB,KAAM,IAAI,QAAoB,MAAOhE,IAAa,QAAiBhL,EAAKoB,GAAG,8BAA+B,QAAQ,QAAoB,MAAO6J,GAAa,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAY7K,EAAM0O,UAAUwB,aAAc,CAACG,EAAOC,EAAS5P,MACzb,WAAc,QAAoB,MAAO,CAC9CD,IAAK6P,EACL9Q,MAAO,eACN,EAAC,QAAoB,OAAQ,CAC9BA,MAAO,eACPa,OAAO,QAAgB,CACrBkQ,WAAYtQ,EAASuQ,cAAc9P,MAEpC,KAAM,IAAI,QAAoB,OAAQoK,IAAa,QAAiBwF,GAAU,IAAI,QAAoB,OAAQvF,IAAa,QAAiBsF,EAAMzB,kBAAmB,IAAI,QAAoB,OAAQ5D,IAAa,QAAiB/K,EAASwQ,cAAcJ,EAAOrQ,EAAM0O,UAAUC,aAAe,IAAK,OACtS,gBAAgB,QAAoB,MAAO1D,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAahL,EAA8B,CAC/Ia,KAAM,cACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,qCAAsC,MAAM,QAAoB,MAAOmK,GAAa,CAAyD,IAAxD6E,OAAOC,KAAKjQ,EAAM0O,UAAUgC,WAAa,CAAC,GAAGhI,SAAgB,WAAc,QAAoB,MAAO0C,GAAa,EAAC,QAAalL,EAA8B,CACjTa,KAAM,WACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,qBAAsB,QAAS,WAAc,QAAoB,MAAOqK,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAa+C,EAAqB,CAC9N3M,KAAMzB,EAAS0Q,cACfb,QAAS7P,EAASmQ,cACjB,KAAM,EAAG,CAAC,OAAQ,aAAa,QAAoB,MAAO7E,GAAa,EAAC,QAAoB,MAAOC,IAAa,QAAiBwE,OAAOC,KAAKjQ,EAAM0O,UAAUgC,WAAWhI,QAAS,IAAI,QAAoB,MAAO+C,IAAa,QAAiB7L,EAAKoB,GAAG,0BAA2B,QAAQ,QAAoB,MAAO0K,GAAa,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYzL,EAAS2Q,oBAAqB,CAACP,EAAOQ,EAAQnQ,MAC9a,WAAc,QAAoB,MAAO,CAC9CD,IAAKoQ,EACLrR,MAAO,eACN,EAAC,QAAoB,OAAQ,CAC9BA,MAAO,eACPa,OAAO,QAAgB,CACrBkQ,WAAYtQ,EAAS6Q,kBAAkBpQ,MAExC,KAAM,IAAI,QAAoB,OAAQiL,IAAa,QAAiBkF,GAAS,IAAI,QAAoB,OAAQjF,IAAa,QAAiByE,EAAMzB,kBAAmB,IAAI,QAAoB,OAAQ/C,IAAa,QAAiB5L,EAASwQ,cAAcJ,EAAOrQ,EAAM0O,UAAUC,aAAe,IAAK,OACrS,kBAAkB,QAAoB,MAAO7C,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAa9L,EAA8B,CAC1La,KAAM,WACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,gCAAiC,MAAM,QAAoB,MAAOiL,GAAa,CAACjM,EAAM+Q,eAAgB,WAAc,QAAoB,MAAO7E,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAoB,OAAQC,IAAa,QAAiBnM,EAAS+Q,kBAAmB,IAAI,QAAoB,OAAQ3E,IAAa,QAAiB4E,KAAKC,MAAMlR,EAAMmR,mBAAmBC,aAAe,IAAK,MAAM,QAAa9C,EAAwB,CAC1f8C,WAAYpR,EAAMmR,mBAAmBC,WACrC,eAAgB,GAChB,aAAa,EACb5R,MAAO,gBACN,KAAM,EAAG,CAAC,gBAAgB,QAAoB,MAAO8M,GAAa,CAACtM,EAAMmR,mBAAmBE,QAAU,IAAK,WAAc,QAAoB,OAAQ9E,GAAa,EAAC,QAAarM,EAA8B,CAC/Ma,KAAM,cACJ,QAAiB,KAAM,QAAiBf,EAAMmR,mBAAmBE,QAAQzC,kBAAoB,IAAK,GAAI5O,EAAMmR,mBAAmBG,MAAQ,IAAK,WAAc,QAAoB,KAAW,CAC3L7Q,IAAK,GACJ,EAAC,QAAiB,OAAQ,QAAiBT,EAAMmR,mBAAmBG,MAAM1C,kBAAmB,IAAK,MAAO,QAAoB,IAAI,IAAO,QAAiB,KAAM,QAAiBhP,EAAKoB,GAAG,sBAAuB,OAAQ,QAAoB,IAAI,GAAOf,EAASsR,yBAA0B,WAAc,QAAoB,OAAQ/E,GAAa,EAAC,QAAatM,EAA8B,CAC7Xa,KAAM,WACJ,QAAiB,KAAM,QAAiBd,EAASsR,wBAAyB,OAAQ,QAAoB,IAAI,KAASvR,EAAMmR,mBAAmBK,UAAW,WAAc,QAAoB,MAAO/E,IAAa,QAAiBzM,EAAMmR,mBAAmBK,SAAU,KAAM,QAAoB,IAAI,IAAO,QAAazD,EAAsB,CAC3UzM,KAAM,SACNmQ,MAAO,GACPpC,KAAM,QACNzO,QAASX,EAASyR,gBAClBlS,MAAO,cACN,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,WACJ,QAAiB,KAAM,QAAiBnB,EAAKoB,GAAG,8BAA+B,KACnFsD,EAAG,GACF,EAAG,CAAC,eAAiBtE,EAAM2R,kBAAmB,WAAc,QAAoB,MAAOjF,GAAa,EAAC,QAAoB,MAAOC,GAAa,EAAC,QAAazM,EAA8B,CAC1La,KAAM,4BACF,QAAoB,MAAO6L,GAAa,EAAC,QAAoB,MAAOC,IAAa,QAAiB7M,EAAM2R,gBAAgBH,SAAU,GAAIxR,EAAM2R,gBAAgBC,aAAc,WAAc,QAAoB,MAAO9E,IAAa,QAAiB9M,EAAM2R,gBAAgBC,YAAa,KAAM,QAAoB,IAAI,MAAS,QAAoB,MAAO7E,GAAa,CAAC/M,EAAM2R,gBAAgBE,cAAe,WAAc,QAAa9D,EAAsB,CAC9btN,IAAK,EACLa,KAAM,UACN+N,KAAM,QACNzO,QAASX,EAAS6R,gBACjB,CACDtQ,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,UACJ,QAAiB,KAAM,QAAiBnB,EAAKoB,GAAG,oBAAqB,KACzEsD,EAAG,GACF,EAAG,CAAC,cAAe,QAAoB,IAAI,IAAO,QAAayJ,EAAsB,CACtFzM,KAAM,UACN+N,KAAM,QACNzO,QAASX,EAAS8R,cACjB,CACDvQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,oBAAqB,KACxFsD,EAAG,GACF,EAAG,CAAC,mBAAoB,WAAc,QAAoB,MAAO0I,GAAa,EAAC,QAAanJ,EAAuB,CACpHM,QAASvE,EAAKoB,GAAG,4BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAauM,EAAsB,CAC1DzM,KAAM,UACN0Q,QAAShS,EAAMiS,WACfhO,SAAUjE,EAAM+Q,aAChBnQ,QAASX,EAASiS,aAClB1S,MAAO,0BACN,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,cACJ,QAAiB,KAAM,QAAiBf,EAAMiS,WAAarS,EAAKoB,GAAG,wBAA0BpB,EAAKoB,GAAG,2BAA4B,KACrIsD,EAAG,GACF,EAAG,CAAC,UAAW,WAAY,cAC9BA,EAAG,GACF,EAAG,CAAC,aAAa,QAAaT,EAAuB,CACtDM,QAASvE,EAAKoB,GAAG,2BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAauM,EAAsB,CAC1DzM,KAAM,UACN0Q,QAAShS,EAAMmS,QACflO,SAAUjE,EAAM+Q,aAChBnQ,QAASX,EAASmS,WAClB5S,MAAO,yBACN,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,cACJ,QAAiB,KAAM,QAAiBf,EAAMmS,QAAUvS,EAAKoB,GAAG,uBAAyBpB,EAAKoB,GAAG,yBAA0B,KAC/HsD,EAAG,GACF,EAAG,CAAC,UAAW,WAAY,cAC9BA,EAAG,GACF,EAAG,CAAC,aAAa,QAAaT,EAAuB,CACtDM,QAASvE,EAAKoB,GAAG,4BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAOyL,GAAa,EAAC,QAAoB,QAAS,CAC7F3L,KAAM,OACNlB,IAAK,YACLiS,OAAQ,QACR/M,SAAUzF,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAASqS,kBAAoBrS,EAASqS,oBAAoBpR,IAC3Gb,MAAO,CACL,QAAW,SAEZ,KAAM,MAAM,QAAa0N,EAAsB,CAChDzM,KAAM,UACN0Q,QAAShS,EAAMuS,UACftO,SAAUjE,EAAM+Q,aAChBnQ,QAASX,EAASuS,kBAClBhT,MAAO,0BACN,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,YACJ,QAAiB,KAAM,QAAiBf,EAAMuS,UAAY3S,EAAKoB,GAAG,uBAAyBpB,EAAKoB,GAAG,0BAA2B,KAClIsD,EAAG,GACF,EAAG,CAAC,UAAW,WAAY,gBAC9BA,EAAG,GACF,EAAG,CAAC,qBAAsBtE,EAAM0O,UAAU+D,YAAczS,EAAM0O,UAAUgE,aAAc,WAAc,QAAoB,MAAOxF,GAAa,CAAClN,EAAM0O,UAAU+D,aAAc,WAAc,QAAoB,MAAO,CACrNhS,IAAK,EACLjB,MAAO,kCACPoB,QAASf,EAAO,KAAOA,EAAO,GAAKgB,GAAUZ,EAAS0S,iBAAiB3S,EAAM0O,UAAU+D,cACtF,CAACxS,EAAS2S,YAAY5S,EAAM0O,UAAU+D,cAAgBzS,EAAM6S,WAAW,YAAa,WAAc,QAAatE,EAAqB,CACrI9N,IAAK,EACLqS,IAAK,SAAW9S,EAAM0O,UAAU+D,WAAWM,GAAK,cAChDC,IAAK,QACLxT,MAAO,gBACPyT,QAASpT,EAAO,KAAOA,EAAO,GAAKgB,GAAUZ,EAASiT,iBAAiB,YACtE,KAAM,EAAG,CAAC,SAAWjT,EAASkT,YAAYnT,EAAM0O,UAAU+D,cAAgBzS,EAAM6S,WAAW,YAAa,WAAc,QAAoB,QAAS,CACpJpS,IAAK,EACLqS,IAAK,SAAW9S,EAAM0O,UAAU+D,WAAWM,GAAK,cAChDvT,MAAO,gBACP4T,MAAO,GACPC,KAAM,GACNC,SAAU,GACVL,QAASpT,EAAO,KAAOA,EAAO,GAAKgB,GAAUZ,EAASiT,iBAAiB,YACtE,KAAM,GAAI/F,OAAiB,WAAc,QAAoB,MAAOC,GAAa,EAAC,QAAalN,EAA8B,CAC9Ha,KAAM,WACNvB,MAAO,sBACF,QAAoB,MAAO6N,GAAa,EAAC,QAAanN,EAA8B,CACzFa,KAAM,cACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,2BAA4B,MAAM,QAAoB,MAAOsM,GAAa,EAAC,QAAoB,MAAOC,IAAa,QAAiBvN,EAAM0O,UAAU+D,WAAWc,UAAUC,UAAYxT,EAAM0O,UAAU+D,WAAWM,IAAK,IAAI,QAAoB,MAAOvF,IAAa,QAAiBvN,EAAS4O,WAAW7O,EAAM0O,UAAU+D,WAAWc,UAAUE,YAAa,SAAU,QAAoB,IAAI,GAAOzT,EAAM0O,UAAUgE,aAAc,WAAc,QAAoB,MAAO,CACrgBjS,IAAK,EACLjB,MAAO,kCACPoB,QAASf,EAAO,MAAQA,EAAO,IAAMgB,GAAUZ,EAAS0S,iBAAiB3S,EAAM0O,UAAUgE,cACxF,CAACzS,EAAS2S,YAAY5S,EAAM0O,UAAUgE,cAAgB1S,EAAM6S,WAAW,YAAa,WAAc,QAAatE,EAAqB,CACrI9N,IAAK,EACLqS,IAAK,SAAW9S,EAAM0O,UAAUgE,WAAWK,GAAK,cAChDC,IAAK,QACLxT,MAAO,gBACPyT,QAASpT,EAAO,KAAOA,EAAO,GAAKgB,GAAUZ,EAASiT,iBAAiB,YACtE,KAAM,EAAG,CAAC,SAAWjT,EAASkT,YAAYnT,EAAM0O,UAAUgE,cAAgB1S,EAAM6S,WAAW,YAAa,WAAc,QAAoB,QAAS,CACpJpS,IAAK,EACLqS,IAAK,SAAW9S,EAAM0O,UAAUgE,WAAWK,GAAK,cAChDvT,MAAO,gBACP4T,MAAO,GACPC,KAAM,GACNC,SAAU,GACVL,QAASpT,EAAO,MAAQA,EAAO,IAAMgB,GAAUZ,EAASiT,iBAAiB,YACxE,KAAM,GAAIzF,OAAiB,WAAc,QAAoB,MAAOC,GAAa,EAAC,QAAaxN,EAA8B,CAC9Ha,KAAM,WACNvB,MAAO,sBACF,QAAoB,MAAOmO,GAAa,EAAC,QAAazN,EAA8B,CACzFa,KAAM,gBACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,6BAA8B,MAAM,QAAoB,MAAO4M,GAAa,EAAC,QAAoB,MAAOC,IAAa,QAAiB7N,EAAM0O,UAAUgE,WAAWa,UAAUC,UAAYxT,EAAM0O,UAAUgE,WAAWK,IAAK,IAAI,QAAoB,MAAOjF,IAAa,QAAiB7N,EAAS4O,WAAW7O,EAAM0O,UAAUgE,WAAWa,UAAUE,YAAa,SAAU,QAAoB,IAAI,OAAW,QAAoB,IAAI,MAAU,CAAC,CAACjF,EAAoBxO,EAAMgS,UACtgB,C;;;;;;;AC5gBA,SAASd,GAAMwC,GACb,OAAOA,EAAI,GAAM,CACnB,CACA,MAAMC,GAAMA,CAACD,EAAGE,EAAGC,IAAM5C,KAAK6C,IAAI7C,KAAK8C,IAAIL,EAAGG,GAAID,GAClD,SAASI,GAAIN,GACX,OAAOC,GAAIzC,GAAU,KAAJwC,GAAW,EAAG,IACjC,CAIA,SAASO,GAAIP,GACX,OAAOC,GAAIzC,GAAU,IAAJwC,GAAU,EAAG,IAChC,CACA,SAASQ,GAAIR,GACX,OAAOC,GAAIzC,GAAMwC,EAAI,MAAQ,IAAK,EAAG,EACvC,CACA,SAASS,GAAIT,GACX,OAAOC,GAAIzC,GAAU,IAAJwC,GAAU,EAAG,IAChC,CAEA,MAAMU,GAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,IACrJC,GAAM,IAAI,oBACVC,GAAKN,GAAKK,GAAQ,GAAJL,GACdO,GAAKP,GAAKK,IAAS,IAAJL,IAAa,GAAKK,GAAQ,GAAJL,GACrCQ,GAAKR,IAAW,IAAJA,IAAa,KAAY,GAAJA,GACjCS,GAAU3B,GAAK0B,GAAG1B,EAAE4B,IAAMF,GAAG1B,EAAE6B,IAAMH,GAAG1B,EAAEkB,IAAMQ,GAAG1B,EAAEiB,GAC3D,SAASa,GAASC,GAChB,IACIC,EADAC,EAAMF,EAAI/M,OAmBd,MAjBe,MAAX+M,EAAI,KACM,IAARE,GAAqB,IAARA,EACfD,EAAM,CACJJ,EAAG,IAAsB,GAAhBlB,GAAMqB,EAAI,IACnBF,EAAG,IAAsB,GAAhBnB,GAAMqB,EAAI,IACnBb,EAAG,IAAsB,GAAhBR,GAAMqB,EAAI,IACnBd,EAAW,IAARgB,EAA4B,GAAhBvB,GAAMqB,EAAI,IAAW,KAErB,IAARE,GAAqB,IAARA,IACtBD,EAAM,CACJJ,EAAGlB,GAAMqB,EAAI,KAAO,EAAIrB,GAAMqB,EAAI,IAClCF,EAAGnB,GAAMqB,EAAI,KAAO,EAAIrB,GAAMqB,EAAI,IAClCb,EAAGR,GAAMqB,EAAI,KAAO,EAAIrB,GAAMqB,EAAI,IAClCd,EAAW,IAARgB,EAAavB,GAAMqB,EAAI,KAAO,EAAIrB,GAAMqB,EAAI,IAAO,OAIrDC,CACT,CACA,MAAME,GAAQA,CAACjB,EAAGK,IAAML,EAAI,IAAMK,EAAEL,GAAK,GACzC,SAASkB,GAAUnC,GACjB,IAAIsB,EAAIK,GAAQ3B,GAAKwB,GAAKC,GAC1B,OAAOzB,EACH,IAAMsB,EAAEtB,EAAE4B,GAAKN,EAAEtB,EAAE6B,GAAKP,EAAEtB,EAAEkB,GAAKgB,GAAMlC,EAAEiB,EAAGK,QAC5Cc,CACN,CAEA,MAAMC,GAAS,+GACf,SAASC,GAASnC,EAAGoC,EAAGrC,GACtB,MAAMe,EAAIsB,EAAIhF,KAAK8C,IAAIH,EAAG,EAAIA,GACxBoB,EAAIA,CAACkB,EAAGC,GAAKD,EAAIrC,EAAI,IAAM,KAAOD,EAAIe,EAAI1D,KAAK6C,IAAI7C,KAAK8C,IAAIoC,EAAI,EAAG,EAAIA,EAAG,IAAK,GACrF,MAAO,CAACnB,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAASoB,GAASvC,EAAGoC,EAAGvC,GACtB,MAAMsB,EAAIA,CAACkB,EAAGC,GAAKD,EAAIrC,EAAI,IAAM,IAAMH,EAAIA,EAAIuC,EAAIhF,KAAK6C,IAAI7C,KAAK8C,IAAIoC,EAAG,EAAIA,EAAG,GAAI,GACnF,MAAO,CAACnB,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAASqB,GAASxC,EAAGyC,EAAG1B,GACtB,MAAM2B,EAAMP,GAASnC,EAAG,EAAG,IAC3B,IAAI2C,EAMJ,IALIF,EAAI1B,EAAI,IACV4B,EAAI,GAAKF,EAAI1B,GACb0B,GAAKE,EACL5B,GAAK4B,GAEFA,EAAI,EAAGA,EAAI,EAAGA,IACjBD,EAAIC,IAAM,EAAIF,EAAI1B,EAClB2B,EAAIC,IAAMF,EAEZ,OAAOC,CACT,CACA,SAASE,GAASnB,EAAGC,EAAGX,EAAGE,EAAGhB,GAC5B,OAAIwB,IAAMxB,GACCyB,EAAIX,GAAKE,GAAMS,EAAIX,EAAI,EAAI,GAElCW,IAAMzB,GACAc,EAAIU,GAAKR,EAAI,GAEfQ,EAAIC,GAAKT,EAAI,CACvB,CACA,SAAS4B,GAAQhD,GACf,MAAMxK,EAAQ,IACRoM,EAAI5B,EAAE4B,EAAIpM,EACVqM,EAAI7B,EAAE6B,EAAIrM,EACV0L,EAAIlB,EAAEkB,EAAI1L,EACV4K,EAAM7C,KAAK6C,IAAIwB,EAAGC,EAAGX,GACrBb,EAAM9C,KAAK8C,IAAIuB,EAAGC,EAAGX,GACrBhB,GAAKE,EAAMC,GAAO,EACxB,IAAIF,EAAGoC,EAAGnB,EAOV,OANIhB,IAAQC,IACVe,EAAIhB,EAAMC,EACVkC,EAAIrC,EAAI,GAAMkB,GAAK,EAAIhB,EAAMC,GAAOe,GAAKhB,EAAMC,GAC/CF,EAAI4C,GAASnB,EAAGC,EAAGX,EAAGE,EAAGhB,GACzBD,EAAQ,GAAJA,EAAS,IAER,CAAK,EAAJA,EAAOoC,GAAK,EAAGrC,EACzB,CACA,SAAS+C,GAAM3B,EAAGL,EAAGC,EAAGC,GACtB,OACE9M,MAAM6O,QAAQjC,GACVK,EAAEL,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAChBK,EAAEL,EAAGC,EAAGC,IACZgC,IAAI5C,GACR,CACA,SAAS6C,GAAQjD,EAAGoC,EAAGrC,GACrB,OAAO+C,GAAMX,GAAUnC,EAAGoC,EAAGrC,EAC/B,CACA,SAASmD,GAAQlD,EAAGyC,EAAG1B,GACrB,OAAO+B,GAAMN,GAAUxC,EAAGyC,EAAG1B,EAC/B,CACA,SAASoC,GAAQnD,EAAGoC,EAAGvC,GACrB,OAAOiD,GAAMP,GAAUvC,EAAGoC,EAAGvC,EAC/B,CACA,SAASuD,GAAIpD,GACX,OAAQA,EAAI,IAAM,KAAO,GAC3B,CACA,SAASqD,GAASzB,GAChB,MAAM0B,EAAIpB,GAAOqB,KAAK3B,GACtB,IACI/B,EADAiB,EAAI,IAER,IAAKwC,EACH,OAEEA,EAAE,KAAOzD,IACXiB,EAAIwC,EAAE,GAAKnD,IAAKmD,EAAE,IAAMlD,IAAKkD,EAAE,KAEjC,MAAMtD,EAAIoD,IAAKE,EAAE,IACXE,GAAMF,EAAE,GAAK,IACbG,GAAMH,EAAE,GAAK,IAQnB,OANEzD,EADW,QAATyD,EAAE,GACAJ,GAAQlD,EAAGwD,EAAIC,GACD,QAATH,EAAE,GACPH,GAAQnD,EAAGwD,EAAIC,GAEfR,GAAQjD,EAAGwD,EAAIC,GAEd,CACLhC,EAAG5B,EAAE,GACL6B,EAAG7B,EAAE,GACLkB,EAAGlB,EAAE,GACLiB,EAAGA,EAEP,CACA,SAAS4C,GAAO7D,EAAG8D,GACjB,IAAI3D,EAAI6C,GAAQhD,GAChBG,EAAE,GAAKoD,GAAIpD,EAAE,GAAK2D,GAClB3D,EAAIiD,GAAQjD,GACZH,EAAE4B,EAAIzB,EAAE,GACRH,EAAE6B,EAAI1B,EAAE,GACRH,EAAEkB,EAAIf,EAAE,EACV,CACA,SAAS4D,GAAU/D,GACjB,IAAKA,EACH,OAEF,MAAMiB,EAAI+B,GAAQhD,GACZG,EAAIc,EAAE,GACNsB,EAAI9B,GAAIQ,EAAE,IACVf,EAAIO,GAAIQ,EAAE,IAChB,OAAOjB,EAAEiB,EAAI,IACT,QAAQd,MAAMoC,OAAOrC,OAAOM,GAAIR,EAAEiB,MAClC,OAAOd,MAAMoC,OAAOrC,KAC1B,CAEA,MAAMiD,GAAM,CACXa,EAAG,OACHC,EAAG,QACHC,EAAG,KACHC,EAAG,MACHC,EAAG,KACHC,EAAG,SACHC,EAAG,QACH3D,EAAG,KACH4D,EAAG,KACHC,EAAG,KACH5D,EAAG,KACHC,EAAG,QACHC,EAAG,QACH2D,EAAG,KACHC,EAAG,WACH3D,EAAG,KACH4D,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,QACH/D,EAAG,KACHgE,EAAG,KACHC,EAAG,OACHC,EAAG,KACHC,EAAG,QACHC,EAAG,MAEEC,GAAU,CACfC,OAAQ,SACRC,YAAa,SACbC,KAAM,OACNC,UAAW,SACXC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,MAAO,IACPC,aAAc,SACdC,GAAI,KACJC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,SAAU,SACVC,QAAS,SACTC,IAAK,SACLC,YAAa,SACbC,QAAS,SACTC,QAAS,SACTC,KAAM,OACNC,IAAK,KACLC,MAAO,OACPC,QAAS,SACTC,KAAM,SACNC,KAAM,OACNC,KAAM,SACNC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,IAAK,OACLC,OAAQ,SACRC,OAAQ,SACRC,SAAU,OACVC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,IAAK,SACLC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,IAAK,SACLC,QAAS,SACTC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,UAAW,SACXC,QAAS,SACTC,WAAY,SACZC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,IAAK,SACLC,KAAM,OACNC,QAAS,SACTC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,IAAK,KACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,UAAW,OACXC,IAAK,SACLC,SAAU,SACVC,WAAY,SACZC,QAAS,SACTC,SAAU,SACVC,QAAS,SACTC,WAAY,SACZC,KAAM,KACNC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,UAAW,SACXC,QAAS,SACTC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,YAAa,SACbC,GAAI,SACJC,SAAU,SACVC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,SAAU,OACVC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,OAAQ,SACRC,GAAI,SACJC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,UAAW,SACXC,GAAI,SACJC,MAAO,UAER,SAASC,KACP,MAAMC,EAAW,CAAC,EACZpS,EAAOD,OAAOC,KAAK8I,IACnBuJ,EAAQtS,OAAOC,KAAK4G,IAC1B,IAAIL,EAAG+L,EAAGpM,EAAGqM,EAAIC,EACjB,IAAKjM,EAAI,EAAGA,EAAIvG,EAAKvH,OAAQ8N,IAAK,CAEhC,IADAgM,EAAKC,EAAKxS,EAAKuG,GACV+L,EAAI,EAAGA,EAAID,EAAM5Z,OAAQ6Z,IAC5BpM,EAAImM,EAAMC,GACVE,EAAKA,EAAGC,QAAQvM,EAAGU,GAAIV,IAEzBA,EAAIwM,SAAS5J,GAAQyJ,GAAK,IAC1BH,EAASI,GAAM,CAACtM,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EACjD,CACA,OAAOkM,CACT,CAEA,IAAIO,GACJ,SAASC,GAAUpN,GACZmN,KACHA,GAAQR,KACRQ,GAAME,YAAc,CAAC,EAAG,EAAG,EAAG,IAEhC,MAAMnO,EAAIiO,GAAMnN,EAAIsN,eACpB,OAAOpO,GAAK,CACVW,EAAGX,EAAE,GACLY,EAAGZ,EAAE,GACLC,EAAGD,EAAE,GACLA,EAAgB,IAAbA,EAAEjM,OAAeiM,EAAE,GAAK,IAE/B,CAEA,MAAMqO,GAAS,uGACf,SAASC,GAASxN,GAChB,MAAM0B,EAAI6L,GAAO5L,KAAK3B,GACtB,IACIH,EAAGC,EAAGX,EADND,EAAI,IAER,GAAKwC,EAAL,CAGA,GAAIA,EAAE,KAAO7B,EAAG,CACd,MAAM5B,GAAKyD,EAAE,GACbxC,EAAIwC,EAAE,GAAKnD,GAAIN,GAAKC,GAAQ,IAAJD,EAAS,EAAG,IACtC,CAOA,OANA4B,GAAK6B,EAAE,GACP5B,GAAK4B,EAAE,GACPvC,GAAKuC,EAAE,GACP7B,EAAI,KAAO6B,EAAE,GAAKnD,GAAIsB,GAAK3B,GAAI2B,EAAG,EAAG,MACrCC,EAAI,KAAO4B,EAAE,GAAKnD,GAAIuB,GAAK5B,GAAI4B,EAAG,EAAG,MACrCX,EAAI,KAAOuC,EAAE,GAAKnD,GAAIY,GAAKjB,GAAIiB,EAAG,EAAG,MAC9B,CACLU,EAAGA,EACHC,EAAGA,EACHX,EAAGA,EACHD,EAAGA,EAfL,CAiBF,CACA,SAASuO,GAAUxP,GACjB,OAAOA,IACLA,EAAEiB,EAAI,IACF,QAAQjB,EAAE4B,MAAM5B,EAAE6B,MAAM7B,EAAEkB,MAAMV,GAAIR,EAAEiB,MACtC,OAAOjB,EAAE4B,MAAM5B,EAAE6B,MAAM7B,EAAEkB,KAEjC,CAEA,MAAMuO,GAAKzP,GAAKA,GAAK,SAAgB,MAAJA,EAAqC,MAAzBzC,KAAKmS,IAAI1P,EAAG,EAAM,KAAe,KACxEjL,GAAOiL,GAAKA,GAAK,OAAUA,EAAI,MAAQzC,KAAKmS,KAAK1P,EAAI,MAAS,MAAO,KAC3E,SAAS2P,GAAYC,EAAMC,EAAMC,GAC/B,MAAMlO,EAAI7M,GAAKyL,GAAIoP,EAAKhO,IAClBC,EAAI9M,GAAKyL,GAAIoP,EAAK/N,IAClBX,EAAInM,GAAKyL,GAAIoP,EAAK1O,IACxB,MAAO,CACLU,EAAGrB,GAAIkP,GAAG7N,EAAIkO,GAAK/a,GAAKyL,GAAIqP,EAAKjO,IAAMA,KACvCC,EAAGtB,GAAIkP,GAAG5N,EAAIiO,GAAK/a,GAAKyL,GAAIqP,EAAKhO,IAAMA,KACvCX,EAAGX,GAAIkP,GAAGvO,EAAI4O,GAAK/a,GAAKyL,GAAIqP,EAAK3O,IAAMA,KACvCD,EAAG2O,EAAK3O,EAAI6O,GAAKD,EAAK5O,EAAI2O,EAAK3O,GAEnC,CAEA,SAAS8O,GAAO/P,EAAG8C,EAAGkN,GACpB,GAAIhQ,EAAG,CACL,IAAIiQ,EAAMjN,GAAQhD,GAClBiQ,EAAInN,GAAKvF,KAAK6C,IAAI,EAAG7C,KAAK8C,IAAI4P,EAAInN,GAAKmN,EAAInN,GAAKkN,EAAa,IAANlN,EAAU,IAAM,IACvEmN,EAAM7M,GAAQ6M,GACdjQ,EAAE4B,EAAIqO,EAAI,GACVjQ,EAAE6B,EAAIoO,EAAI,GACVjQ,EAAEkB,EAAI+O,EAAI,EACZ,CACF,CACA,SAASC,GAAMlQ,EAAGmQ,GAChB,OAAOnQ,EAAI1D,OAAO8T,OAAOD,GAAS,CAAC,EAAGnQ,GAAKA,CAC7C,CACA,SAASqQ,GAAWC,GAClB,IAAItQ,EAAI,CAAC4B,EAAG,EAAGC,EAAG,EAAGX,EAAG,EAAGD,EAAG,KAY9B,OAXI5M,MAAM6O,QAAQoN,GACZA,EAAMtb,QAAU,IAClBgL,EAAI,CAAC4B,EAAG0O,EAAM,GAAIzO,EAAGyO,EAAM,GAAIpP,EAAGoP,EAAM,GAAIrP,EAAG,KAC3CqP,EAAMtb,OAAS,IACjBgL,EAAEiB,EAAIV,GAAI+P,EAAM,OAIpBtQ,EAAIkQ,GAAMI,EAAO,CAAC1O,EAAG,EAAGC,EAAG,EAAGX,EAAG,EAAGD,EAAG,IACvCjB,EAAEiB,EAAIV,GAAIP,EAAEiB,IAEPjB,CACT,CACA,SAASuQ,GAAcxO,GACrB,MAAsB,MAAlBA,EAAIyO,OAAO,GACNjB,GAASxN,GAEXyB,GAASzB,EAClB,CACA,MAAM0O,GACJC,WAAAA,CAAYJ,GACV,GAAIA,aAAiBG,GACnB,OAAOH,EAET,MAAM1iB,SAAc0iB,EACpB,IAAItQ,EACS,WAATpS,EACFoS,EAAIqQ,GAAWC,GACG,WAAT1iB,IACToS,EAAI8B,GAASwO,IAAUnB,GAAUmB,IAAUC,GAAcD,IAE3DhiB,KAAKqiB,KAAO3Q,EACZ1R,KAAKsiB,SAAW5Q,CAClB,CACA,SAAI6Q,GACF,OAAOviB,KAAKsiB,MACd,CACA,OAAI/N,GACF,IAAI7C,EAAIkQ,GAAM5hB,KAAKqiB,MAInB,OAHI3Q,IACFA,EAAEiB,EAAIT,GAAIR,EAAEiB,IAEPjB,CACT,CACA,OAAI6C,CAAIiO,GACNxiB,KAAKqiB,KAAON,GAAWS,EACzB,CACAtB,SAAAA,GACE,OAAOlhB,KAAKsiB,OAASpB,GAAUlhB,KAAKqiB,WAAQvO,CAC9C,CACAD,SAAAA,GACE,OAAO7T,KAAKsiB,OAASzO,GAAU7T,KAAKqiB,WAAQvO,CAC9C,CACA2B,SAAAA,GACE,OAAOzV,KAAKsiB,OAAS7M,GAAUzV,KAAKqiB,WAAQvO,CAC9C,CACA2O,GAAAA,CAAIC,EAAOC,GACT,GAAID,EAAO,CACT,MAAME,EAAK5iB,KAAKuU,IACVsO,EAAKH,EAAMnO,IACjB,IAAIuO,EACJ,MAAMC,EAAIJ,IAAWG,EAAK,GAAMH,EAC1BrO,EAAI,EAAIyO,EAAI,EACZpQ,EAAIiQ,EAAGjQ,EAAIkQ,EAAGlQ,EACdqQ,IAAO1O,EAAI3B,KAAO,EAAI2B,GAAKA,EAAI3B,IAAM,EAAI2B,EAAI3B,IAAM,GAAK,EAC9DmQ,EAAK,EAAIE,EACTJ,EAAGtP,EAAI,IAAO0P,EAAKJ,EAAGtP,EAAIwP,EAAKD,EAAGvP,EAAI,GACtCsP,EAAGrP,EAAI,IAAOyP,EAAKJ,EAAGrP,EAAIuP,EAAKD,EAAGtP,EAAI,GACtCqP,EAAGhQ,EAAI,IAAOoQ,EAAKJ,EAAGhQ,EAAIkQ,EAAKD,EAAGjQ,EAAI,GACtCgQ,EAAGjQ,EAAIoQ,EAAIH,EAAGjQ,GAAK,EAAIoQ,GAAKF,EAAGlQ,EAC/B3S,KAAKuU,IAAMqO,CACb,CACA,OAAO5iB,IACT,CACAqhB,WAAAA,CAAYqB,EAAOlB,GAIjB,OAHIkB,IACF1iB,KAAKqiB,KAAOhB,GAAYrhB,KAAKqiB,KAAMK,EAAML,KAAMb,IAE1CxhB,IACT,CACA4hB,KAAAA,GACE,OAAO,IAAIO,GAAMniB,KAAKuU,IACxB,CACAX,KAAAA,CAAMjB,GAEJ,OADA3S,KAAKqiB,KAAK1P,EAAIV,GAAIU,GACX3S,IACT,CACAijB,OAAAA,CAAQvB,GACN,MAAMnN,EAAMvU,KAAKqiB,KAEjB,OADA9N,EAAI5B,GAAK,EAAI+O,EACN1hB,IACT,CACAkjB,SAAAA,GACE,MAAM3O,EAAMvU,KAAKqiB,KACXc,EAAMjU,GAAc,GAARqF,EAAIjB,EAAkB,IAARiB,EAAIhB,EAAmB,IAARgB,EAAI3B,GAEnD,OADA2B,EAAIjB,EAAIiB,EAAIhB,EAAIgB,EAAI3B,EAAIuQ,EACjBnjB,IACT,CACAojB,OAAAA,CAAQ1B,GACN,MAAMnN,EAAMvU,KAAKqiB,KAEjB,OADA9N,EAAI5B,GAAK,EAAI+O,EACN1hB,IACT,CACAqjB,MAAAA,GACE,MAAM3R,EAAI1R,KAAKqiB,KAIf,OAHA3Q,EAAE4B,EAAI,IAAM5B,EAAE4B,EACd5B,EAAE6B,EAAI,IAAM7B,EAAE6B,EACd7B,EAAEkB,EAAI,IAAMlB,EAAEkB,EACP5S,IACT,CACAsjB,OAAAA,CAAQ5B,GAEN,OADAD,GAAOzhB,KAAKqiB,KAAM,EAAGX,GACd1hB,IACT,CACAujB,MAAAA,CAAO7B,GAEL,OADAD,GAAOzhB,KAAKqiB,KAAM,GAAIX,GACf1hB,IACT,CACAwjB,QAAAA,CAAS9B,GAEP,OADAD,GAAOzhB,KAAKqiB,KAAM,EAAGX,GACd1hB,IACT,CACAyjB,UAAAA,CAAW/B,GAET,OADAD,GAAOzhB,KAAKqiB,KAAM,GAAIX,GACf1hB,IACT,CACAuV,MAAAA,CAAOC,GAEL,OADAD,GAAOvV,KAAKqiB,KAAM7M,GACXxV,IACT;;;;;;;AC3jBK,SAAS0jB,KACJ,CAML,MAAMC,GAAO,MAClB,IAAI5S,EAAK,EACT,MAAO,IAAMA,GACd,EAHmB,GAUb,SAAS6S,GAAc9e,GAC5B,OAAiB,OAAVA,QAA4BgP,IAAVhP,CAC3B,CAOO,SAAS8P,GAAqB9P,GACnC,GAAIiB,MAAM6O,SAAW7O,MAAM6O,QAAQ9P,GACjC,OAAO,EAET,MAAMxF,EAAO0O,OAAO6V,UAAUC,SAASC,KAAKjf,GAC5C,MAAyB,YAArBxF,EAAK0kB,MAAM,EAAG,IAAuC,WAAnB1kB,EAAK0kB,OAAO,EAIpD,CAOO,SAASC,GAASnf,GACvB,OAAiB,OAAVA,GAA4D,oBAA1CkJ,OAAO6V,UAAUC,SAASC,KAAKjf,EAC1D,CAMA,SAASof,GAAepf,GACtB,OAAyB,kBAAVA,GAAsBA,aAAiBU,SAAW2e,UAAUrf,EAC7E,CAUO,SAASsf,GAAgBtf,EAAgBuf,GAC9C,OAAOH,GAAepf,GAASA,EAAQuf,CACzC,CAOO,SAASC,GAAkBxf,EAAsBuf,GACtD,MAAwB,qBAAVvf,EAAwBuf,EAAevf,CACvD,C,MAEayf,GAAeA,CAACzf,EAAwB0f,IAClC,kBAAV1f,GAAsBA,EAAM2f,SAAS,KAC1CC,WAAW5f,GAAS,KACjBA,EAAQ0f,EAEFG,GAAcA,CAAC7f,EAAwB0f,IACjC,kBAAV1f,GAAsBA,EAAM2f,SAAS,KAC1CC,WAAW5f,GAAS,IAAM0f,GACvB1f,EASA,SAAS8f,GACdC,EACA3lB,EACA4lB,GAEA,GAAID,GAAyB,oBAAZA,EAAGd,KAClB,OAAOc,EAAGE,MAAMD,EAAS5lB,EAE7B,CAuBO,SAAS8lB,GACdC,EACAJ,EACAC,EACAI,GAEA,IAAI1Q,EAAWb,EAAa1F,EAC5B,GAAI2G,GAAQqQ,GAEV,GADAtR,EAAMsR,EAASve,OACXwe,EACF,IAAK1Q,EAAIb,EAAM,EAAGa,GAAK,EAAGA,IACxBqQ,EAAGd,KAAKe,EAASG,EAASzQ,GAAIA,QAGhC,IAAKA,EAAI,EAAGA,EAAIb,EAAKa,IACnBqQ,EAAGd,KAAKe,EAASG,EAASzQ,GAAIA,QAG7B,GAAIyP,GAASgB,GAGlB,IAFAhX,EAAOD,OAAOC,KAAKgX,GACnBtR,EAAM1F,EAAKvH,OACN8N,EAAI,EAAGA,EAAIb,EAAKa,IACnBqQ,EAAGd,KAAKe,EAASG,EAAShX,EAAKuG,IAAKvG,EAAKuG,GAG/C,CAQO,SAAS2Q,GAAeC,EAAuBC,GACpD,IAAI7Q,EAAW8Q,EAAcC,EAAqBC,EAElD,IAAKJ,IAAOC,GAAMD,EAAG1e,SAAW2e,EAAG3e,OACjC,OAAO,EAGT,IAAK8N,EAAI,EAAG8Q,EAAOF,EAAG1e,OAAQ8N,EAAI8Q,IAAQ9Q,EAIxC,GAHA+Q,EAAKH,EAAG5Q,GACRgR,EAAKH,EAAG7Q,GAEJ+Q,EAAGE,eAAiBD,EAAGC,cAAgBF,EAAG7mB,QAAU8mB,EAAG9mB,MACzD,OAAO,EAIX,OAAO,CACT,CAMO,SAASkjB,GAAS8D,GACvB,GAAI9Q,GAAQ8Q,GACV,OAAOA,EAAO7Q,IAAI+M,IAGpB,GAAIqC,GAASyB,GAAS,CACpB,MAAMC,EAAS3X,OAAO4X,OAAO,MACvB3X,EAAOD,OAAOC,KAAKyX,GACnBG,EAAO5X,EAAKvH,OAClB,IAAIyN,EAAI,EAER,KAAOA,EAAI0R,IAAQ1R,EACjBwR,EAAO1X,EAAKkG,IAAMyN,GAAM8D,EAAOzX,EAAKkG,KAGtC,OAAOwR,C,CAGT,OAAOD,CACT,CAEA,SAASI,GAAWrnB,GAClB,OAAmE,IAA5D,CAAC,YAAa,YAAa,eAAesnB,QAAQtnB,EAC3D,CAOO,SAASunB,GAAQvnB,EAAaknB,EAAmBD,EAAmB5X,GACzE,IAAKgY,GAAWrnB,GACd,OAGF,MAAMwnB,EAAON,EAAOlnB,GACdynB,EAAOR,EAAOjnB,GAEhBwlB,GAASgC,IAAShC,GAASiC,GAE7BC,GAAMF,EAAMC,EAAMpY,GAElB6X,EAAOlnB,GAAOmjB,GAAMsE,EAExB,CA0BO,SAASC,GAASR,EAAWD,EAAqB5X,GACvD,MAAMsY,EAAUxR,GAAQ8Q,GAAUA,EAAS,CAACA,GACtCJ,EAAOc,EAAQ1f,OAErB,IAAKud,GAAS0B,GACZ,OAAOA,EAGT7X,EAAUA,GAAW,CAAC,EACtB,MAAMuY,EAASvY,EAAQuY,QAAUL,GACjC,IAAI3W,EAEJ,IAAK,IAAImF,EAAI,EAAGA,EAAI8Q,IAAQ9Q,EAAG,CAE7B,GADAnF,EAAU+W,EAAQ5R,IACbyP,GAAS5U,GACZ,SAGF,MAAMpB,EAAOD,OAAOC,KAAKoB,GACzB,IAAK,IAAI8E,EAAI,EAAG0R,EAAO5X,EAAKvH,OAAQyN,EAAI0R,IAAQ1R,EAC9CkS,EAAOpY,EAAKkG,GAAIwR,EAAQtW,EAASvB,EAErC,CAEA,OAAO6X,CACT,CAgBO,SAASW,GAAWX,EAAWD,GAEpC,OAAOS,GAASR,EAAQD,EAAQ,CAACW,OAAQE,IAC3C,CAMO,SAASA,GAAU9nB,EAAaknB,EAAmBD,GACxD,IAAKI,GAAWrnB,GACd,OAGF,MAAMwnB,EAAON,EAAOlnB,GACdynB,EAAOR,EAAOjnB,GAEhBwlB,GAASgC,IAAShC,GAASiC,GAC7BI,GAAQL,EAAMC,GACJlY,OAAO6V,UAAU2C,eAAezC,KAAK4B,EAAQlnB,KACvDknB,EAAOlnB,GAAOmjB,GAAMsE,GAExB,CAaA,MAAMO,GAAe,CAEnB,GAAI/U,GAAKA,EAETgE,EAAGgR,GAAKA,EAAEhR,EACViR,EAAGD,GAAKA,EAAEC,GAML,SAASC,GAAUnoB,GACxB,MAAMooB,EAAQpoB,EAAIqoB,MAAM,KAClB7Y,EAAiB,GACvB,IAAI0T,EAAM,GACV,IAAK,MAAMoF,KAAQF,EACjBlF,GAAOoF,EACHpF,EAAI8C,SAAS,MACf9C,EAAMA,EAAIqC,MAAM,GAAI,GAAK,KAEzB/V,EAAK+Y,KAAKrF,GACVA,EAAM,IAGV,OAAO1T,CACT,CAEA,SAASgZ,GAAgBxoB,GACvB,MAAMwP,EAAO2Y,GAAUnoB,GACvB,OAAO+jB,IACL,IAAK,MAAMrO,KAAKlG,EAAM,CACpB,GAAU,KAANkG,EAGF,MAEFqO,EAAMA,GAAOA,EAAIrO,EACnB,CACA,OAAOqO,EAEX,CAEO,SAAS0E,GAAiB1E,EAAgB/jB,GAC/C,MAAM0oB,EAAWV,GAAahoB,KAASgoB,GAAahoB,GAAOwoB,GAAgBxoB,IAC3E,OAAO0oB,EAAS3E,EAClB,CAKO,SAAS4E,GAAY3T,GAC1B,OAAOA,EAAIyO,OAAO,GAAGmF,cAAgB5T,EAAIuQ,MAAM,EACjD,C,MAGasD,GAAWxiB,GAAoC,qBAAVA,EAErCyiB,GAAcziB,GAAsE,oBAAVA,EAG1E0iB,GAAYA,CAAI7U,EAAWC,KACtC,GAAID,EAAEtF,OAASuF,EAAEvF,KACf,OAAO,EAGT,IAAK,MAAM7O,KAAQmU,EACjB,IAAKC,EAAE6U,IAAIjpB,GACT,OAAO,EAIX,OAAO,GAOF,SAASkpB,GAAc3U,GAC5B,MAAkB,YAAXA,EAAEzT,MAAiC,UAAXyT,EAAEzT,MAA+B,gBAAXyT,EAAEzT,IACzD,CCvZO,MAAMqoB,GAAK1Y,KAAK0Y,GACVC,GAAM,EAAID,GACVE,GAAQD,GAAMD,GACdG,GAAWtiB,OAAOuiB,kBAClBC,GAAcL,GAAK,IACnBM,GAAUN,GAAK,EACfO,GAAaP,GAAK,EAClBQ,GAAqB,EAALR,GAAS,EAEzBS,GAAQnZ,KAAKmZ,MACbC,GAAOpZ,KAAKoZ,KAElB,SAASC,GAAa5S,EAAWiR,EAAW4B,GACjD,OAAOtZ,KAAKuZ,IAAI9S,EAAIiR,GAAK4B,CAC3B,CAKO,SAASE,GAAQvhB,GACtB,MAAMwhB,EAAezZ,KAAKC,MAAMhI,GAChCA,EAAQohB,GAAaphB,EAAOwhB,EAAcxhB,EAAQ,KAAQwhB,EAAexhB,EACzE,MAAMyhB,EAAY1Z,KAAKmS,IAAI,GAAInS,KAAK2Z,MAAMR,GAAMlhB,KAC1C2hB,EAAW3hB,EAAQyhB,EACnBG,EAAeD,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,GACjF,OAAOC,EAAeH,CACxB,CAMO,SAASI,GAAWjkB,GACzB,MAAMkkB,EAAmB,GACnBC,EAAOha,KAAKga,KAAKnkB,GACvB,IAAI0P,EAEJ,IAAKA,EAAI,EAAGA,EAAIyU,EAAMzU,IAChB1P,EAAQ0P,IAAM,IAChBwU,EAAOhC,KAAKxS,GACZwU,EAAOhC,KAAKliB,EAAQ0P,IAQxB,OALIyU,KAAiB,EAAPA,IACZD,EAAOhC,KAAKiC,GAGdD,EAAOE,KAAK,CAACvW,EAAGC,IAAMD,EAAIC,GAAGuW,MACtBH,CACT,CAKA,SAASI,GAAelV,GACtB,MAAoB,kBAANA,GAAgC,kBAANA,GAAwB,OAANA,KAAgBmV,OAAOC,eAAepV,GAAK,aAAcA,GAAK,YAAaA,EACvI,CAEO,SAASqV,GAASrV,GACvB,OAAQkV,GAAelV,KAAOsV,MAAM9E,WAAWxQ,KAAiBiQ,SAASjQ,EAC3E,CAEO,SAASuV,GAAY/T,EAAW6S,GACrC,MAAMmB,EAAUza,KAAKC,MAAMwG,GAC3B,OAAOgU,EAAYnB,GAAY7S,GAAQgU,EAAUnB,GAAY7S,CAC/D,CAKO,SAASiU,GACdC,EACAjE,EACAkE,GAEA,IAAIrV,EAAW8Q,EAAcxgB,EAE7B,IAAK0P,EAAI,EAAG8Q,EAAOsE,EAAMljB,OAAQ8N,EAAI8Q,EAAM9Q,IACzC1P,EAAQ8kB,EAAMpV,GAAGqV,GACZL,MAAM1kB,KACT6gB,EAAO5T,IAAM9C,KAAK8C,IAAI4T,EAAO5T,IAAKjN,GAClC6gB,EAAO7T,IAAM7C,KAAK6C,IAAI6T,EAAO7T,IAAKhN,GAGxC,CAEO,SAASglB,GAAUC,GACxB,OAAOA,GAAWpC,GAAK,IACzB,CAEO,SAASqC,GAAUC,GACxB,OAAOA,GAAW,IAAMtC,GAC1B,CASO,SAASuC,GAAexU,GAC7B,IAAKwO,GAAexO,GAClB,OAEF,IAAI3C,EAAI,EACJgQ,EAAI,EACR,MAAO9T,KAAKC,MAAMwG,EAAI3C,GAAKA,IAAM2C,EAC/B3C,GAAK,GACLgQ,IAEF,OAAOA,CACT,CAGO,SAASoH,GACdC,EACAC,GAEA,MAAMC,EAAsBD,EAAW3U,EAAI0U,EAAY1U,EACjD6U,EAAsBF,EAAW1D,EAAIyD,EAAYzD,EACjD6D,EAA2Bvb,KAAKga,KAAKqB,EAAsBA,EAAsBC,EAAsBA,GAE7G,IAAIE,EAAQxb,KAAKyb,MAAMH,EAAqBD,GAM5C,OAJIG,GAAU,GAAM9C,KAClB8C,GAAS7C,IAGJ,CACL6C,QACAE,SAAUH,EAEd,CAEO,SAASI,GAAsBC,EAAYC,GAChD,OAAO7b,KAAKga,KAAKha,KAAKmS,IAAI0J,EAAIpV,EAAImV,EAAInV,EAAG,GAAKzG,KAAKmS,IAAI0J,EAAInE,EAAIkE,EAAIlE,EAAG,GACxE,CAMO,SAASoE,GAAWpY,EAAWC,GACpC,OAAQD,EAAIC,EAAIiV,IAASD,GAAMD,EACjC,CAMO,SAASqD,GAAgBrY,GAC9B,OAAQA,EAAIiV,GAAMA,IAAOA,EAC3B,CAKO,SAASqD,GAAcR,EAAenkB,EAAe4kB,EAAaC,GACvE,MAAMxY,EAAIqY,GAAgBP,GACpBxW,EAAI+W,GAAgB1kB,GACpByM,EAAIiY,GAAgBE,GACpBE,EAAeJ,GAAgB/W,EAAItB,GACnC0Y,EAAaL,GAAgBjY,EAAIJ,GACjC2Y,EAAeN,GAAgBrY,EAAIsB,GACnCsX,EAAaP,GAAgBrY,EAAII,GACvC,OAAOJ,IAAMsB,GAAKtB,IAAMI,GAAMoY,GAAyBlX,IAAMlB,GACvDqY,EAAeC,GAAcC,EAAeC,CACpD,CASO,SAASC,GAAY1mB,EAAeiN,EAAaD,GACtD,OAAO7C,KAAK6C,IAAIC,EAAK9C,KAAK8C,IAAID,EAAKhN,GACrC,CAMO,SAAS2mB,GAAY3mB,GAC1B,OAAO0mB,GAAY1mB,GAAQ,MAAO,MACpC,CASO,SAAS4mB,GAAW5mB,EAAewB,EAAe4kB,EAAa3C,EAAU,MAC9E,OAAOzjB,GAASmK,KAAK8C,IAAIzL,EAAO4kB,GAAO3C,GAAWzjB,GAASmK,KAAK6C,IAAIxL,EAAO4kB,GAAO3C,CACpF,CC3LO,SAASoD,GACdC,EACA9mB,EACA+mB,GAEAA,EAAMA,GAAA,CAASntB,GAAUktB,EAAMltB,GAASoG,GACxC,IAEIgnB,EAFAC,EAAKH,EAAMllB,OAAS,EACpBslB,EAAK,EAGT,MAAOD,EAAKC,EAAK,EACfF,EAAOE,EAAKD,GAAO,EACfF,EAAIC,GACNE,EAAKF,EAELC,EAAKD,EAIT,MAAO,CAACE,KAAID,KACd,CAUO,MAAME,GAAeA,CAC1BL,EACAntB,EACAqG,EACAonB,IAEAP,GAAQC,EAAO9mB,EAAOonB,EAClBxtB,IACA,MAAMytB,EAAKP,EAAMltB,GAAOD,GACxB,OAAO0tB,EAAKrnB,GAASqnB,IAAOrnB,GAAS8mB,EAAMltB,EAAQ,GAAGD,KAASqG,GAE/DpG,GAASktB,EAAMltB,GAAOD,GAAOqG,GAStBsnB,GAAgBA,CAC3BR,EACAntB,EACAqG,IAEA6mB,GAAQC,EAAO9mB,EAAOpG,GAASktB,EAAMltB,GAAOD,IAAQqG,GAS/C,SAASunB,GAAeC,EAAkBva,EAAaD,GAC5D,IAAIxL,EAAQ,EACR4kB,EAAMoB,EAAO5lB,OAEjB,MAAOJ,EAAQ4kB,GAAOoB,EAAOhmB,GAASyL,EACpCzL,IAEF,MAAO4kB,EAAM5kB,GAASgmB,EAAOpB,EAAM,GAAKpZ,EACtCoZ,IAGF,OAAO5kB,EAAQ,GAAK4kB,EAAMoB,EAAO5lB,OAC7B4lB,EAAOtI,MAAM1d,EAAO4kB,GACpBoB,CACN,CAEA,MAAMC,GAAc,CAAC,OAAQ,MAAO,QAAS,SAAU,WAgBhD,SAASC,GAAkB5C,EAAO6C,GACnC7C,EAAM8C,SACR9C,EAAM8C,SAASC,UAAU3F,KAAKyF,IAIhCze,OAAO4e,eAAehD,EAAO,WAAY,CACvCiD,cAAc,EACdC,YAAY,EACZhoB,MAAO,CACL6nB,UAAW,CAACF,MAIhBF,GAAYQ,QAAStuB,IACnB,MAAMuuB,EAAS,UAAY5F,GAAY3oB,GACjCwuB,EAAOrD,EAAMnrB,GAEnBuP,OAAO4e,eAAehD,EAAOnrB,EAAK,CAChCouB,cAAc,EACdC,YAAY,EACZhoB,KAAAA,IAAS5F,GACP,MAAMguB,EAAMD,EAAKlI,MAAM/kB,KAAMd,GAQ7B,OANA0qB,EAAM8C,SAASC,UAAUI,QAASI,IACF,oBAAnBA,EAAOH,IAChBG,EAAOH,MAAW9tB,KAIfguB,CACT,MAGN,CAQO,SAASE,GAAoBxD,EAAO6C,GACzC,MAAMY,EAAOzD,EAAM8C,SACnB,IAAKW,EACH,OAGF,MAAMV,EAAYU,EAAKV,UACjBjuB,EAAQiuB,EAAU5G,QAAQ0G,IACjB,IAAX/tB,GACFiuB,EAAUW,OAAO5uB,EAAO,GAGtBiuB,EAAUjmB,OAAS,IAIvB6lB,GAAYQ,QAAStuB,WACZmrB,EAAMnrB,YAGRmrB,EAAM8C,SACf,CAKO,SAASa,GAAgBC,GAC9B,MAAMC,EAAM,IAAIC,IAAOF,GAEvB,OAAIC,EAAIpgB,OAASmgB,EAAM9mB,OACd8mB,EAGFznB,MAAMU,KAAKgnB,EACpB,CClLa,MAAAE,GAAoB,WAC/B,MAAsB,qBAAX7tB,OACF,SAAS8kB,GACd,OAAOA,GACT,EAEK9kB,OAAO8tB,qBAChB,CAPiC,GAa1B,SAASC,GACdhJ,EACAC,GAEA,IAAIgJ,EAAY,GACZC,GAAU,EAEd,OAAO,YAAY7uB,GAEjB4uB,EAAY5uB,EACP6uB,IACHA,GAAU,EACVJ,GAAiB5J,KAAKjkB,OAAQ,KAC5BiuB,GAAU,EACVlJ,EAAGE,MAAMD,EAASgJ,KAGxB,CACF,CAKO,SAASE,GAAmCnJ,EAA8BoJ,GAC/E,IAAIC,EACJ,OAAO,YAAYhvB,GAOjB,OANI+uB,GACFE,aAAaD,GACbA,EAAUE,WAAWvJ,EAAIoJ,EAAO/uB,IAEhC2lB,EAAGE,MAAM/kB,KAAMd,GAEV+uB,CACT,CACF,CAMO,MAAMI,GAAsBC,GAAgD,UAAVA,EAAoB,OAAmB,QAAVA,EAAkB,QAAU,SAMrHC,GAAiBA,CAACD,EAAmChoB,EAAe4kB,IAA0B,UAAVoD,EAAoBhoB,EAAkB,QAAVgoB,EAAkBpD,GAAO5kB,EAAQ4kB,GAAO,EAMxJsD,GAASA,CAACF,EAAoCG,EAAcC,EAAeC,KACtF,MAAMC,EAAQD,EAAM,OAAS,QAC7B,OAAOL,IAAUM,EAAQF,EAAkB,WAAVJ,GAAsBG,EAAOC,GAAS,EAAID,GAOtE,SAASI,GAAiCC,EAAqCC,EAAwBC,GAC5G,MAAMC,EAAaF,EAAOroB,OAE1B,IAAIJ,EAAQ,EACR+H,EAAQ4gB,EAEZ,GAAIH,EAAKI,QAAS,CAChB,MAAM,OAACC,EAAM,OAAEC,EAAA,QAAQC,GAAWP,EAC5BQ,EAAWR,EAAKS,SAAUT,EAAKS,QAAQzhB,QAAUghB,EAAKS,QAAQzhB,QAAQwhB,SAAkB,KACxFE,EAAOL,EAAOK,MACd,IAACzd,EAAG,IAAED,EAAG,WAAE2d,EAAU,WAAEC,GAAcP,EAAOQ,gBAElD,GAAIF,EAAY,CAMd,GALAnpB,EAAQ2I,KAAK8C,IAEXka,GAAaoD,EAASG,EAAMzd,GAAKia,GAEjCgD,EAAqBC,EAAahD,GAAa8C,EAAQS,EAAML,EAAOS,iBAAiB7d,IAAMia,IACzFsD,EAAU,CACZ,MAAMO,EAAuBR,EAC1BrL,MAAM,EAAG1d,EAAQ,GACjB4e,UACA4K,UACCC,IAAUnM,GAAcmM,EAAMX,EAAOI,QACzClpB,GAAS2I,KAAK6C,IAAI,EAAG+d,E,CAEvBvpB,EAAQklB,GAAYllB,EAAO,EAAG2oB,EAAa,E,CAE7C,GAAIS,EAAY,CACd,IAAIxE,EAAMjc,KAAK6C,IAEbma,GAAaoD,EAASF,EAAOK,KAAM1d,GAAK,GAAMia,GAAK,EAEnDiD,EAAqB,EAAI/C,GAAa8C,EAAQS,EAAML,EAAOS,iBAAiB9d,IAAM,GAAMia,GAAK,GAC/F,GAAIuD,EAAU,CACZ,MAAMU,EAAuBX,EAC1BrL,MAAMkH,EAAM,GACZ4E,UACCC,IAAUnM,GAAcmM,EAAMX,EAAOI,QACzCtE,GAAOjc,KAAK6C,IAAI,EAAGke,E,CAErB3hB,EAAQmd,GAAYN,EAAK5kB,EAAO2oB,GAAc3oB,C,MAE9C+H,EAAQ4gB,EAAa3oB,C,CAIzB,MAAO,CAACA,QAAO+H,QACjB,CAQO,SAAS4hB,GAAoBnB,GAClC,MAAM,OAACoB,EAAM,OAAEC,EAAA,aAAQC,GAAgBtB,EACjCuB,EAAY,CAChBC,KAAMJ,EAAOne,IACbwe,KAAML,EAAOpe,IACb0e,KAAML,EAAOpe,IACb0e,KAAMN,EAAOre,KAEf,IAAKse,EAEH,OADAtB,EAAKsB,aAAeC,GACb,EAET,MAAMK,EAAUN,EAAaE,OAASJ,EAAOne,KAC1Cqe,EAAaG,OAASL,EAAOpe,KAC7Bse,EAAaI,OAASL,EAAOpe,KAC7Bqe,EAAaK,OAASN,EAAOre,IAGhC,OADA9D,OAAO8T,OAAOsO,EAAcC,GACrBK,CACT,CChKA,MAAMC,GAAUnP,GAAoB,IAANA,GAAiB,IAANA,EACnCoP,GAAYA,CAACpP,EAAWvN,EAAW8O,KAAgB9T,KAAKmS,IAAI,EAAG,IAAMI,GAAK,IAAMvS,KAAK4hB,KAAKrP,EAAIvN,GAAK2T,GAAM7E,GACzG+N,GAAaA,CAACtP,EAAWvN,EAAW8O,IAAc9T,KAAKmS,IAAI,GAAI,GAAKI,GAAKvS,KAAK4hB,KAAKrP,EAAIvN,GAAK2T,GAAM7E,GAAK,EAOvGgO,GAAU,CACdC,OAASxP,GAAcA,EAEvByP,WAAazP,GAAcA,EAAIA,EAE/B0P,YAAc1P,IAAeA,GAAKA,EAAI,GAEtC2P,cAAgB3P,IAAgBA,GAAK,IAAO,EACxC,GAAMA,EAAIA,GACT,MAAUA,GAAMA,EAAI,GAAK,GAE9B4P,YAAc5P,GAAcA,EAAIA,EAAIA,EAEpC6P,aAAe7P,IAAeA,GAAK,GAAKA,EAAIA,EAAI,EAEhD8P,eAAiB9P,IAAgBA,GAAK,IAAO,EACzC,GAAMA,EAAIA,EAAIA,EACd,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAE9B+P,YAAc/P,GAAcA,EAAIA,EAAIA,EAAIA,EAExCgQ,aAAehQ,MAAiBA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAEtDiQ,eAAiBjQ,IAAgBA,GAAK,IAAO,EACzC,GAAMA,EAAIA,EAAIA,EAAIA,GACjB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAEnCkQ,YAAclQ,GAAcA,EAAIA,EAAIA,EAAIA,EAAIA,EAE5CmQ,aAAenQ,IAAeA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAExDoQ,eAAiBpQ,IAAgBA,GAAK,IAAO,EACzC,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EACtB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GAEtCqQ,WAAarQ,GAAuC,EAAxBvS,KAAK6iB,IAAItQ,EAAIyG,IAEzC8J,YAAcvQ,GAAcvS,KAAK4hB,IAAIrP,EAAIyG,IAEzC+J,cAAgBxQ,IAAe,IAAOvS,KAAK6iB,IAAInK,GAAKnG,GAAK,GAEzDyQ,WAAazQ,GAAqB,IAAPA,EAAY,EAAIvS,KAAKmS,IAAI,EAAG,IAAMI,EAAI,IAEjE0Q,YAAc1Q,GAAqB,IAAPA,EAAY,EAA4B,EAAvBvS,KAAKmS,IAAI,GAAI,GAAKI,GAE/D2Q,cAAgB3Q,GAAcmP,GAAOnP,GAAKA,EAAIA,EAAI,GAC9C,GAAMvS,KAAKmS,IAAI,EAAG,IAAU,EAAJI,EAAQ,IAChC,IAAyC,EAAjCvS,KAAKmS,IAAI,GAAI,IAAU,EAAJI,EAAQ,KAEvC4Q,WAAa5Q,GAAcA,GAAM,EAAKA,IAAMvS,KAAKga,KAAK,EAAIzH,EAAIA,GAAK,GAEnE6Q,YAAc7Q,GAAcvS,KAAKga,KAAK,GAAKzH,GAAK,GAAKA,GAErD8Q,cAAgB9Q,IAAgBA,GAAK,IAAO,GACvC,IAAOvS,KAAKga,KAAK,EAAIzH,EAAIA,GAAK,GAC/B,IAAOvS,KAAKga,KAAK,GAAKzH,GAAK,GAAKA,GAAK,GAEzC+Q,cAAgB/Q,GAAcmP,GAAOnP,GAAKA,EAAIoP,GAAUpP,EAAG,KAAO,IAElEgR,eAAiBhR,GAAcmP,GAAOnP,GAAKA,EAAIsP,GAAWtP,EAAG,KAAO,IAEpEiR,gBAAAA,CAAiBjR,GACf,MAAMvN,EAAI,MACJ8O,EAAI,IACV,OAAO4N,GAAOnP,GAAKA,EACjBA,EAAI,GACA,GAAMoP,GAAc,EAAJpP,EAAOvN,EAAG8O,GAC1B,GAAM,GAAM+N,GAAe,EAAJtP,EAAQ,EAAGvN,EAAG8O,EAC7C,EAEA2P,UAAAA,CAAWlR,GACT,MAAMvN,EAAI,QACV,OAAOuN,EAAIA,IAAMvN,EAAI,GAAKuN,EAAIvN,EAChC,EAEA0e,WAAAA,CAAYnR,GACV,MAAMvN,EAAI,QACV,OAAQuN,GAAK,GAAKA,IAAMvN,EAAI,GAAKuN,EAAIvN,GAAK,CAC5C,EAEA2e,aAAAA,CAAcpR,GACZ,IAAIvN,EAAI,QACR,OAAKuN,GAAK,IAAO,EACDA,EAAIA,IAAuB,GAAhBvN,GAAM,QAAeuN,EAAIvN,GAA3C,GAEF,KAAQuN,GAAK,GAAKA,IAAuB,GAAhBvN,GAAM,QAAeuN,EAAIvN,GAAK,EAChE,EAEA4e,aAAerR,GAAc,EAAIuP,GAAQ+B,cAAc,EAAItR,GAE3DsR,aAAAA,CAActR,GACZ,MAAMrM,EAAI,OACJrC,EAAI,KACV,OAAI0O,EAAK,EAAI1O,EACJqC,EAAIqM,EAAIA,EAEbA,EAAK,EAAI1O,EACJqC,GAAKqM,GAAM,IAAM1O,GAAM0O,EAAI,IAEhCA,EAAK,IAAM1O,EACNqC,GAAKqM,GAAM,KAAO1O,GAAM0O,EAAI,MAE9BrM,GAAKqM,GAAM,MAAQ1O,GAAM0O,EAAI,OACtC,EAEAuR,gBAAkBvR,GAAeA,EAAI,GACH,GAA9BuP,GAAQ8B,aAAiB,EAAJrR,GACc,GAAnCuP,GAAQ+B,cAAkB,EAAJtR,EAAQ,GAAW,ICpHxC,SAASwR,GAAoBluB,GAClC,GAAIA,GAA0B,kBAAVA,EAAoB,CACtC,MAAMxF,EAAOwF,EAAMgf,WACnB,MAAgB,2BAATxkB,GAA8C,4BAATA,C,CAG9C,OAAO,CACT,CAWO,SAASojB,GAAM5d,GACpB,OAAOkuB,GAAoBluB,GAASA,EAAQ,IAAIqd,GAAMrd,EACxD,CAKO,SAASmuB,GAAcnuB,GAC5B,OAAOkuB,GAAoBluB,GACvBA,EACA,IAAIqd,GAAMrd,GAAO0e,SAAS,IAAKD,OAAO,IAAK1P,WACjD,CC/BA,MAAMqf,GAAU,CAAC,IAAK,IAAK,cAAe,SAAU,WAC9CC,GAAS,CAAC,QAAS,cAAe,mBAEjC,SAASC,GAAwBC,GACtCA,EAAS5F,IAAI,YAAa,CACxBQ,WAAOna,EACPwf,SAAU,IACVC,OAAQ,eACR1O,QAAI/Q,EACJrN,UAAMqN,EACNzC,UAAMyC,EACNqN,QAAIrN,EACJxU,UAAMwU,IAGRuf,EAASG,SAAS,YAAa,CAC7BC,WAAW,EACXC,YAAY,EACZC,YAAcv0B,GAAkB,eAATA,GAAkC,eAATA,GAAkC,OAATA,IAG3Ei0B,EAAS5F,IAAI,aAAc,CACzB0F,OAAQ,CACN7zB,KAAM,QACNs0B,WAAYT,IAEdD,QAAS,CACP5zB,KAAM,SACNs0B,WAAYV,MAIhBG,EAASG,SAAS,aAAc,CAC9BC,UAAW,cAGbJ,EAAS5F,IAAI,cAAe,CAC1BoG,OAAQ,CACNC,UAAW,CACTR,SAAU,MAGdS,OAAQ,CACND,UAAW,CACTR,SAAU,IAGdU,KAAM,CACJC,WAAY,CACVd,OAAQ,CACN1sB,KAAM,eAERytB,QAAS,CACP50B,KAAM,UACNg0B,SAAU,KAIhBa,KAAM,CACJF,WAAY,CACVd,OAAQ,CACNhS,GAAI,eAEN+S,QAAS,CACP50B,KAAM,UACNi0B,OAAQ,SACR1O,GAAInT,GAAS,EAAJA,MAKnB,CCvEO,SAAS0iB,GAAqBf,GACnCA,EAAS5F,IAAI,SAAU,CACrB4G,aAAa,EACbC,QAAS,CACPC,IAAK,EACL7F,MAAO,EACP8F,OAAQ,EACR/F,KAAM,IAGZ,CCTA,MAAMgG,GAAY,IAAIC,IAEtB,SAASC,GAAgBC,EAAgB9mB,GACvCA,EAAUA,GAAW,CAAC,EACtB,MAAM+mB,EAAWD,EAASE,KAAKC,UAAUjnB,GACzC,IAAIknB,EAAYP,GAAUQ,IAAIJ,GAK9B,OAJKG,IACHA,EAAY,IAAIE,KAAKC,aAAaP,EAAQ9mB,GAC1C2mB,GAAUhH,IAAIoH,EAAUG,IAEnBA,CACT,CAEO,SAASI,GAAaC,EAAaT,EAAgB9mB,GACxD,OAAO6mB,GAAgBC,EAAQ9mB,GAASwnB,OAAOD,EACjD,CCRA,MAAME,GAAa,CAOjBjJ,MAAAA,CAAOxnB,GACL,OAAO8P,GAAQ9P,GAAkCA,EAAS,GAAKA,CACjE,EAUA0wB,OAAAA,CAAQC,EAAW/2B,EAAOg3B,GACxB,GAAkB,IAAdD,EACF,MAAO,IAGT,MAAMb,EAAS50B,KAAK21B,MAAM7nB,QAAQ8mB,OAClC,IAAIgB,EACAC,EAAQJ,EAEZ,GAAIC,EAAMhvB,OAAS,EAAG,CAEpB,MAAMovB,EAAU7mB,KAAK6C,IAAI7C,KAAKuZ,IAAIkN,EAAM,GAAG5wB,OAAQmK,KAAKuZ,IAAIkN,EAAMA,EAAMhvB,OAAS,GAAG5B,SAChFgxB,EAAU,MAAQA,EAAU,QAC9BF,EAAW,cAGbC,EAAQE,GAAeN,EAAWC,E,CAGpC,MAAMM,EAAW5N,GAAMnZ,KAAKuZ,IAAIqN,IAO1BI,EAAazM,MAAMwM,GAAY,EAAI/mB,KAAK6C,IAAI7C,KAAK8C,KAAK,EAAI9C,KAAK2Z,MAAMoN,GAAW,IAAK,GAErFloB,EAAU,CAAC8nB,WAAUM,sBAAuBD,EAAYE,sBAAuBF,GAGrF,OAFAjoB,OAAO8T,OAAOhU,EAAS9N,KAAK8N,QAAQ4nB,MAAMJ,QAEnCF,GAAaK,EAAWb,EAAQ9mB,EACzC,EAWAsoB,WAAAA,CAAYX,EAAW/2B,EAAOg3B,GAC5B,GAAkB,IAAdD,EACF,MAAO,IAET,MAAMY,EAASX,EAAMh3B,GAAO43B,aAAgBb,EAAaxmB,KAAKmS,IAAI,GAAInS,KAAK2Z,MAAMR,GAAMqN,KACvF,MAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAIc,SAASF,IAAW33B,EAAQ,GAAMg3B,EAAMhvB,OACxD6uB,GAAWC,QAAQzR,KAAK/jB,KAAMy1B,EAAW/2B,EAAOg3B,GAElD,EACT,GAKF,SAASK,GAAeN,EAAWC,GAGjC,IAAIG,EAAQH,EAAMhvB,OAAS,EAAIgvB,EAAM,GAAG5wB,MAAQ4wB,EAAM,GAAG5wB,MAAQ4wB,EAAM,GAAG5wB,MAAQ4wB,EAAM,GAAG5wB,MAO3F,OAJImK,KAAKuZ,IAAIqN,IAAU,GAAKJ,IAAcxmB,KAAK2Z,MAAM6M,KAEnDI,EAAQJ,EAAYxmB,KAAK2Z,MAAM6M,IAE1BI,CACT,CAMA,IAAAW,GAAe,CAACjB,eCnGT,SAASkB,GAAmBpD,GACjCA,EAAS5F,IAAI,QAAS,CACpBiJ,SAAS,EACTC,QAAQ,EACRzR,SAAS,EACT0R,aAAa,EASbC,OAAQ,QAERC,MAAM,EAMNC,MAAO,EAGPC,KAAM,CACJN,SAAS,EACTO,UAAW,EACXC,iBAAiB,EACjBC,WAAW,EACXC,WAAY,EACZC,UAAWA,CAACz5B,EAAMkQ,IAAYA,EAAQmpB,UACtCK,UAAWA,CAAC15B,EAAMkQ,IAAYA,EAAQ4U,MACtCiU,QAAQ,GAGVY,OAAQ,CACNb,SAAS,EACTc,KAAM,GACNC,WAAY,EACZx3B,MAAO,GAITuN,MAAO,CAELkpB,SAAS,EAGTgB,KAAM,GAGNpD,QAAS,CACPC,IAAK,EACLC,OAAQ,IAKZkB,MAAO,CACLiC,YAAa,EACbC,YAAa,GACbC,QAAQ,EACRC,gBAAiB,EACjBC,gBAAiB,GACjBzD,QAAS,EACToC,SAAS,EACTsB,UAAU,EACVC,gBAAiB,EACjBC,YAAa,EAEbtT,SAAU4R,GAAMjB,WAAWjJ,OAC3B6L,MAAO,CAAC,EACRC,MAAO,CAAC,EACR9J,MAAO,SACP+J,WAAY,OAEZC,mBAAmB,EACnBC,cAAe,4BACfC,gBAAiB,KAIrBnF,EAASoF,MAAM,cAAe,QAAS,GAAI,SAC3CpF,EAASoF,MAAM,aAAc,QAAS,GAAI,eAC1CpF,EAASoF,MAAM,eAAgB,QAAS,GAAI,eAC5CpF,EAASoF,MAAM,cAAe,QAAS,GAAI,SAE3CpF,EAASG,SAAS,QAAS,CACzBC,WAAW,EACXE,YAAcv0B,IAAUA,EAAKs5B,WAAW,YAAct5B,EAAKs5B,WAAW,UAAqB,aAATt5B,GAAgC,WAATA,EACzGs0B,WAAat0B,GAAkB,eAATA,GAAkC,mBAATA,GAAsC,SAATA,IAG9Ei0B,EAASG,SAAS,SAAU,CAC1BC,UAAW,UAGbJ,EAASG,SAAS,cAAe,CAC/BG,YAAcv0B,GAAkB,oBAATA,GAAuC,aAATA,EACrDs0B,WAAat0B,GAAkB,oBAATA,GAE1B,C,MClGau5B,GAAY3qB,OAAO4X,OAAO,MAC1BgT,GAAc5qB,OAAO4X,OAAO,MAOzC,SAASiT,GAASC,EAAMr6B,GACtB,IAAKA,EACH,OAAOq6B,EAET,MAAM7qB,EAAOxP,EAAIqoB,MAAM,KACvB,IAAK,IAAItS,EAAI,EAAGN,EAAIjG,EAAKvH,OAAQ8N,EAAIN,IAAKM,EAAG,CAC3C,MAAML,EAAIlG,EAAKuG,GACfskB,EAAOA,EAAK3kB,KAAO2kB,EAAK3kB,GAAKnG,OAAO4X,OAAO,MAC7C,CACA,OAAOkT,CACT,CAEA,SAASrL,GAAIsL,EAAMC,EAAO1M,GACxB,MAAqB,kBAAV0M,EACF7S,GAAM0S,GAASE,EAAMC,GAAQ1M,GAE/BnG,GAAM0S,GAASE,EAAM,IAAKC,EACnC,CAMO,MAAMC,GACX7W,WAAAA,CAAY8W,EAAcC,GACxBn5B,KAAK8zB,eAAYhgB,EACjB9T,KAAKo5B,gBAAkB,kBACvBp5B,KAAKq5B,YAAc,kBACnBr5B,KAAK0iB,MAAQ,OACb1iB,KAAKs5B,SAAW,CAAC,EACjBt5B,KAAKu5B,iBAAoBC,GAAYA,EAAQ7D,MAAM8D,SAASC,sBAC5D15B,KAAK25B,SAAW,CAAC,EACjB35B,KAAK45B,OAAS,CACZ,YACA,WACA,QACA,aACA,aAEF55B,KAAK65B,KAAO,CACVC,OAAQ,qDACRzsB,KAAM,GACNhP,MAAO,SACP07B,WAAY,IACZpX,OAAQ,MAEV3iB,KAAKg6B,MAAQ,CAAC,EACdh6B,KAAKi6B,qBAAuB,CAACC,EAAKpsB,IAAYmlB,GAAcnlB,EAAQsrB,iBACpEp5B,KAAKm6B,iBAAmB,CAACD,EAAKpsB,IAAYmlB,GAAcnlB,EAAQurB,aAChEr5B,KAAKo6B,WAAa,CAACF,EAAKpsB,IAAYmlB,GAAcnlB,EAAQ4U,OAC1D1iB,KAAKq6B,UAAY,IACjBr6B,KAAKs6B,YAAc,CACjBC,KAAM,UACNC,WAAW,EACXC,kBAAkB,GAEpBz6B,KAAK06B,qBAAsB,EAC3B16B,KAAK26B,QAAU,KACf36B,KAAKpB,QAAU,KACfoB,KAAK46B,SAAU,EACf56B,KAAK66B,QAAU,CAAC,EAChB76B,KAAK86B,YAAa,EAClB96B,KAAK+6B,WAAQjnB,EACb9T,KAAKg7B,OAAS,CAAC,EACfh7B,KAAKi7B,UAAW,EAChBj7B,KAAKk7B,yBAA0B,EAE/Bl7B,KAAKwzB,SAAS0F,GACdl5B,KAAK+kB,MAAMoU,EACb,CAMA1L,GAAAA,CAAIuL,EAAO1M,GACT,OAAOmB,GAAIztB,KAAMg5B,EAAO1M,EAC1B,CAKA2I,GAAAA,CAAI+D,GACF,OAAOH,GAAS74B,KAAMg5B,EACxB,CAMAxF,QAAAA,CAASwF,EAAO1M,GACd,OAAOmB,GAAImL,GAAaI,EAAO1M,EACjC,CAEA6O,QAAAA,CAASnC,EAAO1M,GACd,OAAOmB,GAAIkL,GAAWK,EAAO1M,EAC/B,CAmBAmM,KAAAA,CAAMO,EAAO55B,EAAMg8B,EAAaC,GAC9B,MAAMC,EAAczC,GAAS74B,KAAMg5B,GAC7BuC,EAAoB1C,GAAS74B,KAAMo7B,GACnCI,EAAc,IAAMp8B,EAE1B4O,OAAOytB,iBAAiBH,EAAa,CAEnC,CAACE,GAAc,CACb12B,MAAOw2B,EAAYl8B,GACnBs8B,UAAU,GAGZ,CAACt8B,GAAO,CACN0tB,YAAY,EACZmI,GAAAA,GACE,MAAM0G,EAAQ37B,KAAKw7B,GACb7V,EAAS4V,EAAkBF,GACjC,OAAIpX,GAAS0X,GACJ3tB,OAAO8T,OAAO,CAAC,EAAG6D,EAAQgW,GAE5BrX,GAAeqX,EAAOhW,EAC/B,EACA8H,GAAAA,CAAI3oB,GACF9E,KAAKw7B,GAAe12B,CACtB,IAGN,CAEAigB,KAAAA,CAAM6W,GACJA,EAAS7O,QAAShI,GAAUA,EAAM/kB,MACpC,EAIF,IAAAqzB,GAA+B,IAAI4F,GAAS,CAC1CtF,YAAcv0B,IAAUA,EAAKs5B,WAAW,MACxChF,WAAat0B,GAAkB,WAATA,EACtB46B,MAAO,CACLvG,UAAW,eAEb6G,YAAa,CACX3G,aAAa,EACbD,YAAY,IAEb,CAACN,GAAyBgB,GAAsBqC,KCtJ5C,SAASoF,GAAahC,GAC3B,OAAKA,GAAQjW,GAAciW,EAAKxsB,OAASuW,GAAciW,EAAKC,QACnD,MAGDD,EAAKx7B,MAAQw7B,EAAKx7B,MAAQ,IAAM,KACrCw7B,EAAKlX,OAASkX,EAAKlX,OAAS,IAAM,IACnCkX,EAAKxsB,KAAO,MACZwsB,EAAKC,MACT,CAKO,SAASgC,GACd5B,EACAx6B,EACAq8B,EACAC,EACAC,GAEA,IAAIC,EAAYx8B,EAAKu8B,GAQrB,OAPKC,IACHA,EAAYx8B,EAAKu8B,GAAU/B,EAAIiC,YAAYF,GAAQh8B,MACnD87B,EAAG/U,KAAKiV,IAENC,EAAYF,IACdA,EAAUE,GAELF,CACT,CASO,SAASI,GACdlC,EACAL,EACAwC,EACAC,GAEAA,EAAQA,GAAS,CAAC,EAClB,IAAI58B,EAAO48B,EAAM58B,KAAO48B,EAAM58B,MAAQ,CAAC,EACnCq8B,EAAKO,EAAMC,eAAiBD,EAAMC,gBAAkB,GAEpDD,EAAMzC,OAASA,IACjBn6B,EAAO48B,EAAM58B,KAAO,CAAC,EACrBq8B,EAAKO,EAAMC,eAAiB,GAC5BD,EAAMzC,KAAOA,GAGfK,EAAIsC,OAEJtC,EAAIL,KAAOA,EACX,IAAImC,EAAU,EACd,MAAM1W,EAAO+W,EAAc31B,OAC3B,IAAI8N,EAAW+L,EAAWkc,EAAcC,EAAwBC,EAChE,IAAKnoB,EAAI,EAAGA,EAAI8Q,EAAM9Q,IAIpB,GAHAkoB,EAAQL,EAAc7nB,QAGRV,IAAV4oB,GAAiC,OAAVA,GAAmB9nB,GAAQ8nB,IAE/C,GAAI9nB,GAAQ8nB,GAGjB,IAAKnc,EAAI,EAAGkc,EAAOC,EAAMh2B,OAAQ6Z,EAAIkc,EAAMlc,IACzCoc,EAAcD,EAAMnc,QAEAzM,IAAhB6oB,GAA6C,OAAhBA,GAAyB/nB,GAAQ+nB,KAChEX,EAAUF,GAAa5B,EAAKx6B,EAAMq8B,EAAIC,EAASW,SARnDX,EAAUF,GAAa5B,EAAKx6B,EAAMq8B,EAAIC,EAASU,GAcnDxC,EAAI0C,UAEJ,MAAMC,EAAQd,EAAGr1B,OAAS,EAC1B,GAAIm2B,EAAQR,EAAc31B,OAAQ,CAChC,IAAK8N,EAAI,EAAGA,EAAIqoB,EAAOroB,WACd9U,EAAKq8B,EAAGvnB,IAEjBunB,EAAGzO,OAAO,EAAGuP,E,CAEf,OAAOb,CACT,CAUO,SAASc,GAAYnH,EAAcoH,EAAe98B,GACvD,MAAMs5B,EAAmB5D,EAAMqH,wBACzBC,EAAsB,IAAVh9B,EAAcgP,KAAK6C,IAAI7R,EAAQ,EAAG,IAAO,EAC3D,OAAOgP,KAAKC,OAAO6tB,EAAQE,GAAa1D,GAAoBA,EAAmB0D,CACjF,CAKO,SAASC,GAAYC,EAA4BjD,IACjDA,GAAQiD,KAIbjD,EAAMA,GAAOiD,EAAOC,WAAW,MAE/BlD,EAAIsC,OAGJtC,EAAImD,iBACJnD,EAAIoD,UAAU,EAAG,EAAGH,EAAOl9B,MAAOk9B,EAAOI,QACzCrD,EAAI0C,UACN,CASO,SAASY,GACdtD,EACApsB,EACA4H,EACAiR,GAGA8W,GAAgBvD,EAAKpsB,EAAS4H,EAAGiR,EAAG,KACtC,CAGO,SAAS8W,GACdvD,EACApsB,EACA4H,EACAiR,EACArS,GAEA,IAAIhV,EAAco+B,EAAiBC,EAAiBtwB,EAAcuwB,EAAsB39B,EAAe49B,EAAkBC,EACzH,MAAMz/B,EAAQyP,EAAQiwB,WAChBC,EAAWlwB,EAAQkwB,SACnBC,EAASnwB,EAAQmwB,OACvB,IAAIC,GAAOF,GAAY,GAAKhW,GAE5B,GAAI3pB,GAA0B,kBAAVA,IAClBiB,EAAOjB,EAAMylB,WACA,8BAATxkB,GAAiD,+BAATA,GAM1C,OALA46B,EAAIsC,OACJtC,EAAIiE,UAAUzoB,EAAGiR,GACjBuT,EAAI3kB,OAAO2oB,GACXhE,EAAIkE,UAAU//B,GAAQA,EAAM4B,MAAQ,GAAI5B,EAAMk/B,OAAS,EAAGl/B,EAAM4B,MAAO5B,EAAMk/B,aAC7ErD,EAAI0C,UAKR,KAAIpT,MAAMyU,IAAWA,GAAU,GAA/B,CAMA,OAFA/D,EAAImE,YAEIhgC,GAEN,QACMiW,EACF4lB,EAAIoE,QAAQ5oB,EAAGiR,EAAGrS,EAAI,EAAG2pB,EAAQ,EAAG,EAAGrW,IAEvCsS,EAAIqE,IAAI7oB,EAAGiR,EAAGsX,EAAQ,EAAGrW,IAE3BsS,EAAIsE,YACJ,MACF,IAAK,WACHv+B,EAAQqU,EAAIA,EAAI,EAAI2pB,EACpB/D,EAAIuE,OAAO/oB,EAAIzG,KAAK4hB,IAAIqN,GAAOj+B,EAAO0mB,EAAI1X,KAAK6iB,IAAIoM,GAAOD,GAC1DC,GAAO/V,GACP+R,EAAIwE,OAAOhpB,EAAIzG,KAAK4hB,IAAIqN,GAAOj+B,EAAO0mB,EAAI1X,KAAK6iB,IAAIoM,GAAOD,GAC1DC,GAAO/V,GACP+R,EAAIwE,OAAOhpB,EAAIzG,KAAK4hB,IAAIqN,GAAOj+B,EAAO0mB,EAAI1X,KAAK6iB,IAAIoM,GAAOD,GAC1D/D,EAAIsE,YACJ,MACF,IAAK,cAQHZ,EAAwB,KAATK,EACf5wB,EAAO4wB,EAASL,EAChBF,EAAUzuB,KAAK6iB,IAAIoM,EAAMhW,IAAc7a,EACvCwwB,EAAW5uB,KAAK6iB,IAAIoM,EAAMhW,KAAe5T,EAAIA,EAAI,EAAIspB,EAAevwB,GACpEswB,EAAU1uB,KAAK4hB,IAAIqN,EAAMhW,IAAc7a,EACvCywB,EAAW7uB,KAAK4hB,IAAIqN,EAAMhW,KAAe5T,EAAIA,EAAI,EAAIspB,EAAevwB,GACpE6sB,EAAIqE,IAAI7oB,EAAImoB,EAAUlX,EAAIgX,EAASC,EAAcM,EAAMvW,GAAIuW,EAAMjW,IACjEiS,EAAIqE,IAAI7oB,EAAIooB,EAAUnX,EAAI+W,EAASE,EAAcM,EAAMjW,GAASiW,GAChEhE,EAAIqE,IAAI7oB,EAAImoB,EAAUlX,EAAIgX,EAASC,EAAcM,EAAKA,EAAMjW,IAC5DiS,EAAIqE,IAAI7oB,EAAIooB,EAAUnX,EAAI+W,EAASE,EAAcM,EAAMjW,GAASiW,EAAMvW,IACtEuS,EAAIsE,YACJ,MACF,IAAK,OACH,IAAKR,EAAU,CACb3wB,EAAO4B,KAAK0vB,QAAUV,EACtBh+B,EAAQqU,EAAIA,EAAI,EAAIjH,EACpB6sB,EAAI0E,KAAKlpB,EAAIzV,EAAO0mB,EAAItZ,EAAM,EAAIpN,EAAO,EAAIoN,GAC7C,K,CAEF6wB,GAAOhW,GAET,IAAK,UACH2V,EAAW5uB,KAAK6iB,IAAIoM,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxCP,EAAUzuB,KAAK6iB,IAAIoM,GAAOD,EAC1BN,EAAU1uB,KAAK4hB,IAAIqN,GAAOD,EAC1BH,EAAW7uB,KAAK4hB,IAAIqN,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxC/D,EAAIuE,OAAO/oB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIwE,OAAOhpB,EAAIooB,EAAUnX,EAAI+W,GAC7BxD,EAAIwE,OAAOhpB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIwE,OAAOhpB,EAAIooB,EAAUnX,EAAI+W,GAC7BxD,EAAIsE,YACJ,MACF,IAAK,WACHN,GAAOhW,GAET,IAAK,QACH2V,EAAW5uB,KAAK6iB,IAAIoM,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxCP,EAAUzuB,KAAK6iB,IAAIoM,GAAOD,EAC1BN,EAAU1uB,KAAK4hB,IAAIqN,GAAOD,EAC1BH,EAAW7uB,KAAK4hB,IAAIqN,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxC/D,EAAIuE,OAAO/oB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIwE,OAAOhpB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIuE,OAAO/oB,EAAIooB,EAAUnX,EAAI+W,GAC7BxD,EAAIwE,OAAOhpB,EAAIooB,EAAUnX,EAAI+W,GAC7B,MACF,IAAK,OACHG,EAAW5uB,KAAK6iB,IAAIoM,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxCP,EAAUzuB,KAAK6iB,IAAIoM,GAAOD,EAC1BN,EAAU1uB,KAAK4hB,IAAIqN,GAAOD,EAC1BH,EAAW7uB,KAAK4hB,IAAIqN,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxC/D,EAAIuE,OAAO/oB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIwE,OAAOhpB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIuE,OAAO/oB,EAAIooB,EAAUnX,EAAI+W,GAC7BxD,EAAIwE,OAAOhpB,EAAIooB,EAAUnX,EAAI+W,GAC7BQ,GAAOhW,GACP2V,EAAW5uB,KAAK6iB,IAAIoM,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxCP,EAAUzuB,KAAK6iB,IAAIoM,GAAOD,EAC1BN,EAAU1uB,KAAK4hB,IAAIqN,GAAOD,EAC1BH,EAAW7uB,KAAK4hB,IAAIqN,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GACxC/D,EAAIuE,OAAO/oB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIwE,OAAOhpB,EAAImoB,EAAUlX,EAAIgX,GAC7BzD,EAAIuE,OAAO/oB,EAAIooB,EAAUnX,EAAI+W,GAC7BxD,EAAIwE,OAAOhpB,EAAIooB,EAAUnX,EAAI+W,GAC7B,MACF,IAAK,OACHA,EAAUppB,EAAIA,EAAI,EAAIrF,KAAK6iB,IAAIoM,GAAOD,EACtCN,EAAU1uB,KAAK4hB,IAAIqN,GAAOD,EAC1B/D,EAAIuE,OAAO/oB,EAAIgoB,EAAS/W,EAAIgX,GAC5BzD,EAAIwE,OAAOhpB,EAAIgoB,EAAS/W,EAAIgX,GAC5B,MACF,IAAK,OACHzD,EAAIuE,OAAO/oB,EAAGiR,GACduT,EAAIwE,OAAOhpB,EAAIzG,KAAK6iB,IAAIoM,IAAQ5pB,EAAIA,EAAI,EAAI2pB,GAAStX,EAAI1X,KAAK4hB,IAAIqN,GAAOD,GACzE,MACF,KAAK,EACH/D,EAAIsE,YACJ,MAGJtE,EAAI2E,OACA/wB,EAAQgxB,YAAc,GACxB5E,EAAI6E,Q,CAER,CASO,SAASC,GACdjP,EACAkP,EACAC,GAIA,OAFAA,EAASA,GAAU,IAEXD,GAASlP,GAASA,EAAMra,EAAIupB,EAAKxQ,KAAOyQ,GAAUnP,EAAMra,EAAIupB,EAAKvQ,MAAQwQ,GACjFnP,EAAMpJ,EAAIsY,EAAK1K,IAAM2K,GAAUnP,EAAMpJ,EAAIsY,EAAKzK,OAAS0K,CACzD,CAEO,SAASC,GAASjF,EAA+B+E,GACtD/E,EAAIsC,OACJtC,EAAImE,YACJnE,EAAI0E,KAAKK,EAAKxQ,KAAMwQ,EAAK1K,IAAK0K,EAAKvQ,MAAQuQ,EAAKxQ,KAAMwQ,EAAKzK,OAASyK,EAAK1K,KACzE2F,EAAIpD,MACN,CAEO,SAASsI,GAAWlF,GACzBA,EAAI0C,SACN,CAKO,SAASyC,GACdnF,EACAoF,EACA3Z,EACA4Z,EACAhF,GAEA,IAAK+E,EACH,OAAOpF,EAAIwE,OAAO/Y,EAAOjQ,EAAGiQ,EAAOgB,GAErC,GAAa,WAAT4T,EAAmB,CACrB,MAAMiF,GAAYF,EAAS5pB,EAAIiQ,EAAOjQ,GAAK,EAC3CwkB,EAAIwE,OAAOc,EAAUF,EAAS3Y,GAC9BuT,EAAIwE,OAAOc,EAAU7Z,EAAOgB,EAC9B,KAAoB,UAAT4T,MAAuBgF,EAChCrF,EAAIwE,OAAOY,EAAS5pB,EAAGiQ,EAAOgB,GAE9BuT,EAAIwE,OAAO/Y,EAAOjQ,EAAG4pB,EAAS3Y,GAEhCuT,EAAIwE,OAAO/Y,EAAOjQ,EAAGiQ,EAAOgB,EAC9B,CAKO,SAAS8Y,GACdvF,EACAoF,EACA3Z,EACA4Z,GAEA,IAAKD,EACH,OAAOpF,EAAIwE,OAAO/Y,EAAOjQ,EAAGiQ,EAAOgB,GAErCuT,EAAIwF,cACFH,EAAOD,EAASK,KAAOL,EAASM,KAChCL,EAAOD,EAASO,KAAOP,EAASQ,KAChCP,EAAO5Z,EAAOia,KAAOja,EAAOga,KAC5BJ,EAAO5Z,EAAOma,KAAOna,EAAOka,KAC5Bla,EAAOjQ,EACPiQ,EAAOgB,EACX,CAEA,SAASoZ,GAAc7F,EAA+B8F,GAChDA,EAAKC,aACP/F,EAAIiE,UAAU6B,EAAKC,YAAY,GAAID,EAAKC,YAAY,IAGjDrc,GAAcoc,EAAKhC,WACtB9D,EAAI3kB,OAAOyqB,EAAKhC,UAGdgC,EAAKtd,QACPwX,EAAIgG,UAAYF,EAAKtd,OAGnBsd,EAAKG,YACPjG,EAAIiG,UAAYH,EAAKG,WAGnBH,EAAKI,eACPlG,EAAIkG,aAAeJ,EAAKI,aAE5B,CAEA,SAASC,GACPnG,EACAxkB,EACAiR,EACA2Z,EACAN,GAEA,GAAIA,EAAKO,eAAiBP,EAAKQ,UAAW,CAQxC,MAAMC,EAAUvG,EAAIiC,YAAYmE,GAC1B7R,EAAO/Y,EAAI+qB,EAAQC,sBACnBhS,EAAQhZ,EAAI+qB,EAAQE,uBACpBpM,EAAM5N,EAAI8Z,EAAQG,wBAClBpM,EAAS7N,EAAI8Z,EAAQI,yBACrBC,EAAcd,EAAKO,eAAiBhM,EAAMC,GAAU,EAAIA,EAE9D0F,EAAI6G,YAAc7G,EAAIgG,UACtBhG,EAAImE,YACJnE,EAAIjD,UAAY+I,EAAKgB,iBAAmB,EACxC9G,EAAIuE,OAAOhQ,EAAMqS,GACjB5G,EAAIwE,OAAOhQ,EAAOoS,GAClB5G,EAAI6E,Q,CAER,CAEA,SAASkC,GAAa/G,EAA+B8F,GACnD,MAAMkB,EAAWhH,EAAIgG,UAErBhG,EAAIgG,UAAYF,EAAKtd,MACrBwX,EAAIiH,SAASnB,EAAKvR,KAAMuR,EAAKzL,IAAKyL,EAAK//B,MAAO+/B,EAAKzC,QACnDrD,EAAIgG,UAAYgB,CAClB,CAKO,SAASE,GACdlH,EACAxC,EACAhiB,EACAiR,EACAkT,EACAmG,EAAuB,IAEvB,MAAMqB,EAAQzsB,GAAQ8iB,GAAQA,EAAO,CAACA,GAChCqH,EAASiB,EAAKsB,YAAc,GAA0B,KAArBtB,EAAKuB,YAC5C,IAAI/sB,EAAW8rB,EAMf,IAJApG,EAAIsC,OACJtC,EAAIL,KAAOA,EAAKoC,OAChB8D,GAAc7F,EAAK8F,GAEdxrB,EAAI,EAAGA,EAAI6sB,EAAM36B,SAAU8N,EAC9B8rB,EAAOe,EAAM7sB,GAETwrB,EAAKwB,UACPP,GAAa/G,EAAK8F,EAAKwB,UAGrBzC,IACEiB,EAAKuB,cACPrH,EAAI6G,YAAcf,EAAKuB,aAGpB3d,GAAcoc,EAAKsB,eACtBpH,EAAIjD,UAAY+I,EAAKsB,aAGvBpH,EAAIuH,WAAWnB,EAAM5qB,EAAGiR,EAAGqZ,EAAK0B,WAGlCxH,EAAIyH,SAASrB,EAAM5qB,EAAGiR,EAAGqZ,EAAK0B,UAC9BrB,GAAanG,EAAKxkB,EAAGiR,EAAG2Z,EAAMN,GAE9BrZ,GAAKnhB,OAAOq0B,EAAKE,YAGnBG,EAAI0C,SACN,CAOO,SAASgF,GACd1H,EACA0E,GAEA,MAAM,EAAClpB,EAAC,EAAEiR,EAAC,EAAErS,EAAC,EAAEzC,EAAC,OAAEosB,GAAUW,EAG7B1E,EAAIqE,IAAI7oB,EAAIuoB,EAAO4D,QAASlb,EAAIsX,EAAO4D,QAAS5D,EAAO4D,QAAS,IAAMla,GAAIA,IAAI,GAG9EuS,EAAIwE,OAAOhpB,EAAGiR,EAAI9U,EAAIosB,EAAO6D,YAG7B5H,EAAIqE,IAAI7oB,EAAIuoB,EAAO6D,WAAYnb,EAAI9U,EAAIosB,EAAO6D,WAAY7D,EAAO6D,WAAYna,GAAIM,IAAS,GAG1FiS,EAAIwE,OAAOhpB,EAAIpB,EAAI2pB,EAAO8D,YAAapb,EAAI9U,GAG3CqoB,EAAIqE,IAAI7oB,EAAIpB,EAAI2pB,EAAO8D,YAAapb,EAAI9U,EAAIosB,EAAO8D,YAAa9D,EAAO8D,YAAa9Z,GAAS,GAAG,GAGhGiS,EAAIwE,OAAOhpB,EAAIpB,EAAGqS,EAAIsX,EAAO+D,UAG7B9H,EAAIqE,IAAI7oB,EAAIpB,EAAI2pB,EAAO+D,SAAUrb,EAAIsX,EAAO+D,SAAU/D,EAAO+D,SAAU,GAAI/Z,IAAS,GAGpFiS,EAAIwE,OAAOhpB,EAAIuoB,EAAO4D,QAASlb,EACjC,CCxgBA,MAAMsb,GAAc,uCACdC,GAAa,wEAcZ,SAASC,GAAar9B,EAAwBuI,GACnD,MAAM+0B,GAAW,GAAKt9B,GAAOQ,MAAM28B,IACnC,IAAKG,GAA0B,WAAfA,EAAQ,GACtB,OAAc,IAAP/0B,EAKT,OAFAvI,GAASs9B,EAAQ,GAETA,EAAQ,IACd,IAAK,KACH,OAAOt9B,EACT,IAAK,IACHA,GAAS,IACT,MAKJ,OAAOuI,EAAOvI,CAChB,CAEA,MAAMu9B,GAAgB3wB,IAAgBA,GAAK,EAQpC,SAAS4wB,GAAkBx9B,EAAwCzF,GACxE,MAAMqU,EAAM,CAAC,EACP6uB,EAAWte,GAAS5kB,GACpB4O,EAAOs0B,EAAWv0B,OAAOC,KAAK5O,GAASA,EACvCmjC,EAAOve,GAASnf,GAClBy9B,EACEE,GAAQne,GAAexf,EAAM29B,GAAO39B,EAAMzF,EAAMojC,KAChDA,GAAQ39B,EAAM29B,GAChB,IAAM39B,EAEV,IAAK,MAAM29B,KAAQx0B,EACjByF,EAAI+uB,GAAQJ,GAAaG,EAAKC,IAEhC,OAAO/uB,CACT,CAUO,SAASgvB,GAAO59B,GACrB,OAAOw9B,GAAkBx9B,EAAO,CAACyvB,IAAK,IAAK7F,MAAO,IAAK8F,OAAQ,IAAK/F,KAAM,KAC5E,CASO,SAASkU,GAAc79B,GAC5B,OAAOw9B,GAAkBx9B,EAAO,CAAC,UAAW,WAAY,aAAc,eACxE,CAUO,SAAS89B,GAAU99B,GACxB,MAAM0d,EAAMkgB,GAAO59B,GAKnB,OAHA0d,EAAIviB,MAAQuiB,EAAIiM,KAAOjM,EAAIkM,MAC3BlM,EAAI+a,OAAS/a,EAAI+R,IAAM/R,EAAIgS,OAEpBhS,CACT,CAUO,SAASqgB,GAAO/0B,EAA4Bg1B,GACjDh1B,EAAUA,GAAW,CAAC,EACtBg1B,EAAWA,GAAYzP,GAASwG,KAEhC,IAAIxsB,EAAOiX,GAAexW,EAAQT,KAAMy1B,EAASz1B,MAE7B,kBAATA,IACTA,EAAOsT,SAAStT,EAAM,KAExB,IAAIhP,EAAQimB,GAAexW,EAAQzP,MAAOykC,EAASzkC,OAC/CA,KAAW,GAAKA,GAAOiH,MAAM48B,MAC/Ba,QAAQC,KAAK,kCAAoC3kC,EAAQ,KACzDA,OAAQyV,GAGV,MAAM+lB,EAAO,CACXC,OAAQxV,GAAexW,EAAQgsB,OAAQgJ,EAAShJ,QAChDC,WAAYoI,GAAa7d,GAAexW,EAAQisB,WAAY+I,EAAS/I,YAAa1sB,GAClFA,OACAhP,QACAskB,OAAQ2B,GAAexW,EAAQ6U,OAAQmgB,EAASngB,QAChDsZ,OAAQ,IAIV,OADApC,EAAKoC,OAASJ,GAAahC,GACpBA,CACT,CAaO,SAASoJ,GAAQC,EAAwB1J,EAAkB96B,EAAgBykC,GAChF,IACI3uB,EAAW8Q,EAAcxgB,EADzBs+B,GAAY,EAGhB,IAAK5uB,EAAI,EAAG8Q,EAAO4d,EAAOx8B,OAAQ8N,EAAI8Q,IAAQ9Q,EAE5C,GADA1P,EAAQo+B,EAAO1uB,QACDV,IAAVhP,SAGYgP,IAAZ0lB,GAA0C,oBAAV10B,IAClCA,EAAQA,EAAM00B,GACd4J,GAAY,QAEAtvB,IAAVpV,GAAuBkW,GAAQ9P,KACjCA,EAAQA,EAAMpG,EAAQoG,EAAM4B,QAC5B08B,GAAY,QAEAtvB,IAAVhP,GAIF,OAHIq+B,IAASC,IACXD,EAAKC,WAAY,GAEZt+B,CAGb,CAQO,SAASu+B,GAAUC,EAAuCvM,EAAwBH,GACvF,MAAM,IAAC7kB,EAAA,IAAKD,GAAOwxB,EACbC,EAAS5e,GAAYoS,GAAQjlB,EAAMC,GAAO,GAC1CyxB,EAAWA,CAAC1+B,EAAexD,IAAgBs1B,GAAyB,IAAV9xB,EAAc,EAAIA,EAAQxD,EAC1F,MAAO,CACLyQ,IAAKyxB,EAASzxB,GAAM9C,KAAKuZ,IAAI+a,IAC7BzxB,IAAK0xB,EAAS1xB,EAAKyxB,GAEvB,CAUO,SAASE,GAAcC,EAAuBlK,GACnD,OAAOxrB,OAAO8T,OAAO9T,OAAO4X,OAAO8d,GAAgBlK,EACrD,CCnLO,SAASmK,GAIdC,EACAC,EAAW,CAAC,IACZC,EACAhB,EACAiB,EAAYA,IAAMH,EAAO,IAEzB,MAAMI,EAAkBF,GAAcF,EACd,qBAAbd,IACTA,EAAWmB,GAAS,YAAaL,IAEnC,MAAMtH,EAA6B,CACjC,CAACjT,OAAO6a,aAAc,SACtBC,YAAY,EACZC,QAASR,EACTS,YAAaL,EACbvQ,UAAWqP,EACXwB,WAAYP,EACZ5I,SAAWnC,GAAqB2K,GAAgB,CAAC3K,KAAU4K,GAASC,EAAUG,EAAiBlB,IAEjG,OAAO,IAAIyB,MAAMjI,EAAO,CAItBkI,cAAAA,CAAe7e,EAAQ8c,GAIrB,cAHO9c,EAAO8c,UACP9c,EAAO8e,aACPb,EAAO,GAAGnB,IACV,CACT,EAKAxN,GAAAA,CAAItP,EAAQ8c,GACV,OAAOiC,GAAQ/e,EAAQ8c,EACrB,IAAMkC,GAAqBlC,EAAMoB,EAAUD,EAAQje,GACvD,EAMAif,wBAAAA,CAAyBjf,EAAQ8c,GAC/B,OAAOoC,QAAQD,yBAAyBjf,EAAOye,QAAQ,GAAI3B,EAC7D,EAKAqC,cAAAA,GACE,OAAOD,QAAQC,eAAelB,EAAO,GACvC,EAKAnc,GAAAA,CAAI9B,EAAQ8c,GACV,OAAOsC,GAAqBpf,GAAQ4Q,SAASkM,EAC/C,EAKAuC,OAAAA,CAAQrf,GACN,OAAOof,GAAqBpf,EAC9B,EAKA8H,GAAAA,CAAI9H,EAAQ8c,EAAc39B,GACxB,MAAMmgC,EAAUtf,EAAOuf,WAAavf,EAAOuf,SAAWnB,KAGtD,OAFApe,EAAO8c,GAAQwC,EAAQxC,GAAQ39B,SACxB6gB,EAAO8e,OACP,CACT,GAEJ,CAUO,SAASU,GAIdC,EACA5L,EACA6L,EACAC,GAEA,MAAMhJ,EAA4B,CAChC6H,YAAY,EACZoB,OAAQH,EACRI,SAAUhM,EACViM,UAAWJ,EACXK,OAAQ,IAAIhY,IACZwL,aAAcA,GAAakM,EAAOE,GAClCK,WAAazL,GAAmBiL,GAAeC,EAAOlL,EAAKmL,EAAUC,GACrEnK,SAAWnC,GAAqBmM,GAAeC,EAAMjK,SAASnC,GAAQQ,EAAS6L,EAAUC,IAE3F,OAAO,IAAIf,MAAMjI,EAAO,CAItBkI,cAAAA,CAAe7e,EAAQ8c,GAGrB,cAFO9c,EAAO8c,UACP2C,EAAM3C,IACN,CACT,EAKAxN,GAAAA,CAAItP,EAAQ8c,EAAcmD,GACxB,OAAOlB,GAAQ/e,EAAQ8c,EACrB,IAAMoD,GAAoBlgB,EAAQ8c,EAAMmD,GAC5C,EAMAhB,wBAAAA,CAAyBjf,EAAQ8c,GAC/B,OAAO9c,EAAOuT,aAAa4M,QACvBjB,QAAQpd,IAAI2d,EAAO3C,GAAQ,CAAC3V,YAAY,EAAMD,cAAc,QAAQ/Y,EACpE+wB,QAAQD,yBAAyBQ,EAAO3C,EAC9C,EAKAqC,cAAAA,GACE,OAAOD,QAAQC,eAAeM,EAChC,EAKA3d,GAAAA,CAAI9B,EAAQ8c,GACV,OAAOoC,QAAQpd,IAAI2d,EAAO3C,EAC5B,EAKAuC,OAAAA,GACE,OAAOH,QAAQG,QAAQI,EACzB,EAKA3X,GAAAA,CAAI9H,EAAQ8c,EAAM39B,GAGhB,OAFAsgC,EAAM3C,GAAQ39B,SACP6gB,EAAO8c,IACP,CACT,GAEJ,CAKO,SAASvJ,GACdkM,EACA/R,EAA+B,CAAC0S,YAAY,EAAMC,WAAW,IAE7D,MAAM,YAACrS,EAAcN,EAAS0S,WAAU,WAAErS,EAAaL,EAAS2S,UAAS,SAAEC,EAAW5S,EAASyS,SAAWV,EAC1G,MAAO,CACLU,QAASG,EACTF,WAAYpS,EACZqS,UAAWtS,EACXwS,aAAc3e,GAAWoM,GAAeA,EAAc,IAAMA,EAC5DwS,YAAa5e,GAAWmM,GAAcA,EAAa,IAAMA,EAE7D,CAEA,MAAM0S,GAAUA,CAACC,EAAgBjnC,IAAiBinC,EAASA,EAASjf,GAAYhoB,GAAQA,EAClFknC,GAAmBA,CAAC7D,EAAc39B,IAAmBmf,GAASnf,IAAmB,aAAT29B,IAC1C,OAAjCz0B,OAAO82B,eAAehgC,IAAmBA,EAAMsd,cAAgBpU,QAElE,SAAS02B,GACP/e,EACA8c,EACAQ,GAEA,GAAIj1B,OAAO6V,UAAU2C,eAAezC,KAAK4B,EAAQ8c,IAAkB,gBAATA,EACxD,OAAO9c,EAAO8c,GAGhB,MAAM39B,EAAQm+B,IAGd,OADAtd,EAAO8c,GAAQ39B,EACRA,CACT,CAEA,SAAS+gC,GACPlgB,EACA8c,EACAmD,GAEA,MAAM,OAACL,EAAM,SAAEC,EAAQ,UAAEC,EAAWvM,aAAcN,GAAejT,EACjE,IAAI7gB,EAAQygC,EAAO9C,GAanB,OAVIlb,GAAWziB,IAAU8zB,EAAYsN,aAAazD,KAChD39B,EAAQyhC,GAAmB9D,EAAM39B,EAAO6gB,EAAQigB,IAE9ChxB,GAAQ9P,IAAUA,EAAM4B,SAC1B5B,EAAQ0hC,GAAc/D,EAAM39B,EAAO6gB,EAAQiT,EAAYuN,cAErDG,GAAiB7D,EAAM39B,KAEzBA,EAAQqgC,GAAergC,EAAO0gC,EAAUC,GAAaA,EAAUhD,GAAO7J,IAEjE9zB,CACT,CAEA,SAASyhC,GACP9D,EACAgE,EACA9gB,EACAigB,GAEA,MAAM,OAACL,EAAA,SAAQC,EAAA,UAAUC,EAAS,OAAEC,GAAU/f,EAC9C,GAAI+f,EAAOje,IAAIgb,GACb,MAAM,IAAIiE,MAAM,uBAAyB3gC,MAAMU,KAAKi/B,GAAQiB,KAAK,MAAQ,KAAOlE,GAElFiD,EAAOpkC,IAAImhC,GACX,IAAI39B,EAAQ2hC,EAASjB,EAAUC,GAAaG,GAM5C,OALAF,EAAOkB,OAAOnE,GACV6D,GAAiB7D,EAAM39B,KAEzBA,EAAQ+hC,GAAkBtB,EAAOnB,QAASmB,EAAQ9C,EAAM39B,IAEnDA,CACT,CAEA,SAAS0hC,GACP/D,EACA39B,EACA6gB,EACAwgB,GAEA,MAAM,OAACZ,EAAM,SAAEC,EAAQ,UAAEC,EAAWvM,aAAcN,GAAejT,EAEjE,GAA8B,qBAAnB6f,EAAS9mC,OAAyBynC,EAAY1D,GACvD,OAAO39B,EAAM0gC,EAAS9mC,MAAQoG,EAAM4B,QAC/B,GAAIud,GAASnf,EAAM,IAAK,CAE7B,MAAMgiC,EAAMhiC,EACN8+B,EAAS2B,EAAOnB,QAAQ2C,OAAO9yB,GAAKA,IAAM6yB,GAChDhiC,EAAQ,GACR,IAAK,MAAMtG,KAAQsoC,EAAK,CACtB,MAAM3f,EAAW0f,GAAkBjD,EAAQ2B,EAAQ9C,EAAMjkC,GACzDsG,EAAMkiB,KAAKme,GAAehe,EAAUqe,EAAUC,GAAaA,EAAUhD,GAAO7J,GAC9E,C,CAEF,OAAO9zB,CACT,CAEA,SAASkiC,GACPlE,EACAL,EACA39B,GAEA,OAAOyiB,GAAWub,GAAYA,EAASL,EAAM39B,GAASg+B,CACxD,CAEA,MAAMmE,GAAWA,CAACxoC,EAAwByoC,KAA8B,IAARzoC,EAAeyoC,EAC5D,kBAARzoC,EAAmByoB,GAAiBggB,EAAQzoC,QAAOqV,EAE9D,SAASqzB,GACP1Z,EACA2Z,EACA3oC,EACA4oC,EACAviC,GAEA,IAAK,MAAMoiC,KAAUE,EAAc,CACjC,MAAMpO,EAAQiO,GAASxoC,EAAKyoC,GAC5B,GAAIlO,EAAO,CACTvL,EAAInsB,IAAI03B,GACR,MAAM8J,EAAWkE,GAAgBhO,EAAMvF,UAAWh1B,EAAKqG,GACvD,GAAwB,qBAAbg+B,GAA4BA,IAAarkC,GAAOqkC,IAAauE,EAGtE,OAAOvE,C,MAEJ,IAAc,IAAV9J,GAA6C,qBAAnBqO,GAAkC5oC,IAAQ4oC,EAG7E,OAAO,IAEX,CACA,OAAO,CACT,CAEA,SAASR,GACPO,EACAjgB,EACAsb,EACA39B,GAEA,MAAMg/B,EAAa3c,EAASkd,YACtBvB,EAAWkE,GAAgB7f,EAASsM,UAAWgP,EAAM39B,GACrDwiC,EAAY,IAAIF,KAAiBtD,GACjCrW,EAAM,IAAIC,IAChBD,EAAInsB,IAAIwD,GACR,IAAIrG,EAAM8oC,GAAiB9Z,EAAK6Z,EAAW7E,EAAMK,GAAYL,EAAM39B,GACnE,OAAY,OAARrG,KAGoB,qBAAbqkC,GAA4BA,IAAaL,IAClDhkC,EAAM8oC,GAAiB9Z,EAAK6Z,EAAWxE,EAAUrkC,EAAKqG,GAC1C,OAARrG,KAICklC,GAAgB59B,MAAMU,KAAKgnB,GAAM,CAAC,IAAKqW,EAAYhB,EACxD,IAAM0E,GAAargB,EAAUsb,EAAgB39B,IACjD,CAEA,SAASyiC,GACP9Z,EACA6Z,EACA7oC,EACAqkC,EACAtkC,GAEA,MAAOC,EACLA,EAAM0oC,GAAU1Z,EAAK6Z,EAAW7oC,EAAKqkC,EAAUtkC,GAEjD,OAAOC,CACT,CAEA,SAAS+oC,GACPrgB,EACAsb,EACA39B,GAEA,MAAMoiC,EAAS/f,EAASmd,aAClB7B,KAAQyE,IACZA,EAAOzE,GAAQ,CAAC,GAElB,MAAM9c,EAASuhB,EAAOzE,GACtB,OAAI7tB,GAAQ+Q,IAAW1B,GAASnf,GAEvBA,EAEF6gB,GAAU,CAAC,CACpB,CAEA,SAASgf,GACPlC,EACAoB,EACAD,EACAwB,GAEA,IAAItgC,EACJ,IAAK,MAAMuhC,KAAUxC,EAEnB,GADA/+B,EAAQm/B,GAASmC,GAAQC,EAAQ5D,GAAOmB,GACnB,qBAAV9+B,EACT,OAAOwhC,GAAiB7D,EAAM39B,GAC1B+hC,GAAkBjD,EAAQwB,EAAO3C,EAAM39B,GACvCA,CAGV,CAEA,SAASm/B,GAASxlC,EAAamlC,GAC7B,IAAK,MAAM5K,KAAS4K,EAAQ,CAC1B,IAAK5K,EACH,SAEF,MAAMl0B,EAAQk0B,EAAMv6B,GACpB,GAAqB,qBAAVqG,EACT,OAAOA,CAEX,CACF,CAEA,SAASigC,GAAqBpf,GAC5B,IAAI1X,EAAO0X,EAAO8e,MAIlB,OAHKx2B,IACHA,EAAO0X,EAAO8e,MAAQgD,GAAyB9hB,EAAOye,UAEjDn2B,CACT,CAEA,SAASw5B,GAAyB7D,GAChC,MAAMnW,EAAM,IAAIC,IAChB,IAAK,MAAMsL,KAAS4K,EAClB,IAAK,MAAMnlC,KAAOuP,OAAOC,KAAK+qB,GAAO+N,OAAO5yB,IAAMA,EAAEukB,WAAW,MAC7DjL,EAAInsB,IAAI7C,GAGZ,OAAOsH,MAAMU,KAAKgnB,EACpB,CAEO,SAASia,GACd5Y,EACApvB,EACA4G,EACA+H,GAEA,MAAM,OAAC8gB,GAAUL,GACX,IAACrwB,EAAM,KAAOuB,KAAK2nC,SACnBC,EAAS,IAAI7hC,MAAoBsI,GACvC,IAAImG,EAAW8Q,EAAc5mB,EAAeF,EAE5C,IAAKgW,EAAI,EAAG8Q,EAAOjX,EAAOmG,EAAI8Q,IAAQ9Q,EACpC9V,EAAQ8V,EAAIlO,EACZ9H,EAAOkB,EAAKhB,GACZkpC,EAAOpzB,GAAK,CACVlB,EAAG6b,EAAO0Y,MAAM3gB,GAAiB1oB,EAAMC,GAAMC,IAGjD,OAAOkpC,CACT,CClcA,MAAME,GAAUtiC,OAAOsiC,SAAW,MAG5BC,GAAWA,CAAChZ,EAAuBva,IAAmCA,EAAIua,EAAOroB,SAAWqoB,EAAOva,GAAGwzB,MAAQjZ,EAAOva,GACrHyzB,GAAgB5N,GAAuC,MAAdA,EAAoB,IAAM,IAElE,SAAS6N,GACdC,EACAC,EACAC,EACA7mB,GAUA,MAAM8d,EAAW6I,EAAWH,KAAOI,EAAcD,EAC3C94B,EAAU+4B,EACVE,EAAOD,EAAWL,KAAOI,EAAcC,EACvCE,EAAM3d,GAAsBvb,EAASiwB,GACrCkJ,EAAM5d,GAAsB0d,EAAMj5B,GAExC,IAAIo5B,EAAMF,GAAOA,EAAMC,GACnBE,EAAMF,GAAOD,EAAMC,GAGvBC,EAAMjf,MAAMif,GAAO,EAAIA,EACvBC,EAAMlf,MAAMkf,GAAO,EAAIA,EAEvB,MAAMC,EAAKnnB,EAAIinB,EACTG,EAAKpnB,EAAIknB,EAEf,MAAO,CACLpJ,SAAU,CACR5pB,EAAGrG,EAAQqG,EAAIizB,GAAML,EAAK5yB,EAAI4pB,EAAS5pB,GACvCiR,EAAGtX,EAAQsX,EAAIgiB,GAAML,EAAK3hB,EAAI2Y,EAAS3Y,IAEzC2hB,KAAM,CACJ5yB,EAAGrG,EAAQqG,EAAIkzB,GAAMN,EAAK5yB,EAAI4pB,EAAS5pB,GACvCiR,EAAGtX,EAAQsX,EAAIiiB,GAAMN,EAAK3hB,EAAI2Y,EAAS3Y,IAG7C,CAKA,SAASkiB,GAAe9Z,EAAuB+Z,EAAkBC,GAC/D,MAAMC,EAAYja,EAAOroB,OAEzB,IAAIuiC,EAAgBC,EAAeC,EAAcC,EAA0BC,EACvEC,EAAavB,GAAShZ,EAAQ,GAClC,IAAK,IAAIva,EAAI,EAAGA,EAAIw0B,EAAY,IAAKx0B,EACnC60B,EAAeC,EACfA,EAAavB,GAAShZ,EAAQva,EAAI,GAC7B60B,GAAiBC,IAIlBhhB,GAAawgB,EAAOt0B,GAAI,EAAGszB,IAC7BiB,EAAGv0B,GAAKu0B,EAAGv0B,EAAI,GAAK,GAItBy0B,EAASF,EAAGv0B,GAAKs0B,EAAOt0B,GACxB00B,EAAQH,EAAGv0B,EAAI,GAAKs0B,EAAOt0B,GAC3B40B,EAAmBn6B,KAAKmS,IAAI6nB,EAAQ,GAAKh6B,KAAKmS,IAAI8nB,EAAO,GACrDE,GAAoB,IAIxBD,EAAO,EAAIl6B,KAAKga,KAAKmgB,GACrBL,EAAGv0B,GAAKy0B,EAASE,EAAOL,EAAOt0B,GAC/Bu0B,EAAGv0B,EAAI,GAAK00B,EAAQC,EAAOL,EAAOt0B,KAEtC,CAEA,SAAS+0B,GAAgBxa,EAAuBga,EAAc1O,EAAuB,KACnF,MAAMmP,EAAYvB,GAAa5N,GACzB2O,EAAYja,EAAOroB,OACzB,IAAImvB,EAAe4T,EAAkCJ,EACjDC,EAAavB,GAAShZ,EAAQ,GAElC,IAAK,IAAIva,EAAI,EAAGA,EAAIw0B,IAAax0B,EAAG,CAIlC,GAHAi1B,EAAcJ,EACdA,EAAeC,EACfA,EAAavB,GAAShZ,EAAQva,EAAI,IAC7B60B,EACH,SAGF,MAAMK,EAASL,EAAahP,GACtBsP,EAASN,EAAaG,GACxBC,IACF5T,GAAS6T,EAASD,EAAYpP,IAAc,EAC5CgP,EAAa,MAAMhP,KAAeqP,EAAS7T,EAC3CwT,EAAa,MAAMG,KAAeG,EAAS9T,EAAQkT,EAAGv0B,IAEpD80B,IACFzT,GAASyT,EAAWjP,GAAaqP,GAAU,EAC3CL,EAAa,MAAMhP,KAAeqP,EAAS7T,EAC3CwT,EAAa,MAAMG,KAAeG,EAAS9T,EAAQkT,EAAGv0B,GAE1D,CACF,CAQO,SAASo1B,GAAoB7a,EAAuBsL,EAAuB,KAChF,MAAMmP,EAAYvB,GAAa5N,GACzB2O,EAAYja,EAAOroB,OACnBoiC,EAAmB/iC,MAAMijC,GAAWnK,KAAK,GACzCkK,EAAehjC,MAAMijC,GAG3B,IAAIx0B,EAAGi1B,EAAkCJ,EACrCC,EAAavB,GAAShZ,EAAQ,GAElC,IAAKva,EAAI,EAAGA,EAAIw0B,IAAax0B,EAI3B,GAHAi1B,EAAcJ,EACdA,EAAeC,EACfA,EAAavB,GAAShZ,EAAQva,EAAI,GAC7B60B,EAAL,CAIA,GAAIC,EAAY,CACd,MAAMO,EAAaP,EAAWjP,GAAagP,EAAahP,GAGxDyO,EAAOt0B,GAAoB,IAAfq1B,GAAoBP,EAAWE,GAAaH,EAAaG,IAAcK,EAAa,C,CAElGd,EAAGv0B,GAAMi1B,EACJH,EACEjhB,GAAKygB,EAAOt0B,EAAI,MAAQ6T,GAAKygB,EAAOt0B,IAAO,GACzCs0B,EAAOt0B,EAAI,GAAKs0B,EAAOt0B,IAAM,EAFpBs0B,EAAOt0B,EAAI,GADNs0B,EAAOt0B,E,CAMhCq0B,GAAe9Z,EAAQ+Z,EAAQC,GAE/BQ,GAAgBxa,EAAQga,EAAI1O,EAC9B,CAEA,SAASyP,GAAgBC,EAAYh4B,EAAaD,GAChD,OAAO7C,KAAK6C,IAAI7C,KAAK8C,IAAIg4B,EAAIj4B,GAAMC,EACrC,CAEA,SAASi4B,GAAgBjb,EAAuBkQ,GAC9C,IAAIzqB,EAAG8Q,EAAMyK,EAAOka,EAAQC,EACxBC,EAAanL,GAAejQ,EAAO,GAAIkQ,GAC3C,IAAKzqB,EAAI,EAAG8Q,EAAOyJ,EAAOroB,OAAQ8N,EAAI8Q,IAAQ9Q,EAC5C01B,EAAaD,EACbA,EAASE,EACTA,EAAa31B,EAAI8Q,EAAO,GAAK0Z,GAAejQ,EAAOva,EAAI,GAAIyqB,GACtDgL,IAGLla,EAAQhB,EAAOva,GACX01B,IACFna,EAAM4P,KAAOmK,GAAgB/Z,EAAM4P,KAAMV,EAAKxQ,KAAMwQ,EAAKvQ,OACzDqB,EAAM8P,KAAOiK,GAAgB/Z,EAAM8P,KAAMZ,EAAK1K,IAAK0K,EAAKzK,SAEtD2V,IACFpa,EAAM6P,KAAOkK,GAAgB/Z,EAAM6P,KAAMX,EAAKxQ,KAAMwQ,EAAKvQ,OACzDqB,EAAM+P,KAAOgK,GAAgB/Z,EAAM+P,KAAMb,EAAK1K,IAAK0K,EAAKzK,SAG9D,CAKO,SAAS4V,GACdrb,EACAjhB,EACAmxB,EACA5tB,EACAgpB,GAEA,IAAI7lB,EAAW8Q,EAAcyK,EAAoBsa,EAOjD,GAJIv8B,EAAQwhB,WACVP,EAASA,EAAOgY,OAAQgD,IAAQA,EAAG/B,OAGE,aAAnCl6B,EAAQw8B,uBACVV,GAAoB7a,EAAQsL,OACvB,CACL,IAAIkQ,EAAOl5B,EAAO0d,EAAOA,EAAOroB,OAAS,GAAKqoB,EAAO,GACrD,IAAKva,EAAI,EAAG8Q,EAAOyJ,EAAOroB,OAAQ8N,EAAI8Q,IAAQ9Q,EAC5Cub,EAAQhB,EAAOva,GACf61B,EAAgBnC,GACdqC,EACAxa,EACAhB,EAAO9f,KAAK8C,IAAIyC,EAAI,EAAG8Q,GAAQjU,EAAO,EAAI,IAAMiU,GAChDxX,EAAQ08B,SAEVza,EAAM4P,KAAO0K,EAAc/K,SAAS5pB,EACpCqa,EAAM8P,KAAOwK,EAAc/K,SAAS3Y,EACpCoJ,EAAM6P,KAAOyK,EAAc/B,KAAK5yB,EAChCqa,EAAM+P,KAAOuK,EAAc/B,KAAK3hB,EAChC4jB,EAAOxa,C,CAIPjiB,EAAQk8B,iBACVA,GAAgBjb,EAAQkQ,EAE5B,CCtNO,SAASwL,KACd,MAAyB,qBAAX3qC,QAA8C,qBAAb4qC,QACjD,CAKO,SAASC,GAAeC,GAC7B,IAAI1D,EAAS0D,EAAQC,WAIrB,OAHI3D,GAAgC,wBAAtBA,EAAOpjB,aACnBojB,EAAUA,EAAsB4D,MAE3B5D,CACT,CAOA,SAAS6D,GAAcC,EAA6BlS,EAAmBmS,GACrE,IAAIC,EAYJ,MAX0B,kBAAfF,GACTE,EAAgBvqB,SAASqqB,EAAY,KAEJ,IAA7BA,EAAWjlB,QAAQ,OAErBmlB,EAAgBA,EAAiB,IAAOpS,EAAK+R,WAAWI,KAG1DC,EAAgBF,EAGXE,CACT,CAEA,MAAMC,GAAoBC,GACxBA,EAAQC,cAAcC,YAAYH,iBAAiBC,EAAS,MAEvD,SAASG,GAAS9qC,EAAiBopB,GACxC,OAAOshB,GAAiB1qC,GAAI+qC,iBAAiB3hB,EAC/C,CAEA,MAAM4hB,GAAY,CAAC,MAAO,QAAS,SAAU,QAC7C,SAASC,GAAmBC,EAA6BttC,EAAeutC,GACtE,MAAM5iB,EAAS,CAAC,EAChB4iB,EAASA,EAAS,IAAMA,EAAS,GACjC,IAAK,IAAIp3B,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMq3B,EAAMJ,GAAUj3B,GACtBwU,EAAO6iB,GAAOnnB,WAAWinB,EAAOttC,EAAQ,IAAMwtC,EAAMD,KAAY,CAClE,CAGA,OAFA5iB,EAAO/oB,MAAQ+oB,EAAOyF,KAAOzF,EAAO0F,MACpC1F,EAAOuU,OAASvU,EAAOuL,IAAMvL,EAAOwL,OAC7BxL,CACT,CAEA,MAAM8iB,GAAeA,CAACp2B,EAAWiR,EAAWhB,KACzCjQ,EAAI,GAAKiR,EAAI,MAAQhB,IAAWA,EAAwBomB,YAO3D,SAASC,GACPj5B,EACAoqB,GAMA,MAAM8O,EAAUl5B,EAAkBk5B,QAC5BvmB,EAAUumB,GAAWA,EAAQvlC,OAASulC,EAAQ,GAAKl5B,GACnD,QAACm5B,EAAA,QAASC,GAAWzmB,EAC3B,IACIhQ,EAAGiR,EADHylB,GAAM,EAEV,GAAIN,GAAaI,EAASC,EAASp5B,EAAE4S,QACnCjQ,EAAIw2B,EACJvlB,EAAIwlB,MACC,CACL,MAAMvN,EAAOzB,EAAOkP,wBACpB32B,EAAIgQ,EAAO4mB,QAAU1N,EAAKnQ,KAC1B9H,EAAIjB,EAAO6mB,QAAU3N,EAAKrK,IAC1B6X,GAAM,C,CAER,MAAO,CAAC12B,IAAGiR,IAAGylB,MAChB,CASO,SAASI,GACdC,EACA9W,GAEA,GAAI,WAAY8W,EACd,OAAOA,EAGT,MAAM,OAACtP,EAAA,wBAAQH,GAA2BrH,EACpCt3B,EAAQ8sC,GAAiBhO,GACzBuP,EAAgC,eAApBruC,EAAMsuC,UAClBC,EAAWlB,GAAmBrtC,EAAO,WACrCwuC,EAAUnB,GAAmBrtC,EAAO,SAAU,UAC9C,EAACqX,EAAA,EAAGiR,EAAA,IAAGylB,GAAOJ,GAAkBS,EAAOtP,GACvCO,EAAUkP,EAASne,MAAQ2d,GAAOS,EAAQpe,MAC1CkP,EAAUiP,EAASrY,KAAO6X,GAAOS,EAAQtY,KAE/C,IAAI,MAACt0B,EAAA,OAAOs9B,GAAU5H,EAKtB,OAJI+W,IACFzsC,GAAS2sC,EAAS3sC,MAAQ4sC,EAAQ5sC,MAClCs9B,GAAUqP,EAASrP,OAASsP,EAAQtP,QAE/B,CACL7nB,EAAGzG,KAAKC,OAAOwG,EAAIgoB,GAAWz9B,EAAQk9B,EAAOl9B,MAAQ+8B,GACrDrW,EAAG1X,KAAKC,OAAOyX,EAAIgX,GAAWJ,EAASJ,EAAOI,OAASP,GAE3D,CAEA,SAAS8P,GAAiB3P,EAA2Bl9B,EAAes9B,GAClE,IAAImE,EAAkBqL,EAEtB,QAAcj5B,IAAV7T,QAAkC6T,IAAXypB,EAAsB,CAC/C,MAAMyP,EAAY7P,GAAUwN,GAAexN,GAC3C,GAAK6P,EAGE,CACL,MAAMpO,EAAOoO,EAAUX,wBACjBY,EAAiB9B,GAAiB6B,GAClCE,EAAkBxB,GAAmBuB,EAAgB,SAAU,SAC/DE,EAAmBzB,GAAmBuB,EAAgB,WAC5DhtC,EAAQ2+B,EAAK3+B,MAAQktC,EAAiBltC,MAAQitC,EAAgBjtC,MAC9Ds9B,EAASqB,EAAKrB,OAAS4P,EAAiB5P,OAAS2P,EAAgB3P,OACjEmE,EAAWqJ,GAAckC,EAAevL,SAAUsL,EAAW,eAC7DD,EAAYhC,GAAckC,EAAeF,UAAWC,EAAW,e,MAV/D/sC,EAAQk9B,EAAOiQ,YACf7P,EAASJ,EAAOkQ,Y,CAYpB,MAAO,CACLptC,QACAs9B,SACAmE,SAAUA,GAAY5Z,GACtBilB,UAAWA,GAAajlB,GAE5B,CAEA,MAAMwlB,GAAU57B,GAAczC,KAAKC,MAAU,GAAJwC,GAAU,GAG5C,SAAS67B,GACdpQ,EACAqQ,EACAC,EACAC,GAEA,MAAMrvC,EAAQ8sC,GAAiBhO,GACzBwQ,EAAUjC,GAAmBrtC,EAAO,UACpCqjC,EAAWqJ,GAAc1sC,EAAMqjC,SAAUvE,EAAQ,gBAAkBrV,GACnEilB,EAAYhC,GAAc1sC,EAAM0uC,UAAW5P,EAAQ,iBAAmBrV,GACtE8lB,EAAgBd,GAAiB3P,EAAQqQ,EAASC,GACxD,IAAI,MAACxtC,EAAA,OAAOs9B,GAAUqQ,EAEtB,GAAwB,gBAApBvvC,EAAMsuC,UAA6B,CACrC,MAAME,EAAUnB,GAAmBrtC,EAAO,SAAU,SAC9CuuC,EAAWlB,GAAmBrtC,EAAO,WAC3C4B,GAAS2sC,EAAS3sC,MAAQ4sC,EAAQ5sC,MAClCs9B,GAAUqP,EAASrP,OAASsP,EAAQtP,M,CAEtCt9B,EAAQgP,KAAK6C,IAAI,EAAG7R,EAAQ0tC,EAAQ1tC,OACpCs9B,EAAStuB,KAAK6C,IAAI,EAAG47B,EAAcztC,EAAQytC,EAAcnQ,EAASoQ,EAAQpQ,QAC1Et9B,EAAQqtC,GAAOr+B,KAAK8C,IAAI9R,EAAOyhC,EAAUkM,EAAclM,WACvDnE,EAAS+P,GAAOr+B,KAAK8C,IAAIwrB,EAAQwP,EAAWa,EAAcb,YACtD9sC,IAAUs9B,IAGZA,EAAS+P,GAAOrtC,EAAQ,IAG1B,MAAM4tC,OAA6B/5B,IAAZ05B,QAAsC15B,IAAb25B,EAOhD,OALII,GAAkBH,GAAeE,EAAcrQ,QAAUA,EAASqQ,EAAcrQ,SAClFA,EAASqQ,EAAcrQ,OACvBt9B,EAAQqtC,GAAOr+B,KAAK2Z,MAAM2U,EAASmQ,KAG9B,CAACztC,QAAOs9B,SACjB,CAQO,SAASuQ,GACdnY,EACAoY,EACAC,GAEA,MAAMC,EAAaF,GAAc,EAC3BG,EAAeZ,GAAO3X,EAAM4H,OAAS0Q,GACrCE,EAAcb,GAAO3X,EAAM11B,MAAQguC,GAExCtY,EAAuB4H,OAAS+P,GAAO3X,EAAM4H,QAC7C5H,EAAuB11B,MAAQqtC,GAAO3X,EAAM11B,OAE7C,MAAMk9B,EAASxH,EAAMwH,OAUrB,OALIA,EAAO9+B,QAAU2vC,IAAgB7Q,EAAO9+B,MAAMk/B,SAAWJ,EAAO9+B,MAAM4B,SACxEk9B,EAAO9+B,MAAMk/B,OAAS,GAAG5H,EAAM4H,WAC/BJ,EAAO9+B,MAAM4B,MAAQ,GAAG01B,EAAM11B,YAG5B01B,EAAMqH,0BAA4BiR,GAC/B9Q,EAAOI,SAAW2Q,GAClB/Q,EAAOl9B,QAAUkuC,KACrBxY,EAAuBqH,wBAA0BiR,EAClD9Q,EAAOI,OAAS2Q,EAChB/Q,EAAOl9B,MAAQkuC,EACfxY,EAAMuE,IAAIkU,aAAaH,EAAY,EAAG,EAAGA,EAAY,EAAG,IACjD,EAGX,CAOa,MAAAI,GAAgC,WAC3C,IAAIC,GAAmB,EACvB,IACE,MAAMxgC,EAAU,CACd,WAAIygC,GAEF,OADAD,GAAmB,GACZ,CACT,GAGE7D,OACF3qC,OAAO0B,iBAAiB,OAAQ,KAAMsM,GACtChO,OAAO4B,oBAAoB,OAAQ,KAAMoM,GAE7C,CAAE,MAAOiF,G,CAGT,OAAOu7B,CACT,CAlB6C,GA8BtC,SAASE,GACdpD,EACAvhB,GAEA,MAAM/kB,EAAQymC,GAASH,EAASvhB,GAC1BuY,EAAUt9B,GAASA,EAAMQ,MAAM,qBACrC,OAAO88B,GAAWA,EAAQ,QAAKtuB,CACjC,CCtRO,SAAS26B,GAAap5B,EAAWC,EAAWkM,EAAW+Y,GAC5D,MAAO,CACL7kB,EAAGL,EAAGK,EAAI8L,GAAKlM,EAAGI,EAAIL,EAAGK,GACzBiR,EAAGtR,EAAGsR,EAAInF,GAAKlM,EAAGqR,EAAItR,EAAGsR,GAE7B,CAKO,SAAS+nB,GACdr5B,EACAC,EACAkM,EAAW+Y,GAEX,MAAO,CACL7kB,EAAGL,EAAGK,EAAI8L,GAAKlM,EAAGI,EAAIL,EAAGK,GACzBiR,EAAY,WAAT4T,EAAoB/Y,EAAI,GAAMnM,EAAGsR,EAAIrR,EAAGqR,EAC9B,UAAT4T,EAAmB/Y,EAAI,EAAInM,EAAGsR,EAAIrR,EAAGqR,EACnCnF,EAAI,EAAIlM,EAAGqR,EAAItR,EAAGsR,EAE5B,CAKO,SAASgoB,GAAqBt5B,EAAiBC,EAAiBkM,EAAW+Y,GAChF,MAAMqU,EAAM,CAACl5B,EAAGL,EAAGuqB,KAAMjZ,EAAGtR,EAAGyqB,MACzB+O,EAAM,CAACn5B,EAAGJ,EAAGqqB,KAAMhZ,EAAGrR,EAAGuqB,MACzBltB,EAAI87B,GAAap5B,EAAIu5B,EAAKptB,GAC1B5O,EAAI67B,GAAaG,EAAKC,EAAKrtB,GAC3B3O,EAAI47B,GAAaI,EAAKv5B,EAAIkM,GAC1B1O,EAAI27B,GAAa97B,EAAGC,EAAG4O,GACvBzO,EAAI07B,GAAa77B,EAAGC,EAAG2O,GAC7B,OAAOitB,GAAa37B,EAAGC,EAAGyO,EAC5B,CChCA,MAAMstB,GAAwB,SAASC,EAAe9uC,GACpD,MAAO,CACLyV,CAAAA,CAAEA,GACA,OAAOq5B,EAAQA,EAAQ9uC,EAAQyV,CACjC,EACAs5B,QAAAA,CAAS16B,GACPrU,EAAQqU,CACV,EACA6rB,SAAAA,CAAU7R,GACR,MAAc,WAAVA,EACKA,EAEQ,UAAVA,EAAoB,OAAS,OACtC,EACA2gB,KAAAA,CAAMv5B,EAAG5Q,GACP,OAAO4Q,EAAI5Q,CACb,EACAoqC,UAAAA,CAAWx5B,EAAGy5B,GACZ,OAAOz5B,EAAIy5B,CACb,EAEJ,EAEMC,GAAwB,WAC5B,MAAO,CACL15B,CAAAA,CAAEA,GACA,OAAOA,CACT,EACAs5B,QAAAA,CAAS16B,GAAI,EAEb6rB,SAAAA,CAAU7R,GACR,OAAOA,CACT,EACA2gB,KAAAA,CAAMv5B,EAAG5Q,GACP,OAAO4Q,EAAI5Q,CACb,EACAoqC,UAAAA,CAAWx5B,EAAG25B,GACZ,OAAO35B,CACT,EAEJ,EAEO,SAAS45B,GAAc3gB,EAAcogB,EAAe9uC,GACzD,OAAO0uB,EAAMmgB,GAAsBC,EAAO9uC,GAASmvC,IACrD,CAEO,SAASG,GAAsBrV,EAA+BsV,GACnE,IAAInxC,EAA4BoxC,EACd,QAAdD,GAAqC,QAAdA,IACzBnxC,EAAQ67B,EAAIiD,OAAO9+B,MACnBoxC,EAAW,CACTpxC,EAAMmtC,iBAAiB,aACvBntC,EAAMqxC,oBAAoB,cAG5BrxC,EAAMsxC,YAAY,YAAaH,EAAW,aACzCtV,EAAiD0V,kBAAoBH,EAE1E,CAEO,SAASI,GAAqB3V,EAA+BuV,QACjD37B,IAAb27B,WACMvV,EAAiD0V,kBACzD1V,EAAIiD,OAAO9+B,MAAMsxC,YAAY,YAAaF,EAAS,GAAIA,EAAS,IAEpE,CC/DA,SAASK,GAAWjmB,GAClB,MAAiB,UAAbA,EACK,CACLkmB,QAAS9kB,GACT+kB,QAASjlB,GACTklB,UAAWjlB,IAGR,CACL+kB,QAASrkB,GACTskB,QAASA,CAACr9B,EAAGC,IAAMD,EAAIC,EACvBq9B,UAAWv6B,GAAKA,EAEpB,CAEA,SAASw6B,IAAiB,MAAC5pC,EAAK,IAAE4kB,EAAG,MAAE7c,EAAK,KAAEgD,EAAI,MAAEhT,IAClD,MAAO,CACLiI,MAAOA,EAAQ+H,EACf6c,IAAKA,EAAM7c,EACXgD,KAAMA,IAAS6Z,EAAM5kB,EAAQ,GAAK+H,IAAU,EAC5ChQ,QAEJ,CAEA,SAAS8xC,GAAWC,EAASrhB,EAAQ8H,GACnC,MAAM,SAAChN,EAAUvjB,MAAO+pC,EAAYnlB,IAAKolB,GAAYzZ,GAC/C,QAACkZ,EAAO,UAAEE,GAAaH,GAAWjmB,GAClCxb,EAAQ0gB,EAAOroB,OAErB,IACI8N,EAAG8Q,GADH,MAAChf,EAAK,IAAE4kB,EAAA,KAAK7Z,GAAQ++B,EAGzB,GAAI/+B,EAAM,CAGR,IAFA/K,GAAS+H,EACT6c,GAAO7c,EACFmG,EAAI,EAAG8Q,EAAOjX,EAAOmG,EAAI8Q,IAAQ9Q,EAAG,CACvC,IAAKu7B,EAAQE,EAAUlhB,EAAOzoB,EAAQ+H,GAAOwb,IAAYwmB,EAAYC,GACnE,MAEFhqC,IACA4kB,GACF,CACA5kB,GAAS+H,EACT6c,GAAO7c,C,CAMT,OAHI6c,EAAM5kB,IACR4kB,GAAO7c,GAEF,CAAC/H,QAAO4kB,MAAK7Z,OAAMhT,MAAO+xC,EAAQ/xC,MAC3C,CAgBO,SAASkyC,GAAcH,EAASrhB,EAAQ8H,GAC7C,IAAKA,EACH,MAAO,CAACuZ,GAGV,MAAM,SAACvmB,EAAUvjB,MAAO+pC,EAAYnlB,IAAKolB,GAAYzZ,EAC/CxoB,EAAQ0gB,EAAOroB,QACf,QAACspC,EAAA,QAASD,EAAA,UAASE,GAAaH,GAAWjmB,IAC3C,MAACvjB,EAAA,IAAO4kB,EAAA,KAAK7Z,EAAA,MAAMhT,GAAS8xC,GAAWC,EAASrhB,EAAQ8H,GAExD7N,EAAS,GACf,IAEIlkB,EAAOirB,EAAOygB,EAFdC,GAAS,EACTC,EAAW,KAGf,MAAMC,EAAgBA,IAAMZ,EAAQM,EAAYG,EAAW1rC,IAA6C,IAAnCkrC,EAAQK,EAAYG,GACnFI,EAAcA,IAAmC,IAA7BZ,EAAQM,EAAUxrC,IAAgBirC,EAAQO,EAAUE,EAAW1rC,GACnF+rC,EAAcA,IAAMJ,GAAUE,IAC9BG,EAAaA,KAAOL,GAAUG,IAEpC,IAAK,IAAIp8B,EAAIlO,EAAOikC,EAAOjkC,EAAOkO,GAAK0W,IAAO1W,EAC5Cub,EAAQhB,EAAOva,EAAInG,GAEf0hB,EAAMiY,OAIVljC,EAAQmrC,EAAUlgB,EAAMlG,IAEpB/kB,IAAU0rC,IAIdC,EAASV,EAAQjrC,EAAOurC,EAAYC,GAEnB,OAAbI,GAAqBG,MACvBH,EAA0C,IAA/BV,EAAQlrC,EAAOurC,GAAoB77B,EAAI+1B,GAGnC,OAAbmG,GAAqBI,MACvB9nB,EAAOhC,KAAKkpB,GAAiB,CAAC5pC,MAAOoqC,EAAUxlB,IAAK1W,EAAGnD,OAAMhD,QAAOhQ,WACpEqyC,EAAW,MAEbnG,EAAO/1B,EACPg8B,EAAY1rC,IAOd,OAJiB,OAAb4rC,GACF1nB,EAAOhC,KAAKkpB,GAAiB,CAAC5pC,MAAOoqC,EAAUxlB,MAAK7Z,OAAMhD,QAAOhQ,WAG5D2qB,CACT,CAYO,SAAS+nB,GAAezQ,EAAMzJ,GACnC,MAAM7N,EAAS,GACTgoB,EAAW1Q,EAAK0Q,SAEtB,IAAK,IAAIx8B,EAAI,EAAGA,EAAIw8B,EAAStqC,OAAQ8N,IAAK,CACxC,MAAMy8B,EAAMV,GAAcS,EAASx8B,GAAI8rB,EAAKvR,OAAQ8H,GAChDoa,EAAIvqC,QACNsiB,EAAOhC,QAAQiqB,EAEnB,CACA,OAAOjoB,CACT,CAKA,SAASkoB,GAAgBniB,EAAQ1gB,EAAOgD,EAAMie,GAC5C,IAAIhpB,EAAQ,EACR4kB,EAAM7c,EAAQ,EAElB,GAAIgD,IAASie,EAEX,MAAOhpB,EAAQ+H,IAAU0gB,EAAOzoB,GAAO0hC,KACrC1hC,IAKJ,MAAOA,EAAQ+H,GAAS0gB,EAAOzoB,GAAO0hC,KACpC1hC,IAIFA,GAAS+H,EAELgD,IAEF6Z,GAAO5kB,GAGT,MAAO4kB,EAAM5kB,GAASyoB,EAAO7D,EAAM7c,GAAO25B,KACxC9c,IAMF,OAFAA,GAAO7c,EAEA,CAAC/H,QAAO4kB,MACjB,CASA,SAASimB,GAAcpiB,EAAQzoB,EAAOwL,EAAKT,GACzC,MAAMhD,EAAQ0gB,EAAOroB,OACfsiB,EAAS,GACf,IAEIkC,EAFAgB,EAAO5lB,EACPikC,EAAOxb,EAAOzoB,GAGlB,IAAK4kB,EAAM5kB,EAAQ,EAAG4kB,GAAOpZ,IAAOoZ,EAAK,CACvC,MAAMkmB,EAAMriB,EAAO7D,EAAM7c,GACrB+iC,EAAIpJ,MAAQoJ,EAAIC,KACb9G,EAAKvC,OACR32B,GAAO,EACP2X,EAAOhC,KAAK,CAAC1gB,MAAOA,EAAQ+H,EAAO6c,KAAMA,EAAM,GAAK7c,EAAOgD,SAE3D/K,EAAQ4lB,EAAOklB,EAAIC,KAAOnmB,EAAM,OAGlCgB,EAAOhB,EACHqf,EAAKvC,OACP1hC,EAAQ4kB,IAGZqf,EAAO6G,CACT,CAMA,OAJa,OAATllB,GACFlD,EAAOhC,KAAK,CAAC1gB,MAAOA,EAAQ+H,EAAO6c,IAAKgB,EAAO7d,EAAOgD,SAGjD2X,CACT,CAUO,SAASsoB,GAAiBhR,EAAMiR,GACrC,MAAMxiB,EAASuR,EAAKvR,OACdO,EAAWgR,EAAKxyB,QAAQwhB,SACxBjhB,EAAQ0gB,EAAOroB,OAErB,IAAK2H,EACH,MAAO,GAGT,MAAMgD,IAASivB,EAAKkR,OACd,MAAClrC,EAAA,IAAO4kB,GAAOgmB,GAAgBniB,EAAQ1gB,EAAOgD,EAAMie,GAE1D,IAAiB,IAAbA,EACF,OAAOmiB,GAAcnR,EAAM,CAAC,CAACh6B,QAAO4kB,MAAK7Z,SAAQ0d,EAAQwiB,GAG3D,MAAMz/B,EAAMoZ,EAAM5kB,EAAQ4kB,EAAM7c,EAAQ6c,EAClCwmB,IAAiBpR,EAAKqR,WAAuB,IAAVrrC,GAAe4kB,IAAQ7c,EAAQ,EACxE,OAAOojC,GAAcnR,EAAM6Q,GAAcpiB,EAAQzoB,EAAOwL,EAAK4/B,GAAe3iB,EAAQwiB,EACtF,CAQA,SAASE,GAAcnR,EAAM0Q,EAAUjiB,EAAQwiB,GAC7C,OAAKA,GAAmBA,EAAe5L,YAAe5W,EAG/C6iB,GAAgBtR,EAAM0Q,EAAUjiB,EAAQwiB,GAFtCP,CAGX,CASA,SAASY,GAAgBtR,EAAM0Q,EAAUjiB,EAAQwiB,GAC/C,MAAMM,EAAevR,EAAKwR,OAAO1U,aAC3B2U,EAAYC,GAAU1R,EAAKxyB,UAC1BmkC,cAAexsB,EAAc3X,SAAS,SAACwhB,IAAagR,EACrDjyB,EAAQ0gB,EAAOroB,OACfsiB,EAAS,GACf,IAAIkpB,EAAYH,EACZzrC,EAAQ0qC,EAAS,GAAG1qC,MACpBkO,EAAIlO,EAER,SAAS6rC,EAASl+B,EAAGlB,EAAGnB,EAAGwgC,GACzB,MAAMC,EAAM/iB,GAAY,EAAI,EAC5B,GAAIrb,IAAMlB,EAAV,CAIAkB,GAAK5F,EACL,MAAO0gB,EAAO9a,EAAI5F,GAAO25B,KACvB/zB,GAAKo+B,EAEP,MAAOtjB,EAAOhc,EAAI1E,GAAO25B,KACvBj1B,GAAKs/B,EAEHp+B,EAAI5F,IAAU0E,EAAI1E,IACpB2a,EAAOhC,KAAK,CAAC1gB,MAAO2N,EAAI5F,EAAO6c,IAAKnY,EAAI1E,EAAOgD,KAAMO,EAAGvT,MAAO+zC,IAC/DF,EAAYE,EACZ9rC,EAAQyM,EAAI1E,E,CAEhB,CAEA,IAAK,MAAM+hC,KAAWY,EAAU,CAC9B1qC,EAAQgpB,EAAWhpB,EAAQ8pC,EAAQ9pC,MACnC,IACIjI,EADAksC,EAAOxb,EAAOzoB,EAAQ+H,GAE1B,IAAKmG,EAAIlO,EAAQ,EAAGkO,GAAK47B,EAAQllB,IAAK1W,IAAK,CACzC,MAAMu1B,EAAKhb,EAAOva,EAAInG,GACtBhQ,EAAQ2zC,GAAUT,EAAe5L,WAAWlC,GAAcoO,EAAc,CACtEvyC,KAAM,UACNgzC,GAAI/H,EACJl1B,GAAI00B,EACJwI,aAAc/9B,EAAI,GAAKnG,EACvBmkC,YAAah+B,EAAInG,EACjBoX,mBAEEgtB,GAAap0C,EAAO6zC,IACtBC,EAAS7rC,EAAOkO,EAAI,EAAG47B,EAAQ/+B,KAAM6gC,GAEvC3H,EAAOR,EACPmI,EAAY7zC,CACd,CACIiI,EAAQkO,EAAI,GACd29B,EAAS7rC,EAAOkO,EAAI,EAAG47B,EAAQ/+B,KAAM6gC,EAEzC,CAEA,OAAOlpB,CACT,CAEA,SAASgpB,GAAUlkC,GACjB,MAAO,CACLsrB,gBAAiBtrB,EAAQsrB,gBACzBsZ,eAAgB5kC,EAAQ4kC,eACxBC,WAAY7kC,EAAQ6kC,WACpBC,iBAAkB9kC,EAAQ8kC,iBAC1BC,gBAAiB/kC,EAAQ+kC,gBACzB/T,YAAahxB,EAAQgxB,YACrBzF,YAAavrB,EAAQurB,YAEzB,CAEA,SAASoZ,GAAap0C,EAAO6zC,GAC3B,IAAKA,EACH,OAAO,EAET,MAAM5V,EAAQ,GACRwW,EAAW,SAASr0C,EAAKqG,GAC7B,OAAKkuB,GAAoBluB,IAGpBw3B,EAAM/F,SAASzxB,IAClBw3B,EAAMtV,KAAKliB,GAENw3B,EAAMvW,QAAQjhB,IALZA,CAMX,EACA,OAAOgwB,KAAKC,UAAU12B,EAAOy0C,KAAche,KAAKC,UAAUmd,EAAWY,EACvE,CCzWA,SAASC,GAAehY,EAAciY,EAAsBC,GAC1D,OAAOlY,EAAMjtB,QAAQgpB,KAAOiE,EAAMkY,GAASD,EAAUC,EACvD,CAEA,SAASC,GAAepkB,EAAiBkkB,GACvC,MAAM,OAAC9iB,EAAA,OAAQC,GAAUrB,EACzB,OAAIoB,GAAUC,EACL,CACL1B,KAAMskB,GAAe7iB,EAAQ8iB,EAAW,QACxCtkB,MAAOqkB,GAAe7iB,EAAQ8iB,EAAW,SACzCze,IAAKwe,GAAe5iB,EAAQ6iB,EAAW,OACvCxe,OAAQue,GAAe5iB,EAAQ6iB,EAAW,WAGvCA,CACT,CAEO,SAASG,GAAmBxd,EAAc7G,GAC/C,MAAMgI,EAAOhI,EAAKskB,MAClB,GAAItc,EAAK70B,SACP,OAAO,EAET,MAAMg9B,EAAOiU,GAAepkB,EAAM6G,EAAMqd,WAExC,MAAO,CACLvkB,MAAoB,IAAdqI,EAAKrI,KAAiB,EAAIwQ,EAAKxQ,OAAsB,IAAdqI,EAAKrI,KAAgB,EAAIqI,EAAKrI,MAC3EC,OAAsB,IAAfoI,EAAKpI,MAAkBiH,EAAM11B,MAAQg/B,EAAKvQ,QAAwB,IAAfoI,EAAKpI,MAAiB,EAAIoI,EAAKpI,OACzF6F,KAAkB,IAAbuC,EAAKvC,IAAgB,EAAI0K,EAAK1K,MAAoB,IAAbuC,EAAKvC,IAAe,EAAIuC,EAAKvC,KACvEC,QAAwB,IAAhBsC,EAAKtC,OAAmBmB,EAAM4H,OAAS0B,EAAKzK,SAA0B,IAAhBsC,EAAKtC,OAAkB,EAAIsC,EAAKtC,QAElG;;;;;;;ACrBO,MAAM6e,GACXjxB,WAAAA,GACEpiB,KAAKszC,SAAW,KAChBtzC,KAAKuzC,QAAU,IAAI7e,IACnB10B,KAAKwzC,UAAW,EAChBxzC,KAAKyzC,eAAY3/B,CACnB,CAKA4/B,OAAAA,CAAQ/d,EAAOge,EAAO1uC,EAAM3F,GAC1B,MAAMs0C,EAAYD,EAAMhnB,UAAUrtB,GAC5Bu0C,EAAWF,EAAMrgB,SAEvBsgB,EAAU7mB,QAAQlI,GAAMA,EAAG,CACzB8Q,QACAme,QAASH,EAAMG,QACfD,WACAE,YAAa9kC,KAAK8C,IAAI9M,EAAO0uC,EAAMrtC,MAAOutC,KAE9C,CAKAG,QAAAA,GACMh0C,KAAKszC,WAGTtzC,KAAKwzC,UAAW,EAEhBxzC,KAAKszC,SAAW3lB,GAAiB5J,KAAKjkB,OAAQ,KAC5CE,KAAKi0C,UACLj0C,KAAKszC,SAAW,KAEZtzC,KAAKwzC,UACPxzC,KAAKg0C,aAGX,CAKAC,OAAAA,CAAQhvC,EAAOS,KAAKwuC,OAClB,IAAIC,EAAY,EAEhBn0C,KAAKuzC,QAAQxmB,QAAQ,CAAC4mB,EAAOhe,KAC3B,IAAKge,EAAMS,UAAYT,EAAMnmB,MAAM9mB,OACjC,OAEF,MAAM8mB,EAAQmmB,EAAMnmB,MACpB,IAEIhvB,EAFAgW,EAAIgZ,EAAM9mB,OAAS,EACnB2tC,GAAO,EAGX,KAAO7/B,GAAK,IAAKA,EACfhW,EAAOgvB,EAAMhZ,GAEThW,EAAK81C,SACH91C,EAAK+1C,OAASZ,EAAMrgB,WAGtBqgB,EAAMrgB,SAAW90B,EAAK+1C,QAExB/1C,EAAKg2C,KAAKvvC,GACVovC,GAAO,IAIP7mB,EAAMhZ,GAAKgZ,EAAMA,EAAM9mB,OAAS,GAChC8mB,EAAMrE,OAINkrB,IACF1e,EAAM0e,OACNr0C,KAAK0zC,QAAQ/d,EAAOge,EAAO1uC,EAAM,aAG9BuoB,EAAM9mB,SACTitC,EAAMS,SAAU,EAChBp0C,KAAK0zC,QAAQ/d,EAAOge,EAAO1uC,EAAM,YACjC0uC,EAAMG,SAAU,GAGlBK,GAAa3mB,EAAM9mB,SAGrB1G,KAAKyzC,UAAYxuC,EAEC,IAAdkvC,IACFn0C,KAAKwzC,UAAW,EAEpB,CAKAiB,SAAAA,CAAU9e,GACR,MAAM+e,EAAS10C,KAAKuzC,QACpB,IAAII,EAAQe,EAAOzf,IAAIU,GAavB,OAZKge,IACHA,EAAQ,CACNS,SAAS,EACTN,SAAS,EACTtmB,MAAO,GACPb,UAAW,CACTgoB,SAAU,GACVC,SAAU,KAGdF,EAAOjnB,IAAIkI,EAAOge,IAEbA,CACT,CAOAkB,MAAAA,CAAOlf,EAAO8W,EAAOqI,GACnB90C,KAAKy0C,UAAU9e,GAAOhJ,UAAU8f,GAAOzlB,KAAK8tB,EAC9C,CAOAxzC,GAAAA,CAAIq0B,EAAOnI,GACJA,GAAUA,EAAM9mB,QAGrB1G,KAAKy0C,UAAU9e,GAAOnI,MAAMxG,QAAQwG,EACtC,CAMA/F,GAAAA,CAAIkO,GACF,OAAO31B,KAAKy0C,UAAU9e,GAAOnI,MAAM9mB,OAAS,CAC9C,CAMAJ,KAAAA,CAAMqvB,GACJ,MAAMge,EAAQ3zC,KAAKuzC,QAAQte,IAAIU,GAC1Bge,IAGLA,EAAMS,SAAU,EAChBT,EAAMrtC,MAAQZ,KAAKwuC,MACnBP,EAAMrgB,SAAWqgB,EAAMnmB,MAAMunB,OAAO,CAACC,EAAK5D,IAAQniC,KAAK6C,IAAIkjC,EAAK5D,EAAI6D,WAAY,GAChFj1C,KAAKg0C,WACP,CAEAI,OAAAA,CAAQze,GACN,IAAK31B,KAAKwzC,SACR,OAAO,EAET,MAAMG,EAAQ3zC,KAAKuzC,QAAQte,IAAIU,GAC/B,SAAKge,GAAUA,EAAMS,SAAYT,EAAMnmB,MAAM9mB,OAI/C,CAMA2qC,IAAAA,CAAK1b,GACH,MAAMge,EAAQ3zC,KAAKuzC,QAAQte,IAAIU,GAC/B,IAAKge,IAAUA,EAAMnmB,MAAM9mB,OACzB,OAEF,MAAM8mB,EAAQmmB,EAAMnmB,MACpB,IAAIhZ,EAAIgZ,EAAM9mB,OAAS,EAEvB,KAAO8N,GAAK,IAAKA,EACfgZ,EAAMhZ,GAAG0gC,SAEXvB,EAAMnmB,MAAQ,GACdxtB,KAAK0zC,QAAQ/d,EAAOge,EAAOjuC,KAAKwuC,MAAO,WACzC,CAMAhzC,MAAAA,CAAOy0B,GACL,OAAO31B,KAAKuzC,QAAQ3M,OAAOjR,EAC7B,EAIF,IAAAwf,GAA+B,IAAI9B,GCjNnC,MAAMvyB,GAAc,cACds0B,GAAgB,CACpBC,OAAAA,CAAQ5uC,EAAM0a,EAAIm0B,GAChB,OAAOA,EAAS,GAAMn0B,EAAK1a,CAC7B,EAMAic,KAAAA,CAAMjc,EAAM0a,EAAIm0B,GACd,MAAMC,EAAK7yB,GAAajc,GAAQqa,IAC1B8B,EAAK2yB,EAAGhzB,OAASG,GAAavB,GAAML,IAC1C,OAAO8B,GAAMA,EAAGL,MACZK,EAAGH,IAAI8yB,EAAID,GAAQzhC,YACnBsN,CACN,EACAq0B,MAAAA,CAAO/uC,EAAM0a,EAAIm0B,GACf,OAAO7uC,GAAQ0a,EAAK1a,GAAQ6uC,CAC9B,GAGa,MAAMG,GACnBrzB,WAAAA,CAAYszB,EAAK/vB,EAAQ8c,EAAMthB,GAC7B,MAAMw0B,EAAehwB,EAAO8c,GAE5BthB,EAAK8hB,GAAQ,CAACyS,EAAIv0B,GAAIA,EAAIw0B,EAAcD,EAAIjvC,OAC5C,MAAMA,EAAOw8B,GAAQ,CAACyS,EAAIjvC,KAAMkvC,EAAcx0B,IAE9CnhB,KAAKs0C,SAAU,EACft0C,KAAK41C,IAAMF,EAAI7wB,IAAMuwB,GAAcM,EAAIp2C,aAAemH,GACtDzG,KAAK61C,QAAU9kB,GAAQ2kB,EAAIniB,SAAWxC,GAAQC,OAC9ChxB,KAAK81C,OAAS7mC,KAAK2Z,MAAMljB,KAAKwuC,OAASwB,EAAIznB,OAAS,IACpDjuB,KAAKi1C,UAAYj1C,KAAKu0C,OAAStlC,KAAK2Z,MAAM8sB,EAAIpiB,UAC9CtzB,KAAKwxC,QAAUkE,EAAIrkC,KACnBrR,KAAK+1C,QAAUpwB,EACf3lB,KAAKg2C,MAAQvT,EACbziC,KAAKi2C,MAAQxvC,EACbzG,KAAKk2C,IAAM/0B,EACXnhB,KAAKm2C,eAAYriC,CACnB,CAEA+f,MAAAA,GACE,OAAO7zB,KAAKs0C,OACd,CAEA8B,MAAAA,CAAOV,EAAKv0B,EAAIlc,GACd,GAAIjF,KAAKs0C,QAAS,CAChBt0C,KAAK0zC,SAAQ,GAEb,MAAMiC,EAAe31C,KAAK+1C,QAAQ/1C,KAAKg2C,OACjCK,EAAUpxC,EAAOjF,KAAK81C,OACtBzf,EAASr2B,KAAKi1C,UAAYoB,EAChCr2C,KAAK81C,OAAS7wC,EACdjF,KAAKi1C,UAAYhmC,KAAK2Z,MAAM3Z,KAAK6C,IAAIukB,EAAQqf,EAAIpiB,WACjDtzB,KAAKu0C,QAAU8B,EACfr2C,KAAKwxC,QAAUkE,EAAIrkC,KACnBrR,KAAKk2C,IAAMjT,GAAQ,CAACyS,EAAIv0B,GAAIA,EAAIw0B,EAAcD,EAAIjvC,OAClDzG,KAAKi2C,MAAQhT,GAAQ,CAACyS,EAAIjvC,KAAMkvC,EAAcx0B,G,CAElD,CAEA+zB,MAAAA,GACMl1C,KAAKs0C,UAEPt0C,KAAKw0C,KAAK9uC,KAAKwuC,OACfl0C,KAAKs0C,SAAU,EACft0C,KAAK0zC,SAAQ,GAEjB,CAEAc,IAAAA,CAAKvvC,GACH,MAAMoxC,EAAUpxC,EAAOjF,KAAK81C,OACtBxiB,EAAWtzB,KAAKi1C,UAChBxS,EAAOziC,KAAKg2C,MACZvvC,EAAOzG,KAAKi2C,MACZ5kC,EAAOrR,KAAKwxC,MACZrwB,EAAKnhB,KAAKk2C,IAChB,IAAIZ,EAIJ,GAFAt1C,KAAKs0C,QAAU7tC,IAAS0a,IAAO9P,GAASglC,EAAU/iB,IAE7CtzB,KAAKs0C,QAGR,OAFAt0C,KAAK+1C,QAAQtT,GAAQthB,OACrBnhB,KAAK0zC,SAAQ,GAIX2C,EAAU,EACZr2C,KAAK+1C,QAAQtT,GAAQh8B,GAIvB6uC,EAAUe,EAAU/iB,EAAY,EAChCgiB,EAASjkC,GAAQikC,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAASt1C,KAAK61C,QAAQ5mC,KAAK8C,IAAI,EAAG9C,KAAK6C,IAAI,EAAGwjC,KAE9Ct1C,KAAK+1C,QAAQtT,GAAQziC,KAAK41C,IAAInvC,EAAM0a,EAAIm0B,GAC1C,CAEAgB,IAAAA,GACE,MAAMC,EAAWv2C,KAAKm2C,YAAcn2C,KAAKm2C,UAAY,IACrD,OAAO,IAAIK,QAAQ,CAACtpB,EAAKupB,KACvBF,EAASvvB,KAAK,CAACkG,MAAKupB,SAExB,CAEA/C,OAAAA,CAAQgD,GACN,MAAM1pB,EAAS0pB,EAAW,MAAQ,MAC5BH,EAAWv2C,KAAKm2C,WAAa,GACnC,IAAK,IAAI3hC,EAAI,EAAGA,EAAI+hC,EAAS7vC,OAAQ8N,IACnC+hC,EAAS/hC,GAAGwY,IAEhB,EChHa,MAAM2pB,GACnBv0B,WAAAA,CAAYuT,EAAOihB,GACjB52C,KAAK8xC,OAASnc,EACd31B,KAAK62C,YAAc,IAAIniB,IACvB10B,KAAK82C,UAAUF,EACjB,CAEAE,SAAAA,CAAUF,GACR,IAAK3yB,GAAS2yB,GACZ,OAGF,MAAMG,EAAmB/oC,OAAOC,KAAKolB,GAASS,WACxCkjB,EAAgBh3C,KAAK62C,YAE3B7oC,OAAOipC,oBAAoBL,GAAQ7pB,QAAQtuB,IACzC,MAAMi3C,EAAMkB,EAAOn4C,GACnB,IAAKwlB,GAASyxB,GACZ,OAEF,MAAMgB,EAAW,CAAC,EAClB,IAAK,MAAMQ,KAAUH,EACnBL,EAASQ,GAAUxB,EAAIwB,IAGxBtiC,GAAQ8gC,EAAI9hB,aAAe8hB,EAAI9hB,YAAc,CAACn1B,IAAMsuB,QAAS0V,IACxDA,IAAShkC,GAAQu4C,EAAcvvB,IAAIgb,IACrCuU,EAAcvpB,IAAIgV,EAAMiU,MAIhC,CAMAS,eAAAA,CAAgBxxB,EAAQ2G,GACtB,MAAM8qB,EAAa9qB,EAAOxe,QACpBA,EAAUupC,GAAqB1xB,EAAQyxB,GAC7C,IAAKtpC,EACH,MAAO,GAGT,MAAMmmB,EAAaj0B,KAAKs3C,kBAAkBxpC,EAASspC,GAYnD,OAXIA,EAAWG,SAIbC,GAAS7xB,EAAO7X,QAAQ2pC,YAAaL,GAAYM,KAAK,KACpD/xB,EAAO7X,QAAUspC,GAChB,QAKEnjB,CACT,CAKAqjB,iBAAAA,CAAkB3xB,EAAQ2G,GACxB,MAAM0qB,EAAgBh3C,KAAK62C,YACrB5iB,EAAa,GACbmgB,EAAUzuB,EAAO8xB,cAAgB9xB,EAAO8xB,YAAc,CAAC,GACvDp4C,EAAQ2O,OAAOC,KAAKqe,GACpBrnB,EAAOS,KAAKwuC,MAClB,IAAI1/B,EAEJ,IAAKA,EAAInV,EAAMqH,OAAS,EAAG8N,GAAK,IAAKA,EAAG,CACtC,MAAMiuB,EAAOpjC,EAAMmV,GACnB,GAAuB,MAAnBiuB,EAAKvgB,OAAO,GACd,SAGF,GAAa,YAATugB,EAAoB,CACtBxO,EAAWjN,QAAQhnB,KAAKm3C,gBAAgBxxB,EAAQ2G,IAChD,Q,CAEF,MAAMxnB,EAAQwnB,EAAOmW,GACrB,IAAI3O,EAAYsgB,EAAQ3R,GACxB,MAAMiT,EAAMsB,EAAc/hB,IAAIwN,GAE9B,GAAI3O,EAAW,CACb,GAAI4hB,GAAO5hB,EAAUD,SAAU,CAE7BC,EAAUsiB,OAAOV,EAAK5wC,EAAOG,GAC7B,Q,CAEA6uB,EAAUohB,Q,CAGTQ,GAAQA,EAAIpiB,UAMjB8gB,EAAQ3R,GAAQ3O,EAAY,IAAI2hB,GAAUC,EAAK/vB,EAAQ8c,EAAM39B,GAC7DmvB,EAAWjN,KAAK8M,IALdnO,EAAO8c,GAAQ39B,CAMnB,CACA,OAAOmvB,CACT,CASAmiB,MAAAA,CAAOzwB,EAAQ2G,GACb,GAA8B,IAA1BtsB,KAAK62C,YAAYxpC,KAGnB,YADAW,OAAO8T,OAAO6D,EAAQ2G,GAIxB,MAAM2H,EAAaj0B,KAAKs3C,kBAAkB3xB,EAAQ2G,GAElD,OAAI2H,EAAWvtB,QACbyuC,GAAS7zC,IAAItB,KAAK8xC,OAAQ7d,IACnB,QAFT,CAIF,EAGF,SAASujB,GAASvjB,EAAYL,GAC5B,MAAMwgB,EAAU,GACVnmC,EAAOD,OAAOC,KAAK2lB,GACzB,IAAK,IAAIpf,EAAI,EAAGA,EAAIvG,EAAKvH,OAAQ8N,IAAK,CACpC,MAAMmjC,EAAO1jB,EAAWhmB,EAAKuG,IACzBmjC,GAAQA,EAAK9jB,UACfugB,EAAQptB,KAAK2wB,EAAKrB,OAEtB,CAEA,OAAOE,QAAQoB,IAAIxD,EACrB,CAEA,SAASiD,GAAqB1xB,EAAQyxB,GACpC,IAAKA,EACH,OAEF,IAAItpC,EAAU6X,EAAO7X,QACrB,GAAKA,EASL,OALIA,EAAQypC,UAGV5xB,EAAO7X,QAAUA,EAAUE,OAAO8T,OAAO,CAAC,EAAGhU,EAAS,CAACypC,SAAS,EAAOE,YAAa,CAAC,KAEhF3pC,EARL6X,EAAO7X,QAAUspC,CASrB,CCtJA,SAASS,GAAU9c,EAAO+c,GACxB,MAAM9X,EAAOjF,GAASA,EAAMjtB,SAAW,CAAC,EAClCoX,EAAU8a,EAAK9a,QACfnT,OAAmB+B,IAAbksB,EAAKjuB,IAAoB+lC,EAAkB,EACjDhmC,OAAmBgC,IAAbksB,EAAKluB,IAAoBgmC,EAAkB,EACvD,MAAO,CACLxxC,MAAO4e,EAAUpT,EAAMC,EACvBmZ,IAAKhG,EAAUnT,EAAMD,EAEzB,CAEA,SAASimC,GAAY7nB,EAAQC,EAAQ2nB,GACnC,IAAwB,IAApBA,EACF,OAAO,EAET,MAAMpiC,EAAImiC,GAAU3nB,EAAQ4nB,GACtBnxB,EAAIkxB,GAAU1nB,EAAQ2nB,GAE5B,MAAO,CACLvjB,IAAK5N,EAAEuE,IACPwD,MAAOhZ,EAAEwV,IACTsJ,OAAQ7N,EAAErgB,MACVmoB,KAAM/Y,EAAEpP,MAEZ,CAEA,SAAS0xC,GAAOlzC,GACd,IAAI0c,EAAGlO,EAAGV,EAAGhB,EAWb,OATIqS,GAASnf,IACX0c,EAAI1c,EAAMyvB,IACVjhB,EAAIxO,EAAM4pB,MACV9b,EAAI9N,EAAM0vB,OACV5iB,EAAI9M,EAAM2pB,MAEVjN,EAAIlO,EAAIV,EAAIhB,EAAI9M,EAGX,CACLyvB,IAAK/S,EACLkN,MAAOpb,EACPkhB,OAAQ5hB,EACR6b,KAAM7c,EACN3P,UAAoB,IAAV6C,EAEd,CAEA,SAASmzC,GAAwBtiB,EAAOuiB,GACtC,MAAMjqC,EAAO,GACPkqC,EAAWxiB,EAAMyiB,uBAAuBF,GAC9C,IAAI1jC,EAAG8Q,EAEP,IAAK9Q,EAAI,EAAG8Q,EAAO6yB,EAASzxC,OAAQ8N,EAAI8Q,IAAQ9Q,EAC9CvG,EAAK+Y,KAAKmxB,EAAS3jC,GAAG9V,OAExB,OAAOuP,CACT,CAEA,SAASoqC,GAAWC,EAAOxzC,EAAOyzC,EAASzqC,EAAU,CAAC,GACpD,MAAMG,EAAOqqC,EAAMrqC,KACbuqC,EAA8B,WAAjB1qC,EAAQysB,KAC3B,IAAI/lB,EAAG8Q,EAAMG,EAAcgzB,EAE3B,GAAc,OAAV3zC,EACF,OAGF,IAAI4zC,GAAQ,EACZ,IAAKlkC,EAAI,EAAG8Q,EAAOrX,EAAKvH,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CAE7C,GADAiR,GAAgBxX,EAAKuG,GACjBiR,IAAiB8yB,EAAS,CAE5B,GADAG,GAAQ,EACJ5qC,EAAQ8pC,IACV,SAEF,K,CAEFa,EAAaH,EAAMhsB,OAAO7G,GACtBvB,GAASu0B,KAAgBD,GAAyB,IAAV1zC,GAAeujB,GAAKvjB,KAAWujB,GAAKowB,MAC9E3zC,GAAS2zC,EAEb,CAEA,OAAKC,GAAU5qC,EAAQ8pC,IAIhB9yC,EAHE,CAIX,CAEA,SAAS6zC,GAAyBj5C,EAAMovB,GACtC,MAAM,OAACK,EAAA,OAAQC,GAAUN,EACnB8pB,EAA2B,MAAhBzpB,EAAOK,KAAe,IAAM,IACvCqpB,EAA2B,MAAhBzpB,EAAOI,KAAe,IAAM,IACvCvhB,EAAOD,OAAOC,KAAKvO,GACnBo5C,EAAQ,IAAI/yC,MAAMkI,EAAKvH,QAC7B,IAAI8N,EAAG8Q,EAAM7mB,EACb,IAAK+V,EAAI,EAAG8Q,EAAOrX,EAAKvH,OAAQ8N,EAAI8Q,IAAQ9Q,EAC1C/V,EAAMwP,EAAKuG,GACXskC,EAAMtkC,GAAK,CACT,CAACokC,GAAWn6C,EACZ,CAACo6C,GAAWn5C,EAAKjB,IAGrB,OAAOq6C,CACT,CAEA,SAASC,GAAUhe,EAAOjM,GACxB,MAAMkqB,EAAUje,GAASA,EAAMjtB,QAAQkrC,QACvC,OAAOA,QAAwBllC,IAAZklC,QAAwCllC,IAAfgb,EAAKwpB,KACnD,CAEA,SAASW,GAAYC,EAAYC,EAAYrqB,GAC3C,MAAO,GAAGoqB,EAAWnoC,MAAMooC,EAAWpoC,MAAM+d,EAAKwpB,OAASxpB,EAAKxvB,MACjE,CAEA,SAASqwB,GAAcoL,GACrB,MAAM,IAAChpB,EAAG,IAAED,EAAG,WAAE2d,EAAU,WAAEC,GAAcqL,EAAMpL,gBACjD,MAAO,CACL5d,IAAK0d,EAAa1d,EAAMvM,OAAO4zC,kBAC/BtnC,IAAK4d,EAAa5d,EAAMtM,OAAOuiB,kBAEnC,CAEA,SAASsxB,GAAiBC,EAAQC,EAAUC,GAC1C,MAAMC,EAAWH,EAAOC,KAAcD,EAAOC,GAAY,CAAC,GAC1D,OAAOE,EAASD,KAAgBC,EAASD,GAAc,CAAC,EAC1D,CAEA,SAASE,GAAoBpB,EAAOlpB,EAAQuqB,EAAUr6C,GACpD,IAAK,MAAMwvB,KAAQM,EAAOwqB,wBAAwBt6C,GAAM4lB,UAAW,CACjE,MAAMpgB,EAAQwzC,EAAMxpB,EAAKpwB,OACzB,GAAIi7C,GAAa70C,EAAQ,IAAQ60C,GAAY70C,EAAQ,EACnD,OAAOgqB,EAAKpwB,KAEhB,CAEA,OAAO,IACT,CAEA,SAASm7C,GAAaC,EAAYlS,GAChC,MAAM,MAACjS,EAAOokB,YAAajrB,GAAQgrB,EAC7BR,EAAS3jB,EAAMqkB,UAAYrkB,EAAMqkB,QAAU,CAAC,IAC5C,OAAC7qB,EAAA,OAAQC,EAAQ1wB,MAAO+mB,GAAgBqJ,EACxCmrB,EAAQ9qB,EAAOK,KACf0qB,EAAQ9qB,EAAOI,KACf/wB,EAAMw6C,GAAY9pB,EAAQC,EAAQN,GAClCxJ,EAAOsiB,EAAOlhC,OACpB,IAAI4xC,EAEJ,IAAK,IAAI9jC,EAAI,EAAGA,EAAI8Q,IAAQ9Q,EAAG,CAC7B,MAAMhW,EAAOopC,EAAOpzB,IACb,CAACylC,GAAQv7C,EAAO,CAACw7C,GAAQp1C,GAAStG,EACnC27C,EAAa37C,EAAKw7C,UAAYx7C,EAAKw7C,QAAU,CAAC,GACpD1B,EAAQ6B,EAAWD,GAASb,GAAiBC,EAAQ76C,EAAKC,GAC1D45C,EAAM7yB,GAAgB3gB,EAEtBwzC,EAAM8B,KAAOV,GAAoBpB,EAAOlpB,GAAQ,EAAMN,EAAKxvB,MAC3Dg5C,EAAM+B,QAAUX,GAAoBpB,EAAOlpB,GAAQ,EAAON,EAAKxvB,MAE/D,MAAMg7C,EAAehC,EAAMiC,gBAAkBjC,EAAMiC,cAAgB,CAAC,GACpED,EAAa70B,GAAgB3gB,CAC/B,CACF,CAEA,SAAS01C,GAAgB7kB,EAAOnG,GAC9B,MAAMwL,EAASrF,EAAMqF,OACrB,OAAOhtB,OAAOC,KAAK+sB,GAAQ+L,OAAOtoC,GAAOu8B,EAAOv8B,GAAK+wB,OAASA,GAAMirB,OACtE,CAEA,SAASC,GAAqBxT,EAAQxoC,GACpC,OAAO+kC,GAAcyD,EACnB,CACErT,QAAQ,EACRtE,aAASzb,EACT2R,aAAc/mB,EACdA,QACA67B,KAAM,UACNj7B,KAAM,WAGZ,CAEA,SAASq7C,GAAkBzT,EAAQxoC,EAAO0sC,GACxC,OAAO3H,GAAcyD,EAAQ,CAC3BrT,QAAQ,EACR+mB,UAAWl8C,EACXkpC,YAAQ9zB,EACR+mC,SAAK/mC,EACLs3B,UACA1sC,QACA67B,KAAM,UACNj7B,KAAM,QAEV,CAEA,SAASw7C,GAAYhsB,EAAMtB,GAEzB,MAAM/H,EAAeqJ,EAAKgrB,WAAWp7C,MAC/B8wB,EAAOV,EAAKM,QAAUN,EAAKM,OAAOI,KACxC,GAAKA,EAAL,CAIAhC,EAAQA,GAASsB,EAAKO,QACtB,IAAK,MAAMuY,KAAUpa,EAAO,CAC1B,MAAM8rB,EAAS1R,EAAOoS,QACtB,IAAKV,QAA2BxlC,IAAjBwlC,EAAO9pB,SAAsD1b,IAA/BwlC,EAAO9pB,GAAM/J,GACxD,cAEK6zB,EAAO9pB,GAAM/J,QACe3R,IAA/BwlC,EAAO9pB,GAAM+qB,oBAA4EzmC,IAA7CwlC,EAAO9pB,GAAM+qB,cAAc90B,WAClE6zB,EAAO9pB,GAAM+qB,cAAc90B,EAEtC,C,CACF,CAEA,MAAMs1B,GAAsBxgB,GAAkB,UAATA,GAA6B,SAATA,EACnDygB,GAAmBA,CAACC,EAAQC,IAAWA,EAASD,EAASjtC,OAAO8T,OAAO,CAAC,EAAGm5B,GAC3EE,GAAcA,CAACC,EAAUtsB,EAAM6G,IAAUylB,IAAatsB,EAAKusB,QAAUvsB,EAAKwsB,UAC3E,CAACrtC,KAAMgqC,GAAwBtiB,GAAO,GAAOrJ,OAAQ,MAE3C,MAAMivB,GAqBnBn5B,WAAAA,CAAYuT,EAAOlQ,GACjBzlB,KAAK21B,MAAQA,EACb31B,KAAKpC,KAAO+3B,EAAMuE,IAClBl6B,KAAKtB,MAAQ+mB,EACbzlB,KAAKw7C,gBAAkB,CAAC,EACxBx7C,KAAK+5C,YAAc/5C,KAAKy7C,UACxBz7C,KAAK07C,MAAQ17C,KAAK+5C,YAAYz6C,KAC9BU,KAAK8N,aAAUgG,EAEf9T,KAAK2nC,UAAW,EAChB3nC,KAAK27C,WAAQ7nC,EACb9T,KAAK47C,iBAAc9nC,EACnB9T,KAAK67C,oBAAiB/nC,EACtB9T,KAAK87C,gBAAahoC,EAClB9T,KAAK+7C,gBAAajoC,EAClB9T,KAAKg8C,qBAAsB,EAC3Bh8C,KAAKi8C,oBAAqB,EAC1Bj8C,KAAKk8C,cAAWpoC,EAChB9T,KAAKm8C,UAAY,GACjBn8C,KAAKo8C,8BAAgCA,mBACrCp8C,KAAKq8C,2BAA6BA,gBAElCr8C,KAAKs8C,YACP,CAEAA,UAAAA,GACE,MAAMxtB,EAAO9uB,KAAK+5C,YAClB/5C,KAAK82C,YACL92C,KAAKu8C,aACLztB,EAAKwsB,SAAWvC,GAAUjqB,EAAKM,OAAQN,GACvC9uB,KAAKw8C,cAEDx8C,KAAK8N,QAAQ+wB,OAAS7+B,KAAK21B,MAAM8mB,gBAAgB,WACnD1Z,QAAQC,KAAK,qKAEjB,CAEA0Z,WAAAA,CAAYj3B,GACNzlB,KAAKtB,QAAU+mB,GACjBq1B,GAAY96C,KAAK+5C,aAEnB/5C,KAAKtB,MAAQ+mB,CACf,CAEA82B,UAAAA,GACE,MAAM5mB,EAAQ31B,KAAK21B,MACb7G,EAAO9uB,KAAK+5C,YACZxqB,EAAUvvB,KAAK28C,aAEfC,EAAWA,CAACptB,EAAM9Z,EAAGiR,EAAGrT,IAAe,MAATkc,EAAe9Z,EAAa,MAAT8Z,EAAelc,EAAIqT,EAEpEk2B,EAAM/tB,EAAKguB,QAAUx4B,GAAeiL,EAAQutB,QAAStC,GAAgB7kB,EAAO,MAC5EonB,EAAMjuB,EAAKkuB,QAAU14B,GAAeiL,EAAQytB,QAASxC,GAAgB7kB,EAAO,MAC5EsnB,EAAMnuB,EAAKouB,QAAU54B,GAAeiL,EAAQ2tB,QAAS1C,GAAgB7kB,EAAO,MAC5E0E,EAAYvL,EAAKuL,UACjB8iB,EAAMruB,EAAKsuB,QAAUR,EAASviB,EAAWwiB,EAAKE,EAAKE,GACnDI,EAAMvuB,EAAKwuB,QAAUV,EAASviB,EAAW0iB,EAAKF,EAAKI,GACzDnuB,EAAKoB,OAASlwB,KAAKu9C,cAAcV,GACjC/tB,EAAKqB,OAASnwB,KAAKu9C,cAAcR,GACjCjuB,EAAK0uB,OAASx9C,KAAKu9C,cAAcN,GACjCnuB,EAAKK,OAASnvB,KAAKu9C,cAAcJ,GACjCruB,EAAKM,OAASpvB,KAAKu9C,cAAcF,EACnC,CAEAV,UAAAA,GACE,OAAO38C,KAAK21B,MAAMj2B,KAAK45B,SAASt5B,KAAKtB,MACvC,CAEA+8C,OAAAA,GACE,OAAOz7C,KAAK21B,MAAM8nB,eAAez9C,KAAKtB,MACxC,CAMA6+C,aAAAA,CAAcG,GACZ,OAAO19C,KAAK21B,MAAMqF,OAAO0iB,EAC3B,CAKAC,cAAAA,CAAe5iB,GACb,MAAMjM,EAAO9uB,KAAK+5C,YAClB,OAAOhf,IAAUjM,EAAKK,OAClBL,EAAKM,OACLN,EAAKK,MACX,CAEAyuB,KAAAA,GACE59C,KAAKi0C,QAAQ,QACf,CAKA4J,QAAAA,GACE,MAAM/uB,EAAO9uB,KAAK+5C,YACd/5C,KAAK27C,OACPvuB,GAAoBptB,KAAK27C,MAAO37C,MAE9B8uB,EAAKwsB,UACPR,GAAYhsB,EAEhB,CAKAgvB,UAAAA,GACE,MAAMvuB,EAAUvvB,KAAK28C,aACfj9C,EAAO6vB,EAAQ7vB,OAAS6vB,EAAQ7vB,KAAO,IACvCi8C,EAAQ37C,KAAK27C,MAMnB,GAAI13B,GAASvkB,GAAO,CAClB,MAAMovB,EAAO9uB,KAAK+5C,YAClB/5C,KAAK27C,MAAQhD,GAAyBj5C,EAAMovB,E,MACvC,GAAI6sB,IAAUj8C,EAAM,CACzB,GAAIi8C,EAAO,CAETvuB,GAAoBuuB,EAAO37C,MAE3B,MAAM8uB,EAAO9uB,KAAK+5C,YAClBe,GAAYhsB,GACZA,EAAKO,QAAU,E,CAEb3vB,GAAQsO,OAAO+vC,aAAar+C,IAC9B8sB,GAAkB9sB,EAAMM,MAE1BA,KAAKm8C,UAAY,GACjBn8C,KAAK27C,MAAQj8C,C,CAEjB,CAEA88C,WAAAA,GACE,MAAM1tB,EAAO9uB,KAAK+5C,YAElB/5C,KAAK89C,aAED99C,KAAKo8C,qBACPttB,EAAKS,QAAU,IAAIvvB,KAAKo8C,mBAE5B,CAEA4B,qBAAAA,CAAsBC,GACpB,MAAMnvB,EAAO9uB,KAAK+5C,YACZxqB,EAAUvvB,KAAK28C,aACrB,IAAIuB,GAAe,EAEnBl+C,KAAK89C,aAGL,MAAMK,EAAarvB,EAAKwsB,SACxBxsB,EAAKwsB,SAAWvC,GAAUjqB,EAAKM,OAAQN,GAGnCA,EAAKwpB,QAAU/oB,EAAQ+oB,QACzB4F,GAAe,EAEfpD,GAAYhsB,GACZA,EAAKwpB,MAAQ/oB,EAAQ+oB,OAKvBt4C,KAAKo+C,gBAAgBH,IAGjBC,GAAgBC,IAAervB,EAAKwsB,YACtCzB,GAAa75C,KAAM8uB,EAAKO,SACxBP,EAAKwsB,SAAWvC,GAAUjqB,EAAKM,OAAQN,GAE3C,CAMAgoB,SAAAA,GACE,MAAMF,EAAS52C,KAAK21B,MAAMihB,OACpByH,EAAYzH,EAAO0H,iBAAiBt+C,KAAK07C,OACzC9X,EAASgT,EAAO2H,gBAAgBv+C,KAAK28C,aAAc0B,GAAW,GACpEr+C,KAAK8N,QAAU8oC,EAAO4H,eAAe5a,EAAQ5jC,KAAKo9B,cAClDp9B,KAAK2nC,SAAW3nC,KAAK8N,QAAQ8sB,QAC7B56B,KAAKw7C,gBAAkB,CAAC,CAC1B,CAMA3T,KAAAA,CAAMvhC,EAAO+H,GACX,MAAO0rC,YAAajrB,EAAM6sB,MAAOj8C,GAAQM,MACnC,OAACmvB,EAAA,SAAQmsB,GAAYxsB,EACrBmrB,EAAQ9qB,EAAOK,KAErB,IAEIhb,EAAG48B,EAAKxJ,EAFR6W,EAAmB,IAAVn4C,GAAe+H,IAAU3O,EAAKgH,QAAgBooB,EAAKI,QAC5Dqb,EAAOjkC,EAAQ,GAAKwoB,EAAKO,QAAQ/oB,EAAQ,GAG7C,IAAsB,IAAlBtG,KAAK2nC,SACP7Y,EAAKO,QAAU3vB,EACfovB,EAAKI,SAAU,EACf0Y,EAASloC,MACJ,CAEHkoC,EADEhzB,GAAQlV,EAAK4G,IACNtG,KAAK0+C,eAAe5vB,EAAMpvB,EAAM4G,EAAO+H,GACvC4V,GAASvkB,EAAK4G,IACdtG,KAAK2+C,gBAAgB7vB,EAAMpvB,EAAM4G,EAAO+H,GAExCrO,KAAK4+C,mBAAmB9vB,EAAMpvB,EAAM4G,EAAO+H,GAGtD,MAAMwwC,EAA6BA,IAAqB,OAAfzN,EAAI6I,IAAoB1P,GAAQ6G,EAAI6I,GAAS1P,EAAK0P,GAC3F,IAAKzlC,EAAI,EAAGA,EAAInG,IAASmG,EACvBsa,EAAKO,QAAQ7a,EAAIlO,GAAS8qC,EAAMxJ,EAAOpzB,GACnCiqC,IACEI,MACFJ,GAAS,GAEXlU,EAAO6G,GAGXtiB,EAAKI,QAAUuvB,C,CAGbnD,GACFzB,GAAa75C,KAAM4nC,EAEvB,CAaAgX,kBAAAA,CAAmB9vB,EAAMpvB,EAAM4G,EAAO+H,GACpC,MAAM,OAAC8gB,EAAA,OAAQC,GAAUN,EACnBmrB,EAAQ9qB,EAAOK,KACf0qB,EAAQ9qB,EAAOI,KACfsvB,EAAS3vB,EAAO4vB,YAChBC,EAAc7vB,IAAWC,EACzBwY,EAAS,IAAI7hC,MAAMsI,GACzB,IAAImG,EAAG8Q,EAAM5mB,EAEb,IAAK8V,EAAI,EAAG8Q,EAAOjX,EAAOmG,EAAI8Q,IAAQ9Q,EACpC9V,EAAQ8V,EAAIlO,EACZshC,EAAOpzB,GAAK,CACV,CAACylC,GAAQ+E,GAAe7vB,EAAO0Y,MAAMiX,EAAOpgD,GAAQA,GACpD,CAACw7C,GAAQ9qB,EAAOyY,MAAMnoC,EAAKhB,GAAQA,IAGvC,OAAOkpC,CACT,CAaA8W,cAAAA,CAAe5vB,EAAMpvB,EAAM4G,EAAO+H,GAChC,MAAM,OAAC6hB,EAAA,OAAQC,GAAUrB,EACnB8Y,EAAS,IAAI7hC,MAAMsI,GACzB,IAAImG,EAAG8Q,EAAM5mB,EAAOF,EAEpB,IAAKgW,EAAI,EAAG8Q,EAAOjX,EAAOmG,EAAI8Q,IAAQ9Q,EACpC9V,EAAQ8V,EAAIlO,EACZ9H,EAAOkB,EAAKhB,GACZkpC,EAAOpzB,GAAK,CACVkB,EAAGwa,EAAO2X,MAAMrpC,EAAK,GAAIE,GACzBioB,EAAGwJ,EAAO0X,MAAMrpC,EAAK,GAAIE,IAG7B,OAAOkpC,CACT,CAaA+W,eAAAA,CAAgB7vB,EAAMpvB,EAAM4G,EAAO+H,GACjC,MAAM,OAAC6hB,EAAA,OAAQC,GAAUrB,GACnB,SAACmwB,EAAW,aAAKC,EAAW,KAAOl/C,KAAK2nC,SACxCC,EAAS,IAAI7hC,MAAMsI,GACzB,IAAImG,EAAG8Q,EAAM5mB,EAAOF,EAEpB,IAAKgW,EAAI,EAAG8Q,EAAOjX,EAAOmG,EAAI8Q,IAAQ9Q,EACpC9V,EAAQ8V,EAAIlO,EACZ9H,EAAOkB,EAAKhB,GACZkpC,EAAOpzB,GAAK,CACVkB,EAAGwa,EAAO2X,MAAM3gB,GAAiB1oB,EAAMygD,GAAWvgD,GAClDioB,EAAGwJ,EAAO0X,MAAM3gB,GAAiB1oB,EAAM0gD,GAAWxgD,IAGtD,OAAOkpC,CACT,CAKAuX,SAAAA,CAAUzgD,GACR,OAAOsB,KAAK+5C,YAAY1qB,QAAQ3wB,EAClC,CAKA0gD,cAAAA,CAAe1gD,GACb,OAAOsB,KAAK+5C,YAAYr6C,KAAKhB,EAC/B,CAKA25C,UAAAA,CAAWtd,EAAO6M,EAAQrN,GACxB,MAAM5E,EAAQ31B,KAAK21B,MACb7G,EAAO9uB,KAAK+5C,YACZj1C,EAAQ8iC,EAAO7M,EAAMvL,MACrB8oB,EAAQ,CACZrqC,KAAMgqC,GAAwBtiB,GAAO,GACrCrJ,OAAQsb,EAAOoS,QAAQjf,EAAMvL,MAAM+qB,eAErC,OAAOlC,GAAWC,EAAOxzC,EAAOgqB,EAAKpwB,MAAO,CAAC67B,QAC/C,CAKA8kB,qBAAAA,CAAsBn4C,EAAO6zB,EAAO6M,EAAQ0Q,GAC1C,MAAMgH,EAAc1X,EAAO7M,EAAMvL,MACjC,IAAI1qB,EAAwB,OAAhBw6C,EAAuBC,IAAMD,EACzC,MAAMhzB,EAASgsB,GAAS1Q,EAAOoS,QAAQjf,EAAMvL,MACzC8oB,GAAShsB,IACXgsB,EAAMhsB,OAASA,EACfxnB,EAAQuzC,GAAWC,EAAOgH,EAAat/C,KAAK+5C,YAAYr7C,QAE1DwI,EAAM6K,IAAM9C,KAAK8C,IAAI7K,EAAM6K,IAAKjN,GAChCoC,EAAM4K,IAAM7C,KAAK6C,IAAI5K,EAAM4K,IAAKhN,EAClC,CAKA06C,SAAAA,CAAUzkB,EAAOqgB,GACf,MAAMtsB,EAAO9uB,KAAK+5C,YACZ1qB,EAAUP,EAAKO,QACfovB,EAAS3vB,EAAKI,SAAW6L,IAAUjM,EAAKK,OACxC7J,EAAO+J,EAAQ3oB,OACf+4C,EAAaz/C,KAAK29C,eAAe5iB,GACjCud,EAAQ6C,GAAYC,EAAUtsB,EAAM9uB,KAAK21B,OACzCzuB,EAAQ,CAAC6K,IAAKvM,OAAOuiB,kBAAmBjW,IAAKtM,OAAO4zC,oBACnDrnC,IAAK2tC,EAAU5tC,IAAK6tC,GAAYhwB,GAAc8vB,GACrD,IAAIjrC,EAAGozB,EAEP,SAASgY,IACPhY,EAASvY,EAAQ7a,GACjB,MAAMikC,EAAa7Q,EAAO6X,EAAWjwB,MACrC,OAAQtL,GAAS0jB,EAAO7M,EAAMvL,QAAUkwB,EAAWjH,GAAckH,EAAWlH,CAC9E,CAEA,IAAKjkC,EAAI,EAAGA,EAAI8Q,IAAQ9Q,EACtB,IAAIorC,MAGJ5/C,KAAKq/C,sBAAsBn4C,EAAO6zB,EAAO6M,EAAQ0Q,GAC7CmG,GAEF,MAGJ,GAAIA,EAEF,IAAKjqC,EAAI8Q,EAAO,EAAG9Q,GAAK,IAAKA,EAC3B,IAAIorC,IAAJ,CAGA5/C,KAAKq/C,sBAAsBn4C,EAAO6zB,EAAO6M,EAAQ0Q,GACjD,K,CAGJ,OAAOpxC,CACT,CAEA24C,kBAAAA,CAAmB9kB,GACjB,MAAM6M,EAAS5nC,KAAK+5C,YAAY1qB,QAC1B/C,EAAS,GACf,IAAI9X,EAAG8Q,EAAMxgB,EAEb,IAAK0P,EAAI,EAAG8Q,EAAOsiB,EAAOlhC,OAAQ8N,EAAI8Q,IAAQ9Q,EAC5C1P,EAAQ8iC,EAAOpzB,GAAGumB,EAAMvL,MACpBtL,GAASpf,IACXwnB,EAAOtF,KAAKliB,GAGhB,OAAOwnB,CACT,CAMAwzB,cAAAA,GACE,OAAO,CACT,CAKAC,gBAAAA,CAAiBrhD,GACf,MAAMowB,EAAO9uB,KAAK+5C,YACZ5qB,EAASL,EAAKK,OACdC,EAASN,EAAKM,OACdwY,EAAS5nC,KAAKm/C,UAAUzgD,GAC9B,MAAO,CACL4O,MAAO6hB,EAAS,GAAKA,EAAO6wB,iBAAiBpY,EAAOzY,EAAOK,OAAS,GACpE1qB,MAAOsqB,EAAS,GAAKA,EAAO4wB,iBAAiBpY,EAAOxY,EAAOI,OAAS,GAExE,CAKAykB,OAAAA,CAAQ1Z,GACN,MAAMzL,EAAO9uB,KAAK+5C,YAClB/5C,KAAKo2C,OAAO7b,GAAQ,WACpBzL,EAAKskB,MAAQ4E,GAAO1zB,GAAetkB,KAAK8N,QAAQgpB,KAAMihB,GAAYjpB,EAAKoB,OAAQpB,EAAKqB,OAAQnwB,KAAK8/C,mBACnG,CAKA1J,MAAAA,CAAO7b,GAAO,CAEd8Z,IAAAA,GACE,MAAMna,EAAMl6B,KAAKpC,KACX+3B,EAAQ31B,KAAK21B,MACb7G,EAAO9uB,KAAK+5C,YACZpgB,EAAW7K,EAAKpvB,MAAQ,GACxBu/B,EAAOtJ,EAAMqd,UACbnf,EAAS,GACTvtB,EAAQtG,KAAK87C,YAAc,EAC3BztC,EAAQrO,KAAK+7C,YAAepiB,EAASjzB,OAASJ,EAC9C40B,EAA0Bl7B,KAAK8N,QAAQotB,wBAC7C,IAAI1mB,EAMJ,IAJIsa,EAAKS,SACPT,EAAKS,QAAQ8kB,KAAKna,EAAK+E,EAAM34B,EAAO+H,GAGjCmG,EAAIlO,EAAOkO,EAAIlO,EAAQ+H,IAASmG,EAAG,CACtC,MAAM42B,EAAUzR,EAASnlB,GACrB42B,EAAQiQ,SAGRjQ,EAAQvX,QAAUqH,EACpBrH,EAAO7M,KAAKokB,GAEZA,EAAQiJ,KAAKna,EAAK+E,GAEtB,CAEA,IAAKzqB,EAAI,EAAGA,EAAIqf,EAAOntB,SAAU8N,EAC/Bqf,EAAOrf,GAAG6/B,KAAKna,EAAK+E,EAExB,CASAsM,QAAAA,CAAS7sC,EAAOm1B,GACd,MAAM0G,EAAO1G,EAAS,SAAW,UACjC,YAAiB/f,IAAVpV,GAAuBsB,KAAK+5C,YAAYxqB,QAC3CvvB,KAAKigD,6BAA6B1lB,GAClCv6B,KAAKkgD,0BAA0BxhD,GAAS,EAAG67B,EACjD,CAKA6C,UAAAA,CAAW1+B,EAAOm1B,EAAQ0G,GACxB,MAAMhL,EAAUvvB,KAAK28C,aACrB,IAAInjB,EACJ,GAAI96B,GAAS,GAAKA,EAAQsB,KAAK+5C,YAAYr6C,KAAKgH,OAAQ,CACtD,MAAM0kC,EAAUprC,KAAK+5C,YAAYr6C,KAAKhB,GACtC86B,EAAU4R,EAAQ8Q,WACf9Q,EAAQ8Q,SAAWvB,GAAkB36C,KAAKo9B,aAAc1+B,EAAO0sC,IAClE5R,EAAQoO,OAAS5nC,KAAKm/C,UAAUzgD,GAChC86B,EAAQqhB,IAAMtrB,EAAQ7vB,KAAKhB,GAC3B86B,EAAQ96B,MAAQ86B,EAAQohB,UAAYl8C,C,MAEpC86B,EAAUx5B,KAAKk8C,WACZl8C,KAAKk8C,SAAWxB,GAAqB16C,KAAK21B,MAAMyH,aAAcp9B,KAAKtB,QACtE86B,EAAQjK,QAAUA,EAClBiK,EAAQ96B,MAAQ86B,EAAQ/T,aAAezlB,KAAKtB,MAK9C,OAFA86B,EAAQ3F,SAAWA,EACnB2F,EAAQe,KAAOA,EACRf,CACT,CAMAymB,4BAAAA,CAA6B1lB,GAC3B,OAAOv6B,KAAKmgD,uBAAuBngD,KAAKo8C,mBAAmBrrC,GAAIwpB,EACjE,CAOA2lB,yBAAAA,CAA0BxhD,EAAO67B,GAC/B,OAAOv6B,KAAKmgD,uBAAuBngD,KAAKq8C,gBAAgBtrC,GAAIwpB,EAAM77B,EACpE,CAKAyhD,sBAAAA,CAAuBC,EAAa7lB,EAAO,UAAW77B,GACpD,MAAMm1B,EAAkB,WAAT0G,EACT+B,EAAQt8B,KAAKw7C,gBACb3mB,EAAWurB,EAAc,IAAM7lB,EAC/B0gB,EAAS3e,EAAMzH,GACfwrB,EAAUrgD,KAAKg8C,qBAAuB10B,GAAQ5oB,GACpD,GAAIu8C,EACF,OAAOD,GAAiBC,EAAQoF,GAElC,MAAMzJ,EAAS52C,KAAK21B,MAAMihB,OACpByH,EAAYzH,EAAO0J,wBAAwBtgD,KAAK07C,MAAO0E,GACvDvc,EAAWhQ,EAAS,CAAC,GAAGusB,SAAoB,QAASA,EAAa,IAAM,CAACA,EAAa,IACtFxc,EAASgT,EAAO2H,gBAAgBv+C,KAAK28C,aAAc0B,GACnDz9B,EAAQ5S,OAAOC,KAAKolB,GAASsG,SAASymB,IAGtC5mB,EAAUA,IAAMx5B,KAAKo9B,WAAW1+B,EAAOm1B,EAAQ0G,GAC/CjO,EAASsqB,EAAO2J,oBAAoB3c,EAAQhjB,EAAO4Y,EAASqK,GAalE,OAXIvX,EAAOirB,UAGTjrB,EAAOirB,QAAU8I,EAKjB/jB,EAAMzH,GAAY7mB,OAAOwyC,OAAOxF,GAAiB1uB,EAAQ+zB,KAGpD/zB,CACT,CAMAm0B,kBAAAA,CAAmB/hD,EAAOoC,EAAY+yB,GACpC,MAAM8B,EAAQ31B,KAAK21B,MACb2G,EAAQt8B,KAAKw7C,gBACb3mB,EAAW,aAAa/zB,IACxBm6C,EAAS3e,EAAMzH,GACrB,GAAIomB,EACF,OAAOA,EAET,IAAIntC,EACJ,IAAgC,IAA5B6nB,EAAM7nB,QAAQgmB,UAAqB,CACrC,MAAM8iB,EAAS52C,KAAK21B,MAAMihB,OACpByH,EAAYzH,EAAO8J,0BAA0B1gD,KAAK07C,MAAO56C,GACzD8iC,EAASgT,EAAO2H,gBAAgBv+C,KAAK28C,aAAc0B,GACzDvwC,EAAU8oC,EAAO4H,eAAe5a,EAAQ5jC,KAAKo9B,WAAW1+B,EAAOm1B,EAAQ/yB,G,CAEzE,MAAMmzB,EAAa,IAAI0iB,GAAWhhB,EAAO7nB,GAAWA,EAAQmmB,YAI5D,OAHInmB,GAAWA,EAAQq2B,aACrB7H,EAAMzH,GAAY7mB,OAAOwyC,OAAOvsB,IAE3BA,CACT,CAMA0sB,gBAAAA,CAAiB7yC,GACf,GAAKA,EAAQypC,QAGb,OAAOv3C,KAAK67C,iBAAmB77C,KAAK67C,eAAiB7tC,OAAO8T,OAAO,CAAC,EAAGhU,GACzE,CAMA8yC,cAAAA,CAAermB,EAAMsmB,GACnB,OAAQA,GAAiB9F,GAAmBxgB,IAASv6B,KAAK21B,MAAMmrB,mBAClE,CAKAC,iBAAAA,CAAkBz6C,EAAOi0B,GACvB,MAAMymB,EAAYhhD,KAAKkgD,0BAA0B55C,EAAOi0B,GAClD0mB,EAA0BjhD,KAAK67C,eAC/BgF,EAAgB7gD,KAAK2gD,iBAAiBK,GACtCJ,EAAiB5gD,KAAK4gD,eAAermB,EAAMsmB,IAAmBA,IAAkBI,EAEtF,OADAjhD,KAAKkhD,oBAAoBL,EAAetmB,EAAMymB,GACvC,CAACH,gBAAeD,iBACzB,CAMAO,aAAAA,CAAc/V,EAAS1sC,EAAOk1B,EAAY2G,GACpCwgB,GAAmBxgB,GACrBvsB,OAAO8T,OAAOspB,EAASxX,GAEvB5zB,KAAKygD,mBAAmB/hD,EAAO67B,GAAM6b,OAAOhL,EAASxX,EAEzD,CAMAstB,mBAAAA,CAAoBL,EAAetmB,EAAM6c,GACnCyJ,IAAkB9F,GAAmBxgB,IACvCv6B,KAAKygD,wBAAmB3sC,EAAWymB,GAAM6b,OAAOyK,EAAezJ,EAEnE,CAKAgK,SAAAA,CAAUhW,EAAS1sC,EAAO67B,EAAM1G,GAC9BuX,EAAQvX,OAASA,EACjB,MAAM/lB,EAAU9N,KAAKurC,SAAS7sC,EAAOm1B,GACrC7zB,KAAKygD,mBAAmB/hD,EAAO67B,EAAM1G,GAAQuiB,OAAOhL,EAAS,CAG3Dt9B,SAAW+lB,GAAU7zB,KAAK2gD,iBAAiB7yC,IAAaA,GAE5D,CAEAuzC,gBAAAA,CAAiBjW,EAAS3lB,EAAc/mB,GACtCsB,KAAKohD,UAAUhW,EAAS1sC,EAAO,UAAU,EAC3C,CAEA4iD,aAAAA,CAAclW,EAAS3lB,EAAc/mB,GACnCsB,KAAKohD,UAAUhW,EAAS1sC,EAAO,UAAU,EAC3C,CAKA6iD,wBAAAA,GACE,MAAMnW,EAAUprC,KAAK+5C,YAAYxqB,QAE7B6b,GACFprC,KAAKohD,UAAUhW,OAASt3B,EAAW,UAAU,EAEjD,CAKA0tC,qBAAAA,GACE,MAAMpW,EAAUprC,KAAK+5C,YAAYxqB,QAE7B6b,GACFprC,KAAKohD,UAAUhW,OAASt3B,EAAW,UAAU,EAEjD,CAKAsqC,eAAAA,CAAgBH,GACd,MAAMv+C,EAAOM,KAAK27C,MACZhiB,EAAW35B,KAAK+5C,YAAYr6C,KAGlC,IAAK,MAAOstB,EAAQy0B,EAAMC,KAAS1hD,KAAKm8C,UACtCn8C,KAAKgtB,GAAQy0B,EAAMC,GAErB1hD,KAAKm8C,UAAY,GAEjB,MAAMwF,EAAUhoB,EAASjzB,OACnBk7C,EAAUliD,EAAKgH,OACf2H,EAAQY,KAAK8C,IAAI6vC,EAASD,GAE5BtzC,GAKFrO,KAAK6nC,MAAM,EAAGx5B,GAGZuzC,EAAUD,EACZ3hD,KAAK6hD,gBAAgBF,EAASC,EAAUD,EAAS1D,GACxC2D,EAAUD,GACnB3hD,KAAK8hD,gBAAgBF,EAASD,EAAUC,EAE5C,CAKAC,eAAAA,CAAgBv7C,EAAO+H,EAAO4vC,GAAmB,GAC/C,MAAMnvB,EAAO9uB,KAAK+5C,YACZr6C,EAAOovB,EAAKpvB,KACZwrB,EAAM5kB,EAAQ+H,EACpB,IAAImG,EAEJ,MAAMutC,EAAQjb,IAEZ,IADAA,EAAIpgC,QAAU2H,EACTmG,EAAIsyB,EAAIpgC,OAAS,EAAG8N,GAAK0W,EAAK1W,IACjCsyB,EAAItyB,GAAKsyB,EAAItyB,EAAInG,IAKrB,IAFA0zC,EAAKriD,GAEA8U,EAAIlO,EAAOkO,EAAI0W,IAAO1W,EACzB9U,EAAK8U,GAAK,IAAIxU,KAAKq8C,gBAGjBr8C,KAAK2nC,UACPoa,EAAKjzB,EAAKO,SAEZrvB,KAAK6nC,MAAMvhC,EAAO+H,GAEd4vC,GACFj+C,KAAKgiD,eAAetiD,EAAM4G,EAAO+H,EAAO,QAE5C,CAEA2zC,cAAAA,CAAe5W,EAAS9kC,EAAO+H,EAAOksB,GAAO,CAK7CunB,eAAAA,CAAgBx7C,EAAO+H,GACrB,MAAMygB,EAAO9uB,KAAK+5C,YAClB,GAAI/5C,KAAK2nC,SAAU,CACjB,MAAMsa,EAAUnzB,EAAKO,QAAQ/B,OAAOhnB,EAAO+H,GACvCygB,EAAKwsB,UACPR,GAAYhsB,EAAMmzB,E,CAGtBnzB,EAAKpvB,KAAK4tB,OAAOhnB,EAAO+H,EAC1B,CAKA6zC,KAAAA,CAAMhjD,GACJ,GAAIc,KAAK2nC,SACP3nC,KAAKm8C,UAAUn1B,KAAK9nB,OACf,CACL,MAAO8tB,EAAQy0B,EAAMC,GAAQxiD,EAC7Bc,KAAKgtB,GAAQy0B,EAAMC,E,CAErB1hD,KAAK21B,MAAMwsB,aAAan7B,KAAK,CAAChnB,KAAKtB,SAAUQ,GAC/C,CAEAkjD,WAAAA,GACE,MAAM/zC,EAAQg0C,UAAU37C,OACxB1G,KAAKkiD,MAAM,CAAC,kBAAmBliD,KAAK28C,aAAaj9C,KAAKgH,OAAS2H,EAAOA,GACxE,CAEAi0C,UAAAA,GACEtiD,KAAKkiD,MAAM,CAAC,kBAAmBliD,KAAK+5C,YAAYr6C,KAAKgH,OAAS,EAAG,GACnE,CAEA67C,YAAAA,GACEviD,KAAKkiD,MAAM,CAAC,kBAAmB,EAAG,GACpC,CAEAM,aAAAA,CAAcl8C,EAAO+H,GACfA,GACFrO,KAAKkiD,MAAM,CAAC,kBAAmB57C,EAAO+H,IAExC,MAAMo0C,EAAWJ,UAAU37C,OAAS,EAChC+7C,GACFziD,KAAKkiD,MAAM,CAAC,kBAAmB57C,EAAOm8C,GAE1C,CAEAC,cAAAA,GACE1iD,KAAKkiD,MAAM,CAAC,kBAAmB,EAAGG,UAAU37C,QAC9C,EC7iCF,SAASi8C,GAAkB5nB,EAAOz7B,GAChC,IAAKy7B,EAAMl9B,OAAO+kD,KAAM,CACtB,MAAMC,EAAe9nB,EAAM6e,wBAAwBt6C,GACnD,IAAIgtB,EAAS,GAEb,IAAK,IAAI9X,EAAI,EAAG8Q,EAAOu9B,EAAan8C,OAAQ8N,EAAI8Q,EAAM9Q,IACpD8X,EAASA,EAAOw2B,OAAOD,EAAaruC,GAAGslC,WAAW+F,mBAAmB9kB,IAEvEA,EAAMl9B,OAAO+kD,KAAOr1B,GAAajB,EAAOpD,KAAK,CAACvW,EAAGC,IAAMD,EAAIC,G,CAE7D,OAAOmoB,EAAMl9B,OAAO+kD,IACtB,CAMA,SAASG,GAAqBj0B,GAC5B,MAAMiM,EAAQjM,EAAKK,OACb7C,EAASq2B,GAAkB5nB,EAAOjM,EAAKxvB,MAC7C,IACIkV,EAAG8Q,EAAM09B,EAAMzY,EADfx4B,EAAMgpB,EAAMkoB,QAEhB,MAAMC,EAAmBA,KACV,QAATF,IAA4B,QAAVA,IAIlB17B,GAAQijB,KAEVx4B,EAAM9C,KAAK8C,IAAIA,EAAK9C,KAAKuZ,IAAIw6B,EAAOzY,IAASx4B,IAE/Cw4B,EAAOyY,IAGT,IAAKxuC,EAAI,EAAG8Q,EAAOgH,EAAO5lB,OAAQ8N,EAAI8Q,IAAQ9Q,EAC5CwuC,EAAOjoB,EAAMnL,iBAAiBtD,EAAO9X,IACrC0uC,IAIF,IADA3Y,OAAOz2B,EACFU,EAAI,EAAG8Q,EAAOyV,EAAMrF,MAAMhvB,OAAQ8N,EAAI8Q,IAAQ9Q,EACjDwuC,EAAOjoB,EAAMooB,gBAAgB3uC,GAC7B0uC,IAGF,OAAOnxC,CACT,CAQA,SAASqxC,GAAyB1kD,EAAO2kD,EAAOv1C,EAASw1C,GACvD,MAAMC,EAAYz1C,EAAQ01C,aAC1B,IAAIn2C,EAAMqU,EAaV,OAXIkC,GAAc2/B,IAChBl2C,EAAOg2C,EAAMtxC,IAAMjE,EAAQ21C,mBAC3B/hC,EAAQ5T,EAAQ41C,gBAKhBr2C,EAAOk2C,EAAYD,EACnB5hC,EAAQ,GAGH,CACLiiC,MAAOt2C,EAAOi2C,EACd5hC,QACApb,MAAO+8C,EAAMO,OAAOllD,GAAU2O,EAAO,EAEzC,CAQA,SAASw2C,GAA0BnlD,EAAO2kD,EAAOv1C,EAASw1C,GACxD,MAAMM,EAASP,EAAMO,OACfZ,EAAOY,EAAOllD,GACpB,IAAI6rC,EAAO7rC,EAAQ,EAAIklD,EAAOllD,EAAQ,GAAK,KACvC4pC,EAAO5pC,EAAQklD,EAAOl9C,OAAS,EAAIk9C,EAAOllD,EAAQ,GAAK,KAC3D,MAAMolD,EAAUh2C,EAAQ21C,mBAEX,OAATlZ,IAGFA,EAAOyY,GAAiB,OAAT1a,EAAgB+a,EAAMn4B,IAAMm4B,EAAM/8C,MAAQgiC,EAAO0a,IAGrD,OAAT1a,IAEFA,EAAO0a,EAAOA,EAAOzY,GAGvB,MAAMjkC,EAAQ08C,GAAQA,EAAO/zC,KAAK8C,IAAIw4B,EAAMjC,IAAS,EAAIwb,EACnDz2C,EAAO4B,KAAKuZ,IAAI8f,EAAOiC,GAAQ,EAAIuZ,EAEzC,MAAO,CACLH,MAAOt2C,EAAOi2C,EACd5hC,MAAO5T,EAAQ41C,cACfp9C,QAEJ,CAEA,SAASy9C,GAAcC,EAAOxlD,EAAM4wB,EAAQ5a,GAC1C,MAAMyvC,EAAa70B,EAAOyY,MAAMmc,EAAM,GAAIxvC,GACpC0vC,EAAW90B,EAAOyY,MAAMmc,EAAM,GAAIxvC,GAClCzC,EAAM9C,KAAK8C,IAAIkyC,EAAYC,GAC3BpyC,EAAM7C,KAAK6C,IAAImyC,EAAYC,GACjC,IAAIC,EAAWpyC,EACXqyC,EAAStyC,EAET7C,KAAKuZ,IAAIzW,GAAO9C,KAAKuZ,IAAI1W,KAC3BqyC,EAAWryC,EACXsyC,EAASryC,GAKXvT,EAAK4wB,EAAOI,MAAQ40B,EAEpB5lD,EAAK6lD,QAAU,CACbF,WACAC,SACA99C,MAAO29C,EACP/4B,IAAKg5B,EACLnyC,MACAD,MAEJ,CAEA,SAASwyC,GAAWN,EAAOxlD,EAAM4wB,EAAQ5a,GAMvC,OALII,GAAQovC,GACVD,GAAcC,EAAOxlD,EAAM4wB,EAAQ5a,GAEnChW,EAAK4wB,EAAOI,MAAQJ,EAAOyY,MAAMmc,EAAOxvC,GAEnChW,CACT,CAEA,SAAS+lD,GAAsBz1B,EAAMpvB,EAAM4G,EAAO+H,GAChD,MAAM8gB,EAASL,EAAKK,OACdC,EAASN,EAAKM,OACd0vB,EAAS3vB,EAAO4vB,YAChBC,EAAc7vB,IAAWC,EACzBwY,EAAS,GACf,IAAIpzB,EAAG8Q,EAAM9mB,EAAMwlD,EAEnB,IAAKxvC,EAAIlO,EAAOgf,EAAOhf,EAAQ+H,EAAOmG,EAAI8Q,IAAQ9Q,EAChDwvC,EAAQtkD,EAAK8U,GACbhW,EAAO,CAAC,EACRA,EAAK2wB,EAAOK,MAAQwvB,GAAe7vB,EAAO0Y,MAAMiX,EAAOtqC,GAAIA,GAC3DozB,EAAO5gB,KAAKs9B,GAAWN,EAAOxlD,EAAM4wB,EAAQ5a,IAE9C,OAAOozB,CACT,CAEA,SAAS4c,GAAWC,GAClB,OAAOA,QAA8B3wC,IAApB2wC,EAAON,eAA4CrwC,IAAlB2wC,EAAOL,MAC3D,CAEA,SAASM,GAAQr3C,EAAM+hB,EAAQu1B,GAC7B,OAAa,IAATt3C,EACKgb,GAAKhb,IAEN+hB,EAAOw1B,eAAiB,GAAK,IAAMx1B,EAAOrd,KAAO4yC,EAAa,GAAK,EAC7E,CAEA,SAASE,GAAYjxB,GACnB,IAAI1O,EAAS5e,EAAO4kB,EAAKqJ,EAAKC,EAiB9B,OAhBIZ,EAAWkxB,YACb5/B,EAAU0O,EAAW3G,KAAO2G,EAAWle,EACvCpP,EAAQ,OACR4kB,EAAM,UAENhG,EAAU0O,EAAW3G,KAAO2G,EAAWjN,EACvCrgB,EAAQ,SACR4kB,EAAM,OAEJhG,GACFqP,EAAM,MACNC,EAAS,UAETD,EAAM,QACNC,EAAS,OAEJ,CAACluB,QAAO4kB,MAAKhG,UAASqP,MAAKC,SACpC,CAEA,SAASuwB,GAAiBnxB,EAAY9lB,EAASwqC,EAAO55C,GACpD,IAAIsmD,EAAOl3C,EAAQm3C,cACnB,MAAM/3B,EAAM,CAAC,EAEb,IAAK83B,EAEH,YADApxB,EAAWqxB,cAAgB/3B,GAI7B,IAAa,IAAT83B,EAEF,YADApxB,EAAWqxB,cAAgB,CAAC1wB,KAAK,EAAM7F,OAAO,EAAM8F,QAAQ,EAAM/F,MAAM,IAI1E,MAAM,MAACnoB,EAAA,IAAO4kB,EAAA,QAAKhG,EAAA,IAASqP,EAAA,OAAKC,GAAUqwB,GAAYjxB,GAE1C,WAAToxB,GAAqB1M,IACvB1kB,EAAWsxB,oBAAqB,GAC3B5M,EAAM8B,MAAQ,KAAO17C,EACxBsmD,EAAOzwB,GACG+jB,EAAM+B,SAAW,KAAO37C,EAClCsmD,EAAOxwB,GAEPtH,EAAIi4B,GAAU3wB,EAAQluB,EAAO4kB,EAAKhG,KAAY,EAC9C8/B,EAAOzwB,IAIXrH,EAAIi4B,GAAUH,EAAM1+C,EAAO4kB,EAAKhG,KAAY,EAC5C0O,EAAWqxB,cAAgB/3B,CAC7B,CAEA,SAASi4B,GAAUH,EAAMryC,EAAGC,EAAGsS,GAO7B,OANIA,GACF8/B,EAAOI,GAAKJ,EAAMryC,EAAGC,GACrBoyC,EAAOK,GAASL,EAAMpyC,EAAGD,IAEzBqyC,EAAOK,GAASL,EAAMryC,EAAGC,GAEpBoyC,CACT,CAEA,SAASI,GAAKE,EAAM9/B,EAAI+/B,GACtB,OAAOD,IAAS9/B,EAAK+/B,EAAKD,IAASC,EAAK//B,EAAK8/B,CAC/C,CAEA,SAASD,GAAS3zC,EAAGpL,EAAO4kB,GAC1B,MAAa,UAANxZ,EAAgBpL,EAAc,QAANoL,EAAcwZ,EAAMxZ,CACrD,CAEA,SAAS8zC,GAAiB5xB,GAAY,cAAC6xB,GAAgB/jC,GACrDkS,EAAW6xB,cAAkC,SAAlBA,EACb,IAAV/jC,EAAc,IAAO,EACrB+jC,CACN,EDqzBAC,EAAAA,GAAAA,GA30BqBnK,GAAA,WAKD,CAAC,IAAEmK,EAAAA,GAAAA,GALFnK,GAAA,qBAUS,OAAImK,EAAAA,GAAAA,GAVbnK,GAAA,kBAeM,MCSZ,MAAMoK,WAAsBpK,GAgDzCqD,kBAAAA,CAAmB9vB,EAAMpvB,EAAM4G,EAAO+H,GACpC,OAAOk2C,GAAsBz1B,EAAMpvB,EAAM4G,EAAO+H,EAClD,CAOAqwC,cAAAA,CAAe5vB,EAAMpvB,EAAM4G,EAAO+H,GAChC,OAAOk2C,GAAsBz1B,EAAMpvB,EAAM4G,EAAO+H,EAClD,CAOAswC,eAAAA,CAAgB7vB,EAAMpvB,EAAM4G,EAAO+H,GACjC,MAAM,OAAC8gB,EAAA,OAAQC,GAAUN,GACnB,SAACmwB,EAAW,aAAKC,EAAW,KAAOl/C,KAAK2nC,SACxCiR,EAA2B,MAAhBzpB,EAAOK,KAAeyvB,EAAWC,EAC5CrG,EAA2B,MAAhBzpB,EAAOI,KAAeyvB,EAAWC,EAC5CtX,EAAS,GACf,IAAIpzB,EAAG8Q,EAAM9mB,EAAMgkB,EACnB,IAAKhO,EAAIlO,EAAOgf,EAAOhf,EAAQ+H,EAAOmG,EAAI8Q,IAAQ9Q,EAChDgO,EAAM9iB,EAAK8U,GACXhW,EAAO,CAAC,EACRA,EAAK2wB,EAAOK,MAAQL,EAAO0Y,MAAM3gB,GAAiB1E,EAAKo2B,GAAWpkC,GAClEozB,EAAO5gB,KAAKs9B,GAAWp9B,GAAiB1E,EAAKq2B,GAAWr6C,EAAM4wB,EAAQ5a,IAExE,OAAOozB,CACT,CAKAyX,qBAAAA,CAAsBn4C,EAAO6zB,EAAO6M,EAAQ0Q,GAC1CsN,MAAMvG,sBAAsBn4C,EAAO6zB,EAAO6M,EAAQ0Q,GAClD,MAAMmM,EAAS7c,EAAOyc,QAClBI,GAAU1pB,IAAU/6B,KAAK+5C,YAAY3qB,SAEvCloB,EAAM6K,IAAM9C,KAAK8C,IAAI7K,EAAM6K,IAAK0yC,EAAO1yC,KACvC7K,EAAM4K,IAAM7C,KAAK6C,IAAI5K,EAAM4K,IAAK2yC,EAAO3yC,KAE3C,CAMAguC,cAAAA,GACE,OAAO,CACT,CAKAC,gBAAAA,CAAiBrhD,GACf,MAAMowB,EAAO9uB,KAAK+5C,aACZ,OAAC5qB,EAAA,OAAQC,GAAUN,EACnB8Y,EAAS5nC,KAAKm/C,UAAUzgD,GACxB+lD,EAAS7c,EAAOyc,QAChBv/C,EAAQ0/C,GAAWC,GACrB,IAAMA,EAAOn+C,MAAQ,KAAOm+C,EAAOv5B,IAAM,IACzC,GAAKkE,EAAO4wB,iBAAiBpY,EAAOxY,EAAOI,OAE/C,MAAO,CACLliB,MAAO,GAAK6hB,EAAO6wB,iBAAiBpY,EAAOzY,EAAOK,OAClD1qB,QAEJ,CAEAw3C,UAAAA,GACEt8C,KAAKg8C,qBAAsB,EAE3B4J,MAAMtJ,aAEN,MAAMxtB,EAAO9uB,KAAK+5C,YAClBjrB,EAAKwpB,MAAQt4C,KAAK28C,aAAarE,KACjC,CAEAlC,MAAAA,CAAO7b,GACL,MAAMzL,EAAO9uB,KAAK+5C,YAClB/5C,KAAKgiD,eAAelzB,EAAKpvB,KAAM,EAAGovB,EAAKpvB,KAAKgH,OAAQ6zB,EACtD,CAEAynB,cAAAA,CAAe6D,EAAMv/C,EAAO+H,EAAOksB,GACjC,MAAMqjB,EAAiB,UAATrjB,GACR,MAAC77B,EAAOq7C,aAAa,OAAC3qB,IAAWpvB,KACjCitB,EAAOmC,EAAO02B,eACdhB,EAAa11B,EAAOw1B,eACpBvB,EAAQrjD,KAAK+lD,aACb,cAAClF,EAAa,eAAED,GAAkB5gD,KAAK+gD,kBAAkBz6C,EAAOi0B,GAEtE,IAAK,IAAI/lB,EAAIlO,EAAOkO,EAAIlO,EAAQ+H,EAAOmG,IAAK,CAC1C,MAAMozB,EAAS5nC,KAAKm/C,UAAU3qC,GACxBwxC,EAAUpI,GAASh6B,GAAcgkB,EAAOxY,EAAOI,OAAS,CAACvC,OAAMg5B,KAAMh5B,GAAQjtB,KAAKkmD,yBAAyB1xC,GAC3G2xC,EAAUnmD,KAAKomD,yBAAyB5xC,EAAG6uC,GAC3C/K,GAAS1Q,EAAOoS,SAAW,CAAC,GAAG5qB,EAAOI,MAEtCoE,EAAa,CACjBkxB,aACA73B,KAAM+4B,EAAQ/4B,KACdi4B,oBAAqB5M,GAASkM,GAAW5c,EAAOyc,UAAa3lD,IAAU45C,EAAM8B,MAAQ17C,IAAU45C,EAAM+B,QACrG3kC,EAAGovC,EAAakB,EAAQC,KAAOE,EAAQE,OACvC1/B,EAAGm+B,EAAaqB,EAAQE,OAASL,EAAQC,KACzC1oB,OAAQunB,EAAaqB,EAAQ94C,KAAO4B,KAAKuZ,IAAIw9B,EAAQ34C,MACrDpN,MAAO6kD,EAAa71C,KAAKuZ,IAAIw9B,EAAQ34C,MAAQ84C,EAAQ94C,MAGnDuzC,IACFhtB,EAAW9lB,QAAU+yC,GAAiB7gD,KAAKkgD,0BAA0B1rC,EAAGqxC,EAAKrxC,GAAGqf,OAAS,SAAW0G,IAEtG,MAAMzsB,EAAU8lB,EAAW9lB,SAAW+3C,EAAKrxC,GAAG1G,QAC9Ci3C,GAAiBnxB,EAAY9lB,EAASwqC,EAAO55C,GAC7C8mD,GAAiB5xB,EAAY9lB,EAASu1C,EAAM3hC,OAC5C1hB,KAAKmhD,cAAc0E,EAAKrxC,GAAIA,EAAGof,EAAY2G,EAC7C,CACF,CASA+rB,UAAAA,CAAWp6B,EAAM0uB,GACf,MAAM,OAACzrB,GAAUnvB,KAAK+5C,YAChB5B,EAAWhpB,EAAOyqB,wBAAwB55C,KAAK07C,OAClD3U,OAAOjY,GAAQA,EAAKgrB,WAAWhsC,QAAQy4C,SACpCvN,EAAU7pB,EAAOrhB,QAAQkrC,QACzBM,EAAS,GACTkN,EAAgBxmD,KAAK+5C,YAAYD,WAAWqF,UAAUvE,GACtD6L,EAAcD,GAAiBA,EAAcr3B,EAAOK,MAEpDk3B,EAAY53B,IAChB,MAAM8Y,EAAS9Y,EAAKO,QAAQs3B,KAAKnoD,GAAQA,EAAK2wB,EAAOK,QAAUi3B,GACzDtjC,EAAMykB,GAAUA,EAAO9Y,EAAKM,OAAOI,MAEzC,GAAI5L,GAAcT,IAAQqG,MAAMrG,GAC9B,OAAO,GAIX,IAAK,MAAM2L,KAAQqpB,EACjB,SAAkBrkC,IAAd8mC,IAA2B8L,EAAS53B,QASxB,IAAZkqB,IAAqD,IAAhCM,EAAOvzB,QAAQ+I,EAAKwpB,aAClCxkC,IAAZklC,QAAwCllC,IAAfgb,EAAKwpB,QAC3BgB,EAAOtyB,KAAK8H,EAAKwpB,OAEfxpB,EAAKpwB,QAAUwtB,GACjB,MAWJ,OAJKotB,EAAO5yC,QACV4yC,EAAOtyB,UAAKlT,GAGPwlC,CACT,CAMAsN,cAAAA,CAAeloD,GACb,OAAOsB,KAAKsmD,gBAAWxyC,EAAWpV,GAAOgI,MAC3C,CAEAmgD,aAAAA,GACE,OAAO7mD,KAAK8mD,WAAWpgD,MACzB,CAEAqgD,2BAAAA,GACE,MAAM/rB,EAASh7B,KAAK21B,MAAMqF,OACpBgsB,EAAehnD,KAAK21B,MAAM7nB,QAAQusB,UACxC,OAAOrsB,OAAOC,KAAK+sB,GAAQ+L,OAAOtoC,GAAOu8B,EAAOv8B,GAAK+wB,OAASw3B,GAAcvM,OAC9E,CAEAqM,QAAAA,GACE,MAAMt3B,EAAO,CAAC,EACRy3B,EAAmBjnD,KAAK+mD,8BAC9B,IAAK,MAAMx3B,KAAWvvB,KAAK21B,MAAMj2B,KAAK45B,SACpC9J,EAAKlL,GAC8B,MAAjCtkB,KAAK21B,MAAM7nB,QAAQusB,UAAoB9K,EAAQutB,QAAUvtB,EAAQytB,QAASiK,KACvE,EAEP,OAAOj5C,OAAOC,KAAKuhB,EACrB,CAUA03B,cAAAA,CAAezhC,EAAcrmB,EAAMw7C,GACjC,MAAMtB,EAASt5C,KAAKsmD,WAAW7gC,EAAcm1B,GACvCl8C,OAAkBoV,IAAV1U,EACVk6C,EAAOvzB,QAAQ3mB,IACd,EAEL,OAAmB,IAAXV,EACJ46C,EAAO5yC,OAAS,EAChBhI,CACN,CAKAqnD,SAAAA,GACE,MAAM/lB,EAAOhgC,KAAK8N,QACZghB,EAAO9uB,KAAK+5C,YACZ5qB,EAASL,EAAKK,OACdy0B,EAAS,GACf,IAAIpvC,EAAG8Q,EAEP,IAAK9Q,EAAI,EAAG8Q,EAAOwJ,EAAKpvB,KAAKgH,OAAQ8N,EAAI8Q,IAAQ9Q,EAC/CovC,EAAO58B,KAAKmI,EAAOS,iBAAiB5vB,KAAKm/C,UAAU3qC,GAAG2a,EAAOK,MAAOhb,IAGtE,MAAMgvC,EAAexjB,EAAKwjB,aACpBzxC,EAAMyxC,GAAgBT,GAAqBj0B,GAEjD,MAAO,CACL/c,MACA6xC,SACAt9C,MAAO6oB,EAAOg4B,YACdj8B,IAAKiE,EAAOi4B,UACZ9D,WAAYtjD,KAAK4mD,iBACjB7rB,MAAO5L,EACPo3B,QAASvmB,EAAKumB,QAEd7kC,MAAO8hC,EAAe,EAAIxjB,EAAKyjB,mBAAqBzjB,EAAK0jB,cAE7D,CAMAwC,wBAAAA,CAAyBxnD,GACvB,MAAOq7C,aAAa,OAAC3qB,EAAA,SAAQksB,EAAU58C,MAAO+mB,GAAe3X,SAAUmf,KAAMo6B,EAAS,aAAEC,IAAiBtnD,KACnG2kD,EAAa0C,GAAa,EAC1Bzf,EAAS5nC,KAAKm/C,UAAUzgD,GACxB+lD,EAAS7c,EAAOyc,QAChBkD,EAAW/C,GAAWC,GAC5B,IAGIwB,EAAM54C,EAHNvI,EAAQ8iC,EAAOxY,EAAOI,MACtBlpB,EAAQ,EACRI,EAAS40C,EAAWt7C,KAAKq4C,WAAWjpB,EAAQwY,EAAQ0T,GAAYx2C,EAGhE4B,IAAW5B,IACbwB,EAAQI,EAAS5B,EACjB4B,EAAS5B,GAGPyiD,IACFziD,EAAQ2/C,EAAON,SACfz9C,EAAS+9C,EAAOL,OAASK,EAAON,SAElB,IAAVr/C,GAAeujB,GAAKvjB,KAAWujB,GAAKo8B,EAAOL,UAC7C99C,EAAQ,GAEVA,GAASxB,GAGX,MAAMm/C,EAAcrgC,GAAcyjC,IAAeE,EAAuBjhD,EAAZ+gD,EAC5D,IAAIp6B,EAAOmC,EAAOQ,iBAAiBq0B,GAWnC,GAREgC,EADEjmD,KAAK21B,MAAM6xB,kBAAkB9oD,GACxB0wB,EAAOQ,iBAAiBtpB,EAAQI,GAGhCumB,EAGT5f,EAAO44C,EAAOh5B,EAEVhe,KAAKuZ,IAAInb,GAAQi6C,EAAc,CACjCj6C,EAAOq3C,GAAQr3C,EAAM+hB,EAAQu1B,GAAc2C,EACvCxiD,IAAU6/C,IACZ13B,GAAQ5f,EAAO,GAEjB,MAAMo6C,EAAar4B,EAAOs4B,mBAAmB,GACvCC,EAAWv4B,EAAOs4B,mBAAmB,GACrC31C,EAAM9C,KAAK8C,IAAI01C,EAAYE,GAC3B71C,EAAM7C,KAAK6C,IAAI21C,EAAYE,GACjC16B,EAAOhe,KAAK6C,IAAI7C,KAAK8C,IAAIkb,EAAMnb,GAAMC,GACrCk0C,EAAOh5B,EAAO5f,EAEViuC,IAAaiM,IAEf3f,EAAOoS,QAAQ5qB,EAAOI,MAAM+qB,cAAc90B,GAAgB2J,EAAOw4B,iBAAiB3B,GAAQ72B,EAAOw4B,iBAAiB36B,G,CAItH,GAAIA,IAASmC,EAAOQ,iBAAiB+0B,GAAa,CAChD,MAAMkD,EAAWx/B,GAAKhb,GAAQ+hB,EAAO04B,qBAAqBnD,GAAc,EACxE13B,GAAQ46B,EACRx6C,GAAQw6C,C,CAGV,MAAO,CACLx6C,OACA4f,OACAg5B,OACAI,OAAQJ,EAAO54C,EAAO,EAE1B,CAKA+4C,wBAAAA,CAAyB1nD,EAAO2kD,GAC9B,MAAMtoB,EAAQsoB,EAAMtoB,MACdjtB,EAAU9N,KAAK8N,QACf44C,EAAW54C,EAAQ44C,SACnBqB,EAAkBzjC,GAAexW,EAAQi6C,gBAAiBC,KAChE,IAAI3B,EAAQh5C,EACZ,MAAM46C,EAAYjoD,KAAK6mD,gBACvB,GAAIxD,EAAMkD,QAAS,CACjB,MAAMjD,EAAaoD,EAAW1mD,KAAK4mD,eAAeloD,GAAS2kD,EAAMC,WAC3Dp8C,EAAiC,SAAzB4G,EAAQ01C,aAClBK,GAA0BnlD,EAAO2kD,EAAOv1C,EAASw1C,EAAa2E,GAC9D7E,GAAyB1kD,EAAO2kD,EAAOv1C,EAASw1C,EAAa2E,GAC3DC,EAA0C,MAAjCloD,KAAK21B,MAAM7nB,QAAQusB,UAAoBr6B,KAAK28C,aAAaG,QAAU98C,KAAK28C,aAAaK,QAC9FmL,EAAanoD,KAAK8mD,WAAW/gC,QAAQzB,GAAe4jC,EAAQloD,KAAK+mD,gCACjEqB,EAAapoD,KAAKknD,eAAelnD,KAAKtB,MAAOsB,KAAK+5C,YAAYzB,MAAOoO,EAAWhoD,OAAQoV,GAAaq0C,EAC3G9B,EAASn/C,EAAMZ,MAASY,EAAMy8C,MAAQyE,EAAelhD,EAAMy8C,MAAQ,EACnEt2C,EAAO4B,KAAK8C,IAAIg2C,EAAiB7gD,EAAMy8C,MAAQz8C,EAAMwa,M,MAGrD2kC,EAAStrB,EAAMnL,iBAAiB5vB,KAAKm/C,UAAUzgD,GAAOq8B,EAAMvL,MAAO9wB,GACnE2O,EAAO4B,KAAK8C,IAAIg2C,EAAiB1E,EAAMtxC,IAAMsxC,EAAM3hC,OAIrD,MAAO,CACLuL,KAAMo5B,EAASh5C,EAAO,EACtB44C,KAAMI,EAASh5C,EAAO,EACtBg5C,SACAh5C,OAEJ,CAEAgnC,IAAAA,GACE,MAAMvlB,EAAO9uB,KAAK+5C,YACZ3qB,EAASN,EAAKM,OACdi5B,EAAQv5B,EAAKpvB,KACb4lB,EAAO+iC,EAAM3hD,OACnB,IAAI8N,EAAI,EAER,KAAOA,EAAI8Q,IAAQ9Q,EACsB,OAAnCxU,KAAKm/C,UAAU3qC,GAAG4a,EAAOI,OAAmB64B,EAAM7zC,GAAG6mC,QACvDgN,EAAM7zC,GAAG6/B,KAAKr0C,KAAKpC,KAGzB,GAEF8nD,EAAAA,GAAAA,GAxaqBC,GAAsB,KAE7B,QAAMD,EAAAA,GAAAA,GAFCC,GAAsB,WAOvB,CAChBvJ,oBAAoB,EACpBC,gBAAiB,MAEjBoH,mBAAoB,GACpBC,cAAe,GACf6C,SAAS,EAETtyB,WAAY,CACVf,QAAS,CACP5zB,KAAM,SACNs0B,WAAY,CAAC,IAAK,IAAK,OAAQ,QAAS,eAG5C8xB,EAAAA,GAAAA,GArBiBC,GAAsB,YA0BtB,CACjB3qB,OAAQ,CACNstB,QAAS,CACPhpD,KAAM,WACNq3B,QAAQ,EACRK,KAAM,CACJL,QAAQ,IAGZ4xB,QAAS,CACPjpD,KAAM,SACNs3B,aAAa,MCnSN,MAAM4xB,WAAyBjN,GAiC5Ce,UAAAA,GACEt8C,KAAKg8C,qBAAsB,EAC3B4J,MAAMtJ,YACR,CAMAsC,kBAAAA,CAAmB9vB,EAAMpvB,EAAM4G,EAAO+H,GACpC,MAAMu5B,EAASge,MAAMhH,mBAAmB9vB,EAAMpvB,EAAM4G,EAAO+H,GAC3D,IAAK,IAAImG,EAAI,EAAGA,EAAIozB,EAAOlhC,OAAQ8N,IACjCozB,EAAOpzB,GAAG6vC,QAAUrkD,KAAKkgD,0BAA0B1rC,EAAIlO,GAAO23B,OAEhE,OAAO2J,CACT,CAMA8W,cAAAA,CAAe5vB,EAAMpvB,EAAM4G,EAAO+H,GAChC,MAAMu5B,EAASge,MAAMlH,eAAe5vB,EAAMpvB,EAAM4G,EAAO+H,GACvD,IAAK,IAAImG,EAAI,EAAGA,EAAIozB,EAAOlhC,OAAQ8N,IAAK,CACtC,MAAMhW,EAAOkB,EAAK4G,EAAQkO,GAC1BozB,EAAOpzB,GAAG6vC,QAAU//B,GAAe9lB,EAAK,GAAIwB,KAAKkgD,0BAA0B1rC,EAAIlO,GAAO23B,OACxF,CACA,OAAO2J,CACT,CAMA+W,eAAAA,CAAgB7vB,EAAMpvB,EAAM4G,EAAO+H,GACjC,MAAMu5B,EAASge,MAAMjH,gBAAgB7vB,EAAMpvB,EAAM4G,EAAO+H,GACxD,IAAK,IAAImG,EAAI,EAAGA,EAAIozB,EAAOlhC,OAAQ8N,IAAK,CACtC,MAAMhW,EAAOkB,EAAK4G,EAAQkO,GAC1BozB,EAAOpzB,GAAG6vC,QAAU//B,GAAe9lB,GAAQA,EAAK8U,IAAM9U,EAAK8U,EAAGtT,KAAKkgD,0BAA0B1rC,EAAIlO,GAAO23B,OAC1G,CACA,OAAO2J,CACT,CAKAkY,cAAAA,GACE,MAAMpgD,EAAOM,KAAK+5C,YAAYr6C,KAE9B,IAAIoS,EAAM,EACV,IAAK,IAAI0C,EAAI9U,EAAKgH,OAAS,EAAG8N,GAAK,IAAKA,EACtC1C,EAAM7C,KAAK6C,IAAIA,EAAKpS,EAAK8U,GAAGnH,KAAKrN,KAAKkgD,0BAA0B1rC,IAAM,GAExE,OAAO1C,EAAM,GAAKA,CACpB,CAKAiuC,gBAAAA,CAAiBrhD,GACf,MAAMowB,EAAO9uB,KAAK+5C,YACZ+E,EAAS9+C,KAAK21B,MAAMj2B,KAAKo/C,QAAU,IACnC,OAAC5uB,EAAA,OAAQC,GAAUrB,EACnB8Y,EAAS5nC,KAAKm/C,UAAUzgD,GACxBgX,EAAIwa,EAAO8vB,iBAAiBpY,EAAOlyB,GACnCiR,EAAIwJ,EAAO6vB,iBAAiBpY,EAAOjhB,GACnCrT,EAAIs0B,EAAOyc,QAEjB,MAAO,CACL/2C,MAAOwxC,EAAOpgD,IAAU,GACxBoG,MAAO,IAAM4Q,EAAI,KAAOiR,GAAKrT,EAAI,KAAOA,EAAI,IAAM,IAEtD,CAEA8iC,MAAAA,CAAO7b,GACL,MAAMxL,EAAS/uB,KAAK+5C,YAAYr6C,KAGhCM,KAAKgiD,eAAejzB,EAAQ,EAAGA,EAAOroB,OAAQ6zB,EAChD,CAEAynB,cAAAA,CAAejzB,EAAQzoB,EAAO+H,EAAOksB,GACnC,MAAMqjB,EAAiB,UAATrjB,GACR,OAACpL,EAAA,OAAQC,GAAUpvB,KAAK+5C,aACxB,cAAC8G,EAAa,eAAED,GAAkB5gD,KAAK+gD,kBAAkBz6C,EAAOi0B,GAChE0f,EAAQ9qB,EAAOK,KACf0qB,EAAQ9qB,EAAOI,KAErB,IAAK,IAAIhb,EAAIlO,EAAOkO,EAAIlO,EAAQ+H,EAAOmG,IAAK,CAC1C,MAAMub,EAAQhB,EAAOva,GACfozB,GAAUgW,GAAS59C,KAAKm/C,UAAU3qC,GAClCof,EAAa,CAAC,EACd8V,EAAS9V,EAAWqmB,GAAS2D,EAAQzuB,EAAOu4B,mBAAmB,IAAOv4B,EAAOS,iBAAiBgY,EAAOqS,IACrGtQ,EAAS/V,EAAWsmB,GAAS0D,EAAQxuB,EAAO02B,eAAiB12B,EAAOQ,iBAAiBgY,EAAOsS,IAElGtmB,EAAWoU,KAAOxe,MAAMkgB,IAAWlgB,MAAMmgB,GAErCiX,IACFhtB,EAAW9lB,QAAU+yC,GAAiB7gD,KAAKkgD,0BAA0B1rC,EAAGub,EAAM8D,OAAS,SAAW0G,GAE9FqjB,IACFhqB,EAAW9lB,QAAQmwB,OAAS,IAIhCj+B,KAAKmhD,cAAcpxB,EAAOvb,EAAGof,EAAY2G,EAC3C,CACF,CAOA2lB,yBAAAA,CAA0BxhD,EAAO67B,GAC/B,MAAMqN,EAAS5nC,KAAKm/C,UAAUzgD,GAC9B,IAAI4tB,EAASs5B,MAAM1F,0BAA0BxhD,EAAO67B,GAGhDjO,EAAOirB,UACTjrB,EAASte,OAAO8T,OAAO,CAAC,EAAGwK,EAAQ,CAACirB,SAAS,KAI/C,MAAMtZ,EAAS3R,EAAO2R,OAMtB,MALa,WAAT1D,IACFjO,EAAO2R,OAAS,GAElB3R,EAAO2R,QAAU3Z,GAAesjB,GAAUA,EAAOyc,QAASpmB,GAEnD3R,CACT,EC9JF,SAASm8B,GAAkBzqB,EAAU0qB,EAAeC,GAClD,IAAIC,EAAS,EACTC,EAAS,EACT3c,EAAU,EACVC,EAAU,EAEd,GAAIuc,EAAgB9gC,GAAK,CACvB,MAAMkhC,EAAa9qB,EACb+qB,EAAWD,EAAaJ,EACxBM,EAAS/5C,KAAK6iB,IAAIg3B,GAClBG,EAASh6C,KAAK4hB,IAAIi4B,GAClBI,EAAOj6C,KAAK6iB,IAAIi3B,GAChBI,EAAOl6C,KAAK4hB,IAAIk4B,GAChBK,EAAUA,CAAC3+B,EAAO9X,EAAGC,IAAMqY,GAAcR,EAAOq+B,EAAYC,GAAU,GAAQ,EAAI95C,KAAK6C,IAAIa,EAAGA,EAAIg2C,EAAQ/1C,EAAGA,EAAI+1C,GACjHU,EAAUA,CAAC5+B,EAAO9X,EAAGC,IAAMqY,GAAcR,EAAOq+B,EAAYC,GAAU,IAAS,EAAI95C,KAAK8C,IAAIY,EAAGA,EAAIg2C,EAAQ/1C,EAAGA,EAAI+1C,GAClHW,EAAOF,EAAQ,EAAGJ,EAAQE,GAC1BK,EAAOH,EAAQnhC,GAASghC,EAAQE,GAChCK,EAAOH,EAAQ1hC,GAAIqhC,EAAQE,GAC3BO,EAAOJ,EAAQ1hC,GAAKM,GAASghC,EAAQE,GAC3CP,GAAUU,EAAOE,GAAQ,EACzBX,GAAUU,EAAOE,GAAQ,EACzBvd,IAAYod,EAAOE,GAAQ,EAC3Brd,IAAYod,EAAOE,GAAQ,C,CAE7B,MAAO,CAACb,SAAQC,SAAQ3c,UAASC,UACnC,EDsIAuZ,EAAAA,GAAAA,GArKqB8C,GAAyB,KAEhC,WAAS9C,EAAAA,GAAAA,GAFF8C,GAAyB,WAO1B,CAChBpM,oBAAoB,EACpBC,gBAAiB,QAEjBpoB,WAAY,CACVf,QAAS,CACP5zB,KAAM,SACNs0B,WAAY,CAAC,IAAK,IAAK,cAAe,eAG1C8xB,EAAAA,GAAAA,GAjBiB8C,GAAyB,YAsBzB,CACjBxtB,OAAQ,CACNtlB,EAAG,CACDpW,KAAM,UAERqnB,EAAG,CACDrnB,KAAM,aCKC,MAAMoqD,WAA2BnO,GA6F9Cn5B,WAAAA,CAAYuT,EAAOlQ,GACjBmgC,MAAMjwB,EAAOlQ,GAEbzlB,KAAKg8C,qBAAsB,EAC3Bh8C,KAAK2pD,iBAAc71C,EACnB9T,KAAK4pD,iBAAc91C,EACnB9T,KAAKksC,aAAUp4B,EACf9T,KAAKmsC,aAAUr4B,CACjB,CAEAyoC,UAAAA,GAAc,CAKd1U,KAAAA,CAAMvhC,EAAO+H,GACX,MAAM3O,EAAOM,KAAK28C,aAAaj9C,KACzBovB,EAAO9uB,KAAK+5C,YAElB,IAAsB,IAAlB/5C,KAAK2nC,SACP7Y,EAAKO,QAAU3vB,MACV,CACL,IAOI8U,EAAG8Q,EAPHukC,EAAUr1C,IAAO9U,EAAK8U,GAE1B,GAAIyP,GAASvkB,EAAK4G,IAAS,CACzB,MAAM,IAAC7H,EAAM,SAAWuB,KAAK2nC,SAC7BkiB,EAAUr1C,IAAO0S,GAAiBxnB,EAAK8U,GAAI/V,E,CAI7C,IAAK+V,EAAIlO,EAAOgf,EAAOhf,EAAQ+H,EAAOmG,EAAI8Q,IAAQ9Q,EAChDsa,EAAKO,QAAQ7a,GAAKq1C,EAAOr1C,E,CAG/B,CAKAs1C,YAAAA,GACE,OAAOhgC,GAAU9pB,KAAK8N,QAAQkwB,SAAW,GAC3C,CAKA+rB,iBAAAA,GACE,OAAOjgC,GAAU9pB,KAAK8N,QAAQ46C,cAChC,CAMAsB,mBAAAA,GACE,IAAIj4C,EAAM6V,GACN9V,GAAO8V,GAEX,IAAK,IAAIpT,EAAI,EAAGA,EAAIxU,KAAK21B,MAAMj2B,KAAK45B,SAAS5yB,SAAU8N,EACrD,GAAIxU,KAAK21B,MAAMs0B,iBAAiBz1C,IAAMxU,KAAK21B,MAAM8nB,eAAejpC,GAAGlV,OAASU,KAAK07C,MAAO,CACtF,MAAM5B,EAAa95C,KAAK21B,MAAM8nB,eAAejpC,GAAGslC,WAC1C9b,EAAW8b,EAAWgQ,eACtBpB,EAAgB5O,EAAWiQ,oBAEjCh4C,EAAM9C,KAAK8C,IAAIA,EAAKisB,GACpBlsB,EAAM7C,KAAK6C,IAAIA,EAAKksB,EAAW0qB,E,CAInC,MAAO,CACL1qB,SAAUjsB,EACV22C,cAAe52C,EAAMC,EAEzB,CAKAqkC,MAAAA,CAAO7b,GACL,MAAM5E,EAAQ31B,KAAK21B,OACb,UAACqd,GAAard,EACd7G,EAAO9uB,KAAK+5C,YACZmQ,EAAOp7B,EAAKpvB,KACZyqD,EAAUnqD,KAAKoqD,oBAAsBpqD,KAAKqqD,aAAaH,GAAQlqD,KAAK8N,QAAQq8C,QAC5EG,EAAUr7C,KAAK6C,KAAK7C,KAAK8C,IAAIihC,EAAU/yC,MAAO+yC,EAAUzV,QAAU4sB,GAAW,EAAG,GAChFxB,EAAS15C,KAAK8C,IAAIwS,GAAavkB,KAAK8N,QAAQ66C,OAAQ2B,GAAU,GAC9DC,EAAcvqD,KAAKwqD,eAAexqD,KAAKtB,QAKvC,cAACgqD,EAAA,SAAe1qB,GAAYh+B,KAAKgqD,uBACjC,OAACpB,EAAA,OAAQC,EAAA,QAAQ3c,EAAA,QAASC,GAAWsc,GAAkBzqB,EAAU0qB,EAAeC,GAChFjnB,GAAYsR,EAAU/yC,MAAQkqD,GAAWvB,EACzC7b,GAAaiG,EAAUzV,OAAS4sB,GAAWtB,EAC3C4B,EAAYx7C,KAAK6C,IAAI7C,KAAK8C,IAAI2vB,EAAUqL,GAAa,EAAG,GACxD6c,EAAcjlC,GAAY3kB,KAAK8N,QAAQmwB,OAAQwsB,GAC/Cd,EAAc16C,KAAK6C,IAAI83C,EAAcjB,EAAQ,GAC7C+B,GAAgBd,EAAcD,GAAe3pD,KAAK2qD,gCACxD3qD,KAAKksC,QAAUA,EAAU0d,EACzB5pD,KAAKmsC,QAAUA,EAAUyd,EAEzB96B,EAAKxf,MAAQtP,KAAK4qD,iBAElB5qD,KAAK4pD,YAAcA,EAAcc,EAAe1qD,KAAK6qD,qBAAqB7qD,KAAKtB,OAC/EsB,KAAK2pD,YAAc16C,KAAK6C,IAAI9R,KAAK4pD,YAAcc,EAAeH,EAAa,GAE3EvqD,KAAKgiD,eAAekI,EAAM,EAAGA,EAAKxjD,OAAQ6zB,EAC5C,CAKAuwB,cAAAA,CAAet2C,EAAGopC,GAChB,MAAM5d,EAAOhgC,KAAK8N,QACZghB,EAAO9uB,KAAK+5C,YACZ2O,EAAgB1oD,KAAK+pD,oBAC3B,OAAInM,GAAU5d,EAAKlM,UAAUi3B,gBAAmB/qD,KAAK21B,MAAM6xB,kBAAkBhzC,IAA0B,OAApBsa,EAAKO,QAAQ7a,IAAesa,EAAKpvB,KAAK8U,GAAG6mC,OACnH,EAEFr7C,KAAKgrD,uBAAuBl8B,EAAKO,QAAQ7a,GAAKk0C,EAAgB9gC,GACvE,CAEAo6B,cAAAA,CAAekI,EAAM5jD,EAAO+H,EAAOksB,GACjC,MAAMqjB,EAAiB,UAATrjB,EACR5E,EAAQ31B,KAAK21B,MACbqd,EAAYrd,EAAMqd,UAClBhT,EAAOrK,EAAM7nB,QACbm9C,EAAgBjrB,EAAKlM,UACrBo3B,GAAWlY,EAAUvkB,KAAOukB,EAAUtkB,OAAS,EAC/Cy8B,GAAWnY,EAAUze,IAAMye,EAAUxe,QAAU,EAC/C42B,EAAexN,GAASqN,EAAcG,aACtCzB,EAAcyB,EAAe,EAAIprD,KAAK2pD,YACtCC,EAAcwB,EAAe,EAAIprD,KAAK4pD,aACtC,cAAC/I,EAAa,eAAED,GAAkB5gD,KAAK+gD,kBAAkBz6C,EAAOi0B,GACtE,IACI/lB,EADAs0C,EAAa9oD,KAAK8pD,eAGtB,IAAKt1C,EAAI,EAAGA,EAAIlO,IAASkO,EACvBs0C,GAAc9oD,KAAK8qD,eAAet2C,EAAGopC,GAGvC,IAAKppC,EAAIlO,EAAOkO,EAAIlO,EAAQ+H,IAASmG,EAAG,CACtC,MAAMk0C,EAAgB1oD,KAAK8qD,eAAet2C,EAAGopC,GACvCrf,EAAM2rB,EAAK11C,GACXof,EAAa,CACjBle,EAAGw1C,EAAUlrD,KAAKksC,QAClBvlB,EAAGwkC,EAAUnrD,KAAKmsC,QAClB2c,aACAC,SAAUD,EAAaJ,EACvBA,gBACAkB,cACAD,eAEE/I,IACFhtB,EAAW9lB,QAAU+yC,GAAiB7gD,KAAKkgD,0BAA0B1rC,EAAG+pB,EAAI1K,OAAS,SAAW0G,IAElGuuB,GAAcJ,EAEd1oD,KAAKmhD,cAAc5iB,EAAK/pB,EAAGof,EAAY2G,EACzC,CACF,CAEAqwB,cAAAA,GACE,MAAM97B,EAAO9uB,KAAK+5C,YACZsR,EAAWv8B,EAAKpvB,KACtB,IACI8U,EADAlF,EAAQ,EAGZ,IAAKkF,EAAI,EAAGA,EAAI62C,EAAS3kD,OAAQ8N,IAAK,CACpC,MAAM1P,EAAQgqB,EAAKO,QAAQ7a,GACb,OAAV1P,GAAmB0kB,MAAM1kB,KAAU9E,KAAK21B,MAAM6xB,kBAAkBhzC,IAAO62C,EAAS72C,GAAG6mC,SACrF/rC,GAASL,KAAKuZ,IAAI1jB,GAEtB,CAEA,OAAOwK,CACT,CAEA07C,sBAAAA,CAAuBlmD,GACrB,MAAMwK,EAAQtP,KAAK+5C,YAAYzqC,MAC/B,OAAIA,EAAQ,IAAMka,MAAM1kB,GACf8iB,IAAO3Y,KAAKuZ,IAAI1jB,GAASwK,GAE3B,CACT,CAEAywC,gBAAAA,CAAiBrhD,GACf,MAAMowB,EAAO9uB,KAAK+5C,YACZpkB,EAAQ31B,KAAK21B,MACbmpB,EAASnpB,EAAMj2B,KAAKo/C,QAAU,GAC9Bh6C,EAAQswB,GAAatG,EAAKO,QAAQ3wB,GAAQi3B,EAAM7nB,QAAQ8mB,QAE9D,MAAO,CACLtnB,MAAOwxC,EAAOpgD,IAAU,GACxBoG,QAEJ,CAEAslD,iBAAAA,CAAkBF,GAChB,IAAIp4C,EAAM,EACV,MAAM6jB,EAAQ31B,KAAK21B,MACnB,IAAInhB,EAAG8Q,EAAMwJ,EAAMgrB,EAAYhsC,EAE/B,IAAKo8C,EAEH,IAAK11C,EAAI,EAAG8Q,EAAOqQ,EAAMj2B,KAAK45B,SAAS5yB,OAAQ8N,EAAI8Q,IAAQ9Q,EACzD,GAAImhB,EAAMs0B,iBAAiBz1C,GAAI,CAC7Bsa,EAAO6G,EAAM8nB,eAAejpC,GAC5B01C,EAAOp7B,EAAKpvB,KACZo6C,EAAahrB,EAAKgrB,WAClB,K,CAKN,IAAKoQ,EACH,OAAO,EAGT,IAAK11C,EAAI,EAAG8Q,EAAO4kC,EAAKxjD,OAAQ8N,EAAI8Q,IAAQ9Q,EAC1C1G,EAAUgsC,EAAWoG,0BAA0B1rC,GACnB,UAAxB1G,EAAQw9C,cACVx5C,EAAM7C,KAAK6C,IAAIA,EAAKhE,EAAQgxB,aAAe,EAAGhxB,EAAQy9C,kBAAoB,IAG9E,OAAOz5C,CACT,CAEAu4C,YAAAA,CAAaH,GACX,IAAIp4C,EAAM,EAEV,IAAK,IAAI0C,EAAI,EAAG8Q,EAAO4kC,EAAKxjD,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CACjD,MAAM1G,EAAU9N,KAAKkgD,0BAA0B1rC,GAC/C1C,EAAM7C,KAAK6C,IAAIA,EAAKhE,EAAQ6oB,QAAU,EAAG7oB,EAAQ09C,aAAe,EAClE,CACA,OAAO15C,CACT,CAMA+4C,oBAAAA,CAAqBplC,GACnB,IAAIgmC,EAAmB,EAEvB,IAAK,IAAIj3C,EAAI,EAAGA,EAAIiR,IAAgBjR,EAC9BxU,KAAK21B,MAAMs0B,iBAAiBz1C,KAC9Bi3C,GAAoBzrD,KAAKwqD,eAAeh2C,IAI5C,OAAOi3C,CACT,CAKAjB,cAAAA,CAAe/kC,GACb,OAAOxW,KAAK6C,IAAIwS,GAAetkB,KAAK21B,MAAMj2B,KAAK45B,SAAS7T,GAAc9C,OAAQ,GAAI,EACpF,CAMAgoC,6BAAAA,GACE,OAAO3qD,KAAK6qD,qBAAqB7qD,KAAK21B,MAAMj2B,KAAK45B,SAAS5yB,SAAW,CACvE,GACFg/C,EAAAA,GAAAA,GA1WqBgE,GAA2B,KAElC,aAAWhE,EAAAA,GAAAA,GAFJgE,GAA2B,WAO5B,CAChBtN,oBAAoB,EACpBC,gBAAiB,MACjBvoB,UAAW,CAETi3B,eAAe,EAEfK,cAAc,GAEhBn3B,WAAY,CACVf,QAAS,CACP5zB,KAAM,SACNs0B,WAAY,CAAC,gBAAiB,WAAY,cAAe,cAAe,aAAc,IAAK,IAAK,SAAU,cAAe,aAI7H+0B,OAAQ,MAGR3qB,SAAU,EAGV0qB,cAAe,IAGfzqB,OAAQ,OAGRksB,QAAS,EAET9vB,UAAW,OACXqrB,EAAAA,GAAAA,GAtCiBgE,GAA2B,cAwCzB,CACnB/1B,YAAcv0B,GAAkB,YAATA,EACvBs0B,WAAat0B,GAAkB,YAATA,IAAuBA,EAAKs5B,WAAW,gBAAkBt5B,EAAKs5B,WAAW,sBAC/FgtB,EAAAA,GAAAA,GA3CiBgE,GAA2B,YAgD3B,CACjBhc,YAAa,EAGb7S,QAAS,CACP6wB,OAAQ,CACN5M,OAAQ,CACN6M,cAAAA,CAAeh2B,GACb,MAAMj2B,EAAOi2B,EAAMj2B,MACZo/C,QAAQ,WAAC/gB,EAAA,UAAYoC,EAAA,MAAWzd,EAAK,gBAAEkpC,EAAA,aAAiBC,IAAiBl2B,EAAM+1B,OAAO59C,QAC7F,OAAIpO,EAAKo/C,OAAOp4C,QAAUhH,EAAK45B,SAAS5yB,OAC/BhH,EAAKo/C,OAAOjqC,IAAI,CAACvH,EAAOkH,KAC7B,MAAMsa,EAAO6G,EAAM8nB,eAAe,GAC5Bp/C,EAAQywB,EAAKgrB,WAAWvO,SAAS/2B,GAEvC,MAAO,CACLkjB,KAAMpqB,EACN4yB,UAAW7hC,EAAM+6B,gBACjB0yB,UAAWppC,EACX24B,QAAS1lB,EAAM6xB,kBAAkBhzC,GACjCu3C,SAAU1tD,EAAMs0C,WAChBqZ,eAAgB3tD,EAAMu0C,iBACtBqZ,SAAU5tD,EAAMw0C,gBAChB5b,UAAW54B,EAAMygC,YACjBiC,YAAa1iC,EAAMg7B,YACnB8G,UAAWA,EACXpC,WAAYA,EACZ8tB,aAAcD,IAAoBC,GAAgBxtD,EAAMwtD,cAExDntD,MAAO8V,KAIN,EACT,GAGF5V,OAAAA,CAAQmU,EAAGm5C,EAAYR,GACrBA,EAAO/1B,MAAMw2B,qBAAqBD,EAAWxtD,OAC7CgtD,EAAO/1B,MAAMygB,QACf,MCvHO,MAAMgW,WAAuB7Q,GA6B1Ce,UAAAA,GACEt8C,KAAKg8C,qBAAsB,EAC3Bh8C,KAAKi8C,oBAAqB,EAC1B2J,MAAMtJ,YACR,CAEAlG,MAAAA,CAAO7b,GACL,MAAMzL,EAAO9uB,KAAK+5C,aACXxqB,QAAS+Q,EAAM5gC,KAAMqvB,EAAS,GAAE,SAAEs9B,GAAYv9B,EAE/CE,EAAqBhvB,KAAK21B,MAAMmrB,oBACtC,IAAI,MAACx6C,EAAA,MAAO+H,GAASwgB,GAAiCC,EAAMC,EAAQC,GAEpEhvB,KAAK87C,WAAax1C,EAClBtG,KAAK+7C,WAAa1tC,EAEd4hB,GAAoBnB,KACtBxoB,EAAQ,EACR+H,EAAQ0gB,EAAOroB,QAIjB45B,EAAKwR,OAAS9xC,KAAK21B,MACnB2K,EAAK2R,cAAgBjyC,KAAKtB,MAC1B4hC,EAAKgsB,aAAeD,EAASC,WAC7BhsB,EAAKvR,OAASA,EAEd,MAAMjhB,EAAU9N,KAAKigD,6BAA6B1lB,GAC7Cv6B,KAAK8N,QAAQmtB,WAChBntB,EAAQgxB,YAAc,GAExBhxB,EAAQsiC,QAAUpwC,KAAK8N,QAAQsiC,QAC/BpwC,KAAKmhD,cAAc7gB,OAAMxsB,EAAW,CAClCy4C,UAAWv9B,EACXlhB,WACCysB,GAGHv6B,KAAKgiD,eAAejzB,EAAQzoB,EAAO+H,EAAOksB,EAC5C,CAEAynB,cAAAA,CAAejzB,EAAQzoB,EAAO+H,EAAOksB,GACnC,MAAMqjB,EAAiB,UAATrjB,GACR,OAACpL,EAAA,OAAQC,EAAA,SAAQksB,EAAA,SAAU+Q,GAAYrsD,KAAK+5C,aAC5C,cAAC8G,EAAa,eAAED,GAAkB5gD,KAAK+gD,kBAAkBz6C,EAAOi0B,GAChE0f,EAAQ9qB,EAAOK,KACf0qB,EAAQ9qB,EAAOI,MACf,SAACF,EAAA,QAAU8gB,GAAWpwC,KAAK8N,QAC3B0+C,EAAejjC,GAAS+F,GAAYA,EAAW9pB,OAAOuiB,kBACtD0kC,EAAezsD,KAAK21B,MAAMmrB,qBAAuBlD,GAAkB,SAATrjB,EAC1DrP,EAAM5kB,EAAQ+H,EACdq+C,EAAc39B,EAAOroB,OAC3B,IAAIimD,EAAarmD,EAAQ,GAAKtG,KAAKm/C,UAAU74C,EAAQ,GAErD,IAAK,IAAIkO,EAAI,EAAGA,EAAIk4C,IAAel4C,EAAG,CACpC,MAAMub,EAAQhB,EAAOva,GACfof,EAAa64B,EAAe18B,EAAQ,GAE1C,GAAIvb,EAAIlO,GAASkO,GAAK0W,EAAK,CACzB0I,EAAWoU,MAAO,EAClB,Q,CAGF,MAAMJ,EAAS5nC,KAAKm/C,UAAU3qC,GACxBo4C,EAAWhpC,GAAcgkB,EAAOsS,IAChCxQ,EAAS9V,EAAWqmB,GAAS9qB,EAAOS,iBAAiBgY,EAAOqS,GAAQzlC,GACpEm1B,EAAS/V,EAAWsmB,GAAS0D,GAASgP,EAAWx9B,EAAO02B,eAAiB12B,EAAOQ,iBAAiB0rB,EAAWt7C,KAAKq4C,WAAWjpB,EAAQwY,EAAQ0T,GAAY1T,EAAOsS,GAAQ1lC,GAE7Kof,EAAWoU,KAAOxe,MAAMkgB,IAAWlgB,MAAMmgB,IAAWijB,EACpDh5B,EAAWyd,KAAO78B,EAAI,GAAKvF,KAAMuZ,IAAIof,EAAOqS,GAAS0S,EAAW1S,IAAWuS,EACvEpc,IACFxc,EAAWgU,OAASA,EACpBhU,EAAWinB,IAAMwR,EAAS3sD,KAAK8U,IAG7BosC,IACFhtB,EAAW9lB,QAAU+yC,GAAiB7gD,KAAKkgD,0BAA0B1rC,EAAGub,EAAM8D,OAAS,SAAW0G,IAG/FkyB,GACHzsD,KAAKmhD,cAAcpxB,EAAOvb,EAAGof,EAAY2G,GAG3CoyB,EAAa/kB,CACf,CACF,CAKAkY,cAAAA,GACE,MAAMhxB,EAAO9uB,KAAK+5C,YACZxqB,EAAUT,EAAKS,QACfgI,EAAShI,EAAQzhB,SAAWyhB,EAAQzhB,QAAQgxB,aAAe,EAC3Dp/B,EAAOovB,EAAKpvB,MAAQ,GAC1B,IAAKA,EAAKgH,OACR,OAAO6wB,EAET,MAAM4Q,EAAazoC,EAAK,GAAG2N,KAAKrN,KAAKkgD,0BAA0B,IACzD2M,EAAYntD,EAAKA,EAAKgH,OAAS,GAAG2G,KAAKrN,KAAKkgD,0BAA0BxgD,EAAKgH,OAAS,IAC1F,OAAOuI,KAAK6C,IAAIylB,EAAQ4Q,EAAY0kB,GAAa,CACnD,CAEAxY,IAAAA,GACE,MAAMvlB,EAAO9uB,KAAK+5C,YAClBjrB,EAAKS,QAAQu9B,oBAAoB9sD,KAAK21B,MAAMqd,UAAWlkB,EAAKK,OAAOK,MACnEo2B,MAAMvR,MACR,GACFqR,EAAAA,GAAAA,GAzIqB0G,GAAuB,KAE9B,SAAO1G,EAAAA,GAAAA,GAFA0G,GAAuB,WAOxB,CAChBhQ,mBAAoB,OACpBC,gBAAiB,QAEjBphB,UAAU,EACV3L,UAAU,KACVo2B,EAAAA,GAAAA,GAbiB0G,GAAuB,YAkBvB,CACjBpxB,OAAQ,CACNstB,QAAS,CACPhpD,KAAM,YAERipD,QAAS,CACPjpD,KAAM,aC1BC,MAAMytD,WAA4BxR,GAoF/Cn5B,WAAAA,CAAYuT,EAAOlQ,GACjBmgC,MAAMjwB,EAAOlQ,GAEbzlB,KAAK2pD,iBAAc71C,EACnB9T,KAAK4pD,iBAAc91C,CACrB,CAEAisC,gBAAAA,CAAiBrhD,GACf,MAAMowB,EAAO9uB,KAAK+5C,YACZpkB,EAAQ31B,KAAK21B,MACbmpB,EAASnpB,EAAMj2B,KAAKo/C,QAAU,GAC9Bh6C,EAAQswB,GAAatG,EAAKO,QAAQ3wB,GAAO4U,EAAGqiB,EAAM7nB,QAAQ8mB,QAEhE,MAAO,CACLtnB,MAAOwxC,EAAOpgD,IAAU,GACxBoG,QAEJ,CAEA65C,eAAAA,CAAgB7vB,EAAMpvB,EAAM4G,EAAO+H,GACjC,OAAOq5B,GAA4BslB,KAAKhtD,KAAjC0nC,CAAuC5Y,EAAMpvB,EAAM4G,EAAO+H,EACnE,CAEA+nC,MAAAA,CAAO7b,GACL,MAAM2vB,EAAOlqD,KAAK+5C,YAAYr6C,KAE9BM,KAAKitD,gBACLjtD,KAAKgiD,eAAekI,EAAM,EAAGA,EAAKxjD,OAAQ6zB,EAC5C,CAKAilB,SAAAA,GACE,MAAM1wB,EAAO9uB,KAAK+5C,YACZ7yC,EAAQ,CAAC6K,IAAKvM,OAAOuiB,kBAAmBjW,IAAKtM,OAAO4zC,mBAgB1D,OAdAtqB,EAAKpvB,KAAKqtB,QAAQ,CAACqe,EAAS1sC,KAC1B,MAAMkpC,EAAS5nC,KAAKm/C,UAAUzgD,GAAO4U,GAEhCkW,MAAMoe,IAAW5nC,KAAK21B,MAAM6xB,kBAAkB9oD,KAC7CkpC,EAAS1gC,EAAM6K,MACjB7K,EAAM6K,IAAM61B,GAGVA,EAAS1gC,EAAM4K,MACjB5K,EAAM4K,IAAM81B,MAKX1gC,CACT,CAKA+lD,aAAAA,GACE,MAAMt3B,EAAQ31B,KAAK21B,MACbqd,EAAYrd,EAAMqd,UAClBhT,EAAOrK,EAAM7nB,QACbo/C,EAAUj+C,KAAK8C,IAAIihC,EAAUtkB,MAAQskB,EAAUvkB,KAAMukB,EAAUxe,OAASwe,EAAUze,KAElFq1B,EAAc36C,KAAK6C,IAAIo7C,EAAU,EAAG,GACpCvD,EAAc16C,KAAK6C,IAAIkuB,EAAKmtB,iBAAmBvD,EAAe,IAAQ5pB,EAAKmtB,iBAAoB,EAAG,GAClGzC,GAAgBd,EAAcD,GAAeh0B,EAAMy3B,yBAEzDptD,KAAK4pD,YAAcA,EAAec,EAAe1qD,KAAKtB,MACtDsB,KAAK2pD,YAAc3pD,KAAK4pD,YAAcc,CACxC,CAEA1I,cAAAA,CAAekI,EAAM5jD,EAAO+H,EAAOksB,GACjC,MAAMqjB,EAAiB,UAATrjB,EACR5E,EAAQ31B,KAAK21B,MACbqK,EAAOrK,EAAM7nB,QACbm9C,EAAgBjrB,EAAKlM,UACrBiH,EAAQ/6B,KAAK+5C,YAAYyD,OACzB0N,EAAUnwB,EAAMsyB,QAChBlC,EAAUpwB,EAAMuyB,QAChBC,EAAoBxyB,EAAMyyB,cAAc,GAAK,GAAM7lC,GACzD,IACInT,EADAiW,EAAQ8iC,EAGZ,MAAME,EAAe,IAAMztD,KAAK0tD,uBAEhC,IAAKl5C,EAAI,EAAGA,EAAIlO,IAASkO,EACvBiW,GAASzqB,KAAK2tD,cAAcn5C,EAAG+lB,EAAMkzB,GAEvC,IAAKj5C,EAAIlO,EAAOkO,EAAIlO,EAAQ+H,EAAOmG,IAAK,CACtC,MAAM+pB,EAAM2rB,EAAK11C,GACjB,IAAIs0C,EAAar+B,EACbs+B,EAAWt+B,EAAQzqB,KAAK2tD,cAAcn5C,EAAG+lB,EAAMkzB,GAC/C7D,EAAcj0B,EAAM6xB,kBAAkBhzC,GAAKumB,EAAM6yB,8BAA8B5tD,KAAKm/C,UAAU3qC,GAAGlB,GAAK,EAC1GmX,EAAQs+B,EAEJnL,IACEqN,EAAcG,eAChBxB,EAAc,GAEZqB,EAAcF,gBAChBjC,EAAaC,EAAWwE,IAI5B,MAAM35B,EAAa,CACjBle,EAAGw1C,EACHvkC,EAAGwkC,EACHxB,YAAa,EACbC,cACAd,aACAC,WACAj7C,QAAS9N,KAAKkgD,0BAA0B1rC,EAAG+pB,EAAI1K,OAAS,SAAW0G,IAGrEv6B,KAAKmhD,cAAc5iB,EAAK/pB,EAAGof,EAAY2G,EACzC,CACF,CAEAmzB,oBAAAA,GACE,MAAM5+B,EAAO9uB,KAAK+5C,YAClB,IAAI1rC,EAAQ,EAQZ,OANAygB,EAAKpvB,KAAKqtB,QAAQ,CAACqe,EAAS1sC,MACrB8qB,MAAMxpB,KAAKm/C,UAAUzgD,GAAO4U,IAAMtT,KAAK21B,MAAM6xB,kBAAkB9oD,IAClE2P,MAIGA,CACT,CAKAs/C,aAAAA,CAAcjvD,EAAO67B,EAAMkzB,GACzB,OAAOztD,KAAK21B,MAAM6xB,kBAAkB9oD,GAChCorB,GAAU9pB,KAAKkgD,0BAA0BxhD,EAAO67B,GAAM9P,OAASgjC,GAC/D,CACN,GACF/H,EAAAA,GAAAA,GA/NqBqH,GAA4B,KAEnC,cAAYrH,EAAAA,GAAAA,GAFLqH,GAA4B,WAO7B,CAChB1Q,gBAAiB,MACjBvoB,UAAW,CACTi3B,eAAe,EACfK,cAAc,GAEhBn3B,WAAY,CACVf,QAAS,CACP5zB,KAAM,SACNs0B,WAAY,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,iBAGpEyG,UAAW,IACXyuB,WAAY,KACZpD,EAAAA,GAAAA,GArBiBqH,GAA4B,YA0B5B,CACjBrf,YAAa,EAEb7S,QAAS,CACP6wB,OAAQ,CACN5M,OAAQ,CACN6M,cAAAA,CAAeh2B,GACb,MAAMj2B,EAAOi2B,EAAMj2B,KACnB,GAAIA,EAAKo/C,OAAOp4C,QAAUhH,EAAK45B,SAAS5yB,OAAQ,CAC9C,MAAOo4C,QAAQ,WAAC/gB,EAAA,MAAYrb,IAAUiT,EAAM+1B,OAAO59C,QAEnD,OAAOpO,EAAKo/C,OAAOjqC,IAAI,CAACvH,EAAOkH,KAC7B,MAAMsa,EAAO6G,EAAM8nB,eAAe,GAC5Bp/C,EAAQywB,EAAKgrB,WAAWvO,SAAS/2B,GAEvC,MAAO,CACLkjB,KAAMpqB,EACN4yB,UAAW7hC,EAAM+6B,gBACjB2H,YAAa1iC,EAAMg7B,YACnByyB,UAAWppC,EACXuU,UAAW54B,EAAMygC,YACjBf,WAAYA,EACZsd,QAAS1lB,EAAM6xB,kBAAkBhzC,GAGjC9V,MAAO8V,I,CAIb,MAAO,EACT,GAGF5V,OAAAA,CAAQmU,EAAGm5C,EAAYR,GACrBA,EAAO/1B,MAAMw2B,qBAAqBD,EAAWxtD,OAC7CgtD,EAAO/1B,MAAMygB,QACf,IAIJpb,OAAQ,CACN1nB,EAAG,CACDhU,KAAM,eACNuuD,WAAY,CACVn3B,SAAS,GAEXE,aAAa,EACbI,KAAM,CACJ82B,UAAU,GAEZC,YAAa,CACXr3B,SAAS,GAEXoyB,WAAY,MC/EL,MAAMkF,WAAsBtE,KAoB3ChE,EAAAA,GAAAA,GApBqBsI,GAAsB,KAE7B,QAAMtI,EAAAA,GAAAA,GAFCsI,GAAsB,WAOvB,CAEhBrF,OAAQ,EAGR3qB,SAAU,EAGV0qB,cAAe,IAGfzqB,OAAQ,SClBG,MAAMgwB,WAAwB1S,GAmC3CwE,gBAAAA,CAAiBrhD,GACf,MAAM0wB,EAASpvB,KAAK+5C,YAAY3qB,OAC1BwY,EAAS5nC,KAAKm/C,UAAUzgD,GAE9B,MAAO,CACL4O,MAAO8hB,EAAO2vB,YAAYrgD,GAC1BoG,MAAO,GAAKsqB,EAAO4wB,iBAAiBpY,EAAOxY,EAAOI,OAEtD,CAEAmvB,eAAAA,CAAgB7vB,EAAMpvB,EAAM4G,EAAO+H,GACjC,OAAOq5B,GAA4BslB,KAAKhtD,KAAjC0nC,CAAuC5Y,EAAMpvB,EAAM4G,EAAO+H,EACnE,CAEA+nC,MAAAA,CAAO7b,GACL,MAAMzL,EAAO9uB,KAAK+5C,YACZzZ,EAAOxR,EAAKS,QACZR,EAASD,EAAKpvB,MAAQ,GACtBo/C,EAAShwB,EAAKK,OAAO4vB,YAK3B,GAFAze,EAAKvR,OAASA,EAED,WAATwL,EAAmB,CACrB,MAAMzsB,EAAU9N,KAAKigD,6BAA6B1lB,GAC7Cv6B,KAAK8N,QAAQmtB,WAChBntB,EAAQgxB,YAAc,GAGxB,MAAMlL,EAAa,CACjB4d,OAAO,EACPG,UAAWmN,EAAOp4C,SAAWqoB,EAAOroB,OACpCoH,WAGF9N,KAAKmhD,cAAc7gB,OAAMxsB,EAAW8f,EAAY2G,E,CAIlDv6B,KAAKgiD,eAAejzB,EAAQ,EAAGA,EAAOroB,OAAQ6zB,EAChD,CAEAynB,cAAAA,CAAejzB,EAAQzoB,EAAO+H,EAAOksB,GACnC,MAAMQ,EAAQ/6B,KAAK+5C,YAAYyD,OACzBI,EAAiB,UAATrjB,EAEd,IAAK,IAAI/lB,EAAIlO,EAAOkO,EAAIlO,EAAQ+H,EAAOmG,IAAK,CAC1C,MAAMub,EAAQhB,EAAOva,GACf1G,EAAU9N,KAAKkgD,0BAA0B1rC,EAAGub,EAAM8D,OAAS,SAAW0G,GACtE2zB,EAAgBnzB,EAAMozB,yBAAyB35C,EAAGxU,KAAKm/C,UAAU3qC,GAAGlB,GAEpEoC,EAAIkoC,EAAQ7iB,EAAMsyB,QAAUa,EAAcx4C,EAC1CiR,EAAIi3B,EAAQ7iB,EAAMuyB,QAAUY,EAAcvnC,EAE1CiN,EAAa,CACjBle,IACAiR,IACA8D,MAAOyjC,EAAczjC,MACrBud,KAAMxe,MAAM9T,IAAM8T,MAAM7C,GACxB7Y,WAGF9N,KAAKmhD,cAAcpxB,EAAOvb,EAAGof,EAAY2G,EAC3C,CACF,GACFmrB,EAAAA,GAAAA,GApGqBuI,GAAwB,KAE/B,UAAQvI,EAAAA,GAAAA,GAFDuI,GAAwB,WAOzB,CAChB7R,mBAAoB,OACpBC,gBAAiB,QACjBhiB,UAAW,IACXY,UAAU,EACVtB,SAAU,CACR2G,KAAM,CACJzB,KAAM,aAGV6mB,EAAAA,GAAAA,GAjBiBuI,GAAwB,YAsBxB,CACjBvgB,YAAa,EAEb1S,OAAQ,CACN1nB,EAAG,CACDhU,KAAM,mBCzBC,MAAM8uD,WAA0B7S,GAoC7CwE,gBAAAA,CAAiBrhD,GACf,MAAMowB,EAAO9uB,KAAK+5C,YACZ+E,EAAS9+C,KAAK21B,MAAMj2B,KAAKo/C,QAAU,IACnC,OAAC5uB,EAAA,OAAQC,GAAUrB,EACnB8Y,EAAS5nC,KAAKm/C,UAAUzgD,GACxBgX,EAAIwa,EAAO8vB,iBAAiBpY,EAAOlyB,GACnCiR,EAAIwJ,EAAO6vB,iBAAiBpY,EAAOjhB,GAEzC,MAAO,CACLrZ,MAAOwxC,EAAOpgD,IAAU,GACxBoG,MAAO,IAAM4Q,EAAI,KAAOiR,EAAI,IAEhC,CAEAyvB,MAAAA,CAAO7b,GACL,MAAMzL,EAAO9uB,KAAK+5C,aACXr6C,KAAMqvB,EAAS,IAAMD,EAEtBE,EAAqBhvB,KAAK21B,MAAMmrB,oBACtC,IAAI,MAACx6C,EAAA,MAAO+H,GAASwgB,GAAiCC,EAAMC,EAAQC,GAUpE,GARAhvB,KAAK87C,WAAax1C,EAClBtG,KAAK+7C,WAAa1tC,EAEd4hB,GAAoBnB,KACtBxoB,EAAQ,EACR+H,EAAQ0gB,EAAOroB,QAGb1G,KAAK8N,QAAQmtB,SAAU,CAGpBj7B,KAAKo8C,oBACRp8C,KAAKw8C,cAEP,MAAOjtB,QAAS+Q,EAAA,SAAM+rB,GAAYv9B,EAGlCwR,EAAKwR,OAAS9xC,KAAK21B,MACnB2K,EAAK2R,cAAgBjyC,KAAKtB,MAC1B4hC,EAAKgsB,aAAeD,EAASC,WAC7BhsB,EAAKvR,OAASA,EAEd,MAAMjhB,EAAU9N,KAAKigD,6BAA6B1lB,GAClDzsB,EAAQsiC,QAAUpwC,KAAK8N,QAAQsiC,QAC/BpwC,KAAKmhD,cAAc7gB,OAAMxsB,EAAW,CAClCy4C,UAAWv9B,EACXlhB,WACCysB,EACL,MAAWv6B,KAAKo8C,4BAEPttB,EAAKS,QACZvvB,KAAKo8C,oBAAqB,GAI5Bp8C,KAAKgiD,eAAejzB,EAAQzoB,EAAO+H,EAAOksB,EAC5C,CAEAiiB,WAAAA,GACE,MAAM,SAACvhB,GAAYj7B,KAAK8N,SAEnB9N,KAAKo8C,oBAAsBnhB,IAC9Bj7B,KAAKo8C,mBAAqBp8C,KAAK21B,MAAM04B,SAASC,WAAW,SAG3D1I,MAAMpJ,aACR,CAEAwF,cAAAA,CAAejzB,EAAQzoB,EAAO+H,EAAOksB,GACnC,MAAMqjB,EAAiB,UAATrjB,GACR,OAACpL,EAAA,OAAQC,EAAA,SAAQksB,EAAA,SAAU+Q,GAAYrsD,KAAK+5C,YAC5CiH,EAAYhhD,KAAKkgD,0BAA0B55C,EAAOi0B,GAClDsmB,EAAgB7gD,KAAK2gD,iBAAiBK,GACtCJ,EAAiB5gD,KAAK4gD,eAAermB,EAAMsmB,GAC3C5G,EAAQ9qB,EAAOK,KACf0qB,EAAQ9qB,EAAOI,MACf,SAACF,EAAA,QAAU8gB,GAAWpwC,KAAK8N,QAC3B0+C,EAAejjC,GAAS+F,GAAYA,EAAW9pB,OAAOuiB,kBACtD0kC,EAAezsD,KAAK21B,MAAMmrB,qBAAuBlD,GAAkB,SAATrjB,EAChE,IAAIoyB,EAAarmD,EAAQ,GAAKtG,KAAKm/C,UAAU74C,EAAQ,GAErD,IAAK,IAAIkO,EAAIlO,EAAOkO,EAAIlO,EAAQ+H,IAASmG,EAAG,CAC1C,MAAMub,EAAQhB,EAAOva,GACfozB,EAAS5nC,KAAKm/C,UAAU3qC,GACxBof,EAAa64B,EAAe18B,EAAQ,GACpC68B,EAAWhpC,GAAcgkB,EAAOsS,IAChCxQ,EAAS9V,EAAWqmB,GAAS9qB,EAAOS,iBAAiBgY,EAAOqS,GAAQzlC,GACpEm1B,EAAS/V,EAAWsmB,GAAS0D,GAASgP,EAAWx9B,EAAO02B,eAAiB12B,EAAOQ,iBAAiB0rB,EAAWt7C,KAAKq4C,WAAWjpB,EAAQwY,EAAQ0T,GAAY1T,EAAOsS,GAAQ1lC,GAE7Kof,EAAWoU,KAAOxe,MAAMkgB,IAAWlgB,MAAMmgB,IAAWijB,EACpDh5B,EAAWyd,KAAO78B,EAAI,GAAKvF,KAAMuZ,IAAIof,EAAOqS,GAAS0S,EAAW1S,IAAWuS,EACvEpc,IACFxc,EAAWgU,OAASA,EACpBhU,EAAWinB,IAAMwR,EAAS3sD,KAAK8U,IAG7BosC,IACFhtB,EAAW9lB,QAAU+yC,GAAiB7gD,KAAKkgD,0BAA0B1rC,EAAGub,EAAM8D,OAAS,SAAW0G,IAG/FkyB,GACHzsD,KAAKmhD,cAAcpxB,EAAOvb,EAAGof,EAAY2G,GAG3CoyB,EAAa/kB,CACf,CAEA5nC,KAAKkhD,oBAAoBL,EAAetmB,EAAMymB,EAChD,CAKAlB,cAAAA,GACE,MAAMhxB,EAAO9uB,KAAK+5C,YACZr6C,EAAOovB,EAAKpvB,MAAQ,GAE1B,IAAKM,KAAK8N,QAAQmtB,SAAU,CAC1B,IAAInpB,EAAM,EACV,IAAK,IAAI0C,EAAI9U,EAAKgH,OAAS,EAAG8N,GAAK,IAAKA,EACtC1C,EAAM7C,KAAK6C,IAAIA,EAAKpS,EAAK8U,GAAGnH,KAAKrN,KAAKkgD,0BAA0B1rC,IAAM,GAExE,OAAO1C,EAAM,GAAKA,C,CAGpB,MAAMyd,EAAUT,EAAKS,QACfgI,EAAShI,EAAQzhB,SAAWyhB,EAAQzhB,QAAQgxB,aAAe,EAEjE,IAAKp/B,EAAKgH,OACR,OAAO6wB,EAGT,MAAM4Q,EAAazoC,EAAK,GAAG2N,KAAKrN,KAAKkgD,0BAA0B,IACzD2M,EAAYntD,EAAKA,EAAKgH,OAAS,GAAG2G,KAAKrN,KAAKkgD,0BAA0BxgD,EAAKgH,OAAS,IAC1F,OAAOuI,KAAK6C,IAAIylB,EAAQ4Q,EAAY0kB,GAAa,CACnD,GACFnH,EAAAA,GAAAA,GA7KqB0I,GAA0B,KAEjC,YAAU1I,EAAAA,GAAAA,GAFH0I,GAA0B,WAO3B,CAChBhS,oBAAoB,EACpBC,gBAAiB,QACjBphB,UAAU,EACV4D,MAAM,KACN6mB,EAAAA,GAAAA,GAZiB0I,GAA0B,YAiB1B,CAEjB9zB,YAAa,CACXC,KAAM,SAGRS,OAAQ,CACNtlB,EAAG,CACDpW,KAAM,UAERqnB,EAAG,CACDrnB,KAAM,aC+Bd,SAASivD,KACP,MAAM,IAAI7nB,MAAM,kFAClB,CAQA,MAAM8nB,GAYJ,eAAOrzB,CACLszB,GAEAzgD,OAAO8T,OAAO0sC,GAAgB3qC,UAAW4qC,EAC3C,CAIArsC,WAAAA,CAAYtU,IAAqB43C,EAAAA,GAAAA,GAAA,uBAC/B1lD,KAAK8N,QAAUA,GAAW,CAAC,CAC7B,CAGA4gD,IAAAA,GAAQ,CAERC,OAAAA,GACE,OAAOJ,IACT,CAEA1mB,KAAAA,GACE,OAAO0mB,IACT,CAEAj5B,MAAAA,GACE,OAAOi5B,IACT,CAEAjtD,GAAAA,GACE,OAAOitD,IACT,CAEAK,IAAAA,GACE,OAAOL,IACT,CAEAM,OAAAA,GACE,OAAON,IACT,CAEAO,KAAAA,GACE,OAAOP,IACT,EAGF,IAAAQ,GAAe,CACbC,MAAOR,IC9GT,SAASS,GAAaC,EAAS1/B,EAAM1qB,EAAO01B,GAC1C,MAAM,WAACsf,EAAU,KAAEp6C,EAAA,QAAMwvB,GAAWggC,EAC9B//B,EAAS2qB,EAAWC,YAAY5qB,OAChCG,EAAW4/B,EAAQ3/B,SAAU2/B,EAAQ3/B,QAAQzhB,QAAUohD,EAAQ3/B,QAAQzhB,QAAQwhB,SAAkB,KAEvG,GAAIH,GAAUK,IAASL,EAAOK,MAAiB,MAATA,GAAgBN,GAAWxvB,EAAKgH,OAAQ,CAC5E,MAAMyoD,EAAehgC,EAAOigC,eAAiBhjC,GAAgBH,GAC7D,IAAKuO,EAAW,CACd,MAAMxR,EAASmmC,EAAazvD,EAAM8vB,EAAM1qB,GACxC,GAAIwqB,EAAU,CACZ,MAAM,OAACF,GAAU0qB,EAAWC,aACtB,QAAC1qB,GAAW6/B,EAEZr/B,EAAuBR,EAC1BrL,MAAM,EAAGgF,EAAOgD,GAAK,GACrB9G,UACA4K,UACCC,IAAUnM,GAAcmM,EAAMX,EAAOI,QACzCxG,EAAOgD,IAAM/c,KAAK6C,IAAI,EAAG+d,GAEzB,MAAMG,EAAuBX,EAC1BrL,MAAMgF,EAAO+C,IACb+D,UACCC,IAAUnM,GAAcmM,EAAMX,EAAOI,QACzCxG,EAAO+C,IAAM9c,KAAK6C,IAAI,EAAGke,E,CAE3B,OAAOhH,C,CACF,GAAI8wB,EAAW+B,eAAgB,CAIpC,MAAMp7C,EAAKf,EAAK,GACVwH,EAA+B,oBAAhBzG,EAAG4uD,UAA2B5uD,EAAG4uD,SAAS7/B,GAC/D,GAAItoB,EAAO,CACT,MAAMZ,EAAQ6oD,EAAazvD,EAAM8vB,EAAM1qB,EAAQoC,GACzCgkB,EAAMikC,EAAazvD,EAAM8vB,EAAM1qB,EAAQoC,GAC7C,MAAO,CAAC8kB,GAAI1lB,EAAM0lB,GAAID,GAAIb,EAAIa,G,GAKpC,MAAO,CAACC,GAAI,EAAGD,GAAIrsB,EAAKgH,OAAS,EACnC,CAUA,SAAS4oD,GAAyB35B,EAAOnG,EAAM+/B,EAAU1oD,EAAS2zB,GAChE,MAAM2d,EAAWxiB,EAAM65B,+BACjB1qD,EAAQyqD,EAAS//B,GACvB,IAAK,IAAIhb,EAAI,EAAG8Q,EAAO6yB,EAASzxC,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CACrD,MAAM,MAAC9V,EAAA,KAAOgB,GAAQy4C,EAAS3jC,IACzB,GAACwX,EAAA,GAAID,GAAMkjC,GAAa9W,EAAS3jC,GAAIgb,EAAM1qB,EAAO01B,GACxD,IAAK,IAAIja,EAAIyL,EAAIzL,GAAKwL,IAAMxL,EAAG,CAC7B,MAAM6qB,EAAU1rC,EAAK6gB,GAChB6qB,EAAQpD,MACXnhC,EAAQukC,EAAS1sC,EAAO6hB,EAE5B,CACF,CACF,CAOA,SAASkvC,GAAyBjgC,GAChC,MAAMkgC,GAA8B,IAAvBlgC,EAAKzJ,QAAQ,KACpB4pC,GAA8B,IAAvBngC,EAAKzJ,QAAQ,KAE1B,OAAO,SAAS8E,EAAKC,GACnB,MAAM8kC,EAASF,EAAOzgD,KAAKuZ,IAAIqC,EAAInV,EAAIoV,EAAIpV,GAAK,EAC1Cm6C,EAASF,EAAO1gD,KAAKuZ,IAAIqC,EAAIlE,EAAImE,EAAInE,GAAK,EAChD,OAAO1X,KAAKga,KAAKha,KAAKmS,IAAIwuC,EAAQ,GAAK3gD,KAAKmS,IAAIyuC,EAAQ,GAC1D,CACF,CAWA,SAASC,GAAkBn6B,EAAO45B,EAAU//B,EAAMugC,EAAkBt1B,GAClE,MAAMjN,EAAQ,GAEd,IAAKiN,IAAqB9E,EAAMq6B,cAAcT,GAC5C,OAAO/hC,EAGT,MAAMyiC,EAAiB,SAAS7kB,EAAS3lB,EAAc/mB,IAChD+7B,GAAqBuE,GAAeoM,EAASzV,EAAMqd,UAAW,KAG/D5H,EAAQ8kB,QAAQX,EAAS75C,EAAG65C,EAAS5oC,EAAGopC,IAC1CviC,EAAMxG,KAAK,CAACokB,UAAS3lB,eAAc/mB,SAEvC,EAGA,OADA4wD,GAAyB35B,EAAOnG,EAAM+/B,EAAUU,GAAgB,GACzDziC,CACT,CAUA,SAAS2iC,GAAsBx6B,EAAO45B,EAAU//B,EAAMugC,GACpD,IAAIviC,EAAQ,GAEZ,SAASyiC,EAAe7kB,EAAS3lB,EAAc/mB,GAC7C,MAAM,WAACoqD,EAAA,SAAYC,GAAY3d,EAAQglB,SAAS,CAAC,aAAc,YAAaL,IACtE,MAACtlC,GAASN,GAAkBihB,EAAS,CAAC11B,EAAG65C,EAAS75C,EAAGiR,EAAG4oC,EAAS5oC,IAEnEsE,GAAcR,EAAOq+B,EAAYC,IACnCv7B,EAAMxG,KAAK,CAACokB,UAAS3lB,eAAc/mB,SAEvC,CAGA,OADA4wD,GAAyB35B,EAAOnG,EAAM+/B,EAAUU,GACzCziC,CACT,CAYA,SAAS6iC,GAAyB16B,EAAO45B,EAAU//B,EAAMgL,EAAWu1B,EAAkBt1B,GACpF,IAAIjN,EAAQ,GACZ,MAAM8iC,EAAiBb,GAAyBjgC,GAChD,IAAI+gC,EAAc/qD,OAAOuiB,kBAEzB,SAASkoC,EAAe7kB,EAAS3lB,EAAc/mB,GAC7C,MAAMwxD,EAAU9kB,EAAQ8kB,QAAQX,EAAS75C,EAAG65C,EAAS5oC,EAAGopC,GACxD,GAAIv1B,IAAc01B,EAChB,OAGF,MAAM7J,EAASjb,EAAQolB,eAAeT,GAChCU,IAAgBh2B,GAAoB9E,EAAMq6B,cAAc3J,GAC9D,IAAKoK,IAAgBP,EACnB,OAGF,MAAMvlC,EAAW2lC,EAAef,EAAUlJ,GACtC17B,EAAW4lC,GACb/iC,EAAQ,CAAC,CAAC4d,UAAS3lB,eAAc/mB,UACjC6xD,EAAc5lC,GACLA,IAAa4lC,GAEtB/iC,EAAMxG,KAAK,CAACokB,UAAS3lB,eAAc/mB,SAEvC,CAGA,OADA4wD,GAAyB35B,EAAOnG,EAAM+/B,EAAUU,GACzCziC,CACT,CAYA,SAASkjC,GAAgB/6B,EAAO45B,EAAU//B,EAAMgL,EAAWu1B,EAAkBt1B,GAC3E,OAAKA,GAAqB9E,EAAMq6B,cAAcT,GAI9B,MAAT//B,GAAiBgL,EAEpB61B,GAAyB16B,EAAO45B,EAAU//B,EAAMgL,EAAWu1B,EAAkBt1B,GAD7E01B,GAAsBx6B,EAAO45B,EAAU//B,EAAMugC,GAJxC,EAMX,CAWA,SAASY,GAAah7B,EAAO45B,EAAU//B,EAAMgL,EAAWu1B,GACtD,MAAMviC,EAAQ,GACRojC,EAAuB,MAATphC,EAAe,WAAa,WAChD,IAAIqhC,GAAiB,EAWrB,OATAvB,GAAyB35B,EAAOnG,EAAM+/B,EAAU,CAACnkB,EAAS3lB,EAAc/mB,KAClE0sC,EAAQwlB,IAAgBxlB,EAAQwlB,GAAarB,EAAS//B,GAAOugC,KAC/DviC,EAAMxG,KAAK,CAACokB,UAAS3lB,eAAc/mB,UACnCmyD,EAAiBA,GAAkBzlB,EAAQ8kB,QAAQX,EAAS75C,EAAG65C,EAAS5oC,EAAGopC,MAM3Ev1B,IAAcq2B,EACT,GAEFrjC,CACT,CAMA,IAAAsjC,GAAe,CAEbxB,4BAGAyB,MAAO,CAYLryD,KAAAA,CAAMi3B,EAAO5iB,EAAGjF,EAASiiD,GACvB,MAAMR,EAAW/iB,GAAoBz5B,EAAG4iB,GAElCnG,EAAO1hB,EAAQ0hB,MAAQ,IACvBiL,EAAmB3sB,EAAQ2sB,mBAAoB,EAC/CjN,EAAQ1f,EAAQ0sB,UAClBs1B,GAAkBn6B,EAAO45B,EAAU//B,EAAMugC,EAAkBt1B,GAC3Di2B,GAAgB/6B,EAAO45B,EAAU//B,GAAM,EAAOugC,EAAkBt1B,GAC9Dd,EAAW,GAEjB,OAAKnM,EAAM9mB,QAIXivB,EAAM65B,+BAA+BziC,QAAS+B,IAC5C,MAAMpwB,EAAQ8uB,EAAM,GAAG9uB,MACjB0sC,EAAUtc,EAAKpvB,KAAKhB,GAGtB0sC,IAAYA,EAAQpD,MACtBrO,EAAS3S,KAAK,CAACokB,UAAS3lB,aAAcqJ,EAAKpwB,MAAOA,YAI/Ci7B,GAbE,EAcX,EAYApK,OAAAA,CAAQoG,EAAO5iB,EAAGjF,EAASiiD,GACzB,MAAMR,EAAW/iB,GAAoBz5B,EAAG4iB,GAClCnG,EAAO1hB,EAAQ0hB,MAAQ,KACvBiL,EAAmB3sB,EAAQ2sB,mBAAoB,EACrD,IAAIjN,EAAQ1f,EAAQ0sB,UAChBs1B,GAAkBn6B,EAAO45B,EAAU//B,EAAMugC,EAAkBt1B,GAC7Di2B,GAAgB/6B,EAAO45B,EAAU//B,GAAM,EAAOugC,EAAkBt1B,GAElE,GAAIjN,EAAM9mB,OAAS,EAAG,CACpB,MAAM+e,EAAe+H,EAAM,GAAG/H,aACxB/lB,EAAOi2B,EAAM8nB,eAAeh4B,GAAc/lB,KAChD8tB,EAAQ,GACR,IAAK,IAAIhZ,EAAI,EAAGA,EAAI9U,EAAKgH,SAAU8N,EACjCgZ,EAAMxG,KAAK,CAACokB,QAAS1rC,EAAK8U,GAAIiR,eAAc/mB,MAAO8V,G,CAIvD,OAAOgZ,CACT,EAYAuC,KAAAA,CAAM4F,EAAO5iB,EAAGjF,EAASiiD,GACvB,MAAMR,EAAW/iB,GAAoBz5B,EAAG4iB,GAClCnG,EAAO1hB,EAAQ0hB,MAAQ,KACvBiL,EAAmB3sB,EAAQ2sB,mBAAoB,EACrD,OAAOq1B,GAAkBn6B,EAAO45B,EAAU//B,EAAMugC,EAAkBt1B,EACpE,EAWAu2B,OAAAA,CAAQr7B,EAAO5iB,EAAGjF,EAASiiD,GACzB,MAAMR,EAAW/iB,GAAoBz5B,EAAG4iB,GAClCnG,EAAO1hB,EAAQ0hB,MAAQ,KACvBiL,EAAmB3sB,EAAQ2sB,mBAAoB,EACrD,OAAOi2B,GAAgB/6B,EAAO45B,EAAU//B,EAAM1hB,EAAQ0sB,UAAWu1B,EAAkBt1B,EACrF,EAWA/kB,CAAAA,CAAEigB,EAAO5iB,EAAGjF,EAASiiD,GACnB,MAAMR,EAAW/iB,GAAoBz5B,EAAG4iB,GACxC,OAAOg7B,GAAah7B,EAAO45B,EAAU,IAAKzhD,EAAQ0sB,UAAWu1B,EAC/D,EAWAppC,CAAAA,CAAEgP,EAAO5iB,EAAGjF,EAASiiD,GACnB,MAAMR,EAAW/iB,GAAoBz5B,EAAG4iB,GACxC,OAAOg7B,GAAah7B,EAAO45B,EAAU,IAAKzhD,EAAQ0sB,UAAWu1B,EAC/D,ICzXJ,MAAMkB,GAAmB,CAAC,OAAQ,MAAO,QAAS,UAElD,SAASC,GAAiBtnC,EAAO2lC,GAC/B,OAAO3lC,EAAMmd,OAAOr1B,GAAKA,EAAEm6B,MAAQ0jB,EACrC,CAEA,SAAS4B,GAA4BvnC,EAAO4F,GAC1C,OAAO5F,EAAMmd,OAAOr1B,IAA0C,IAArCu/C,GAAiBlrC,QAAQrU,EAAEm6B,MAAen6B,EAAE06B,IAAI5c,OAASA,EACpF,CAEA,SAAS4hC,GAAaxnC,EAAO1E,GAC3B,OAAO0E,EAAMV,KAAK,CAACvW,EAAGC,KACpB,MAAM2S,EAAKL,EAAUtS,EAAID,EACnB6S,EAAKN,EAAUvS,EAAIC,EACzB,OAAO2S,EAAG5C,SAAW6C,EAAG7C,OACtB4C,EAAG7mB,MAAQ8mB,EAAG9mB,MACd6mB,EAAG5C,OAAS6C,EAAG7C,QAErB,CAEA,SAAS0uC,GAAUC,GACjB,MAAMC,EAAc,GACpB,IAAI/8C,EAAG8Q,EAAM8mB,EAAKP,EAAKyM,EAAOkZ,EAE9B,IAAKh9C,EAAI,EAAG8Q,GAAQgsC,GAAS,IAAI5qD,OAAQ8N,EAAI8Q,IAAQ9Q,EACnD43B,EAAMklB,EAAM98C,KACV+6C,SAAU1jB,EAAK/9B,SAAUwqC,QAAOkZ,cAAc,IAAMplB,GACtDmlB,EAAYvqC,KAAK,CACftoB,MAAO8V,EACP43B,MACAP,MACAiZ,WAAY1Y,EAAIwY,eAChBjiC,OAAQypB,EAAIzpB,OACZ21B,MAAOA,GAAUzM,EAAMyM,EACvBkZ,gBAGJ,OAAOD,CACT,CAEA,SAASE,GAAYC,GACnB,MAAMpY,EAAS,CAAC,EAChB,IAAK,MAAMqY,KAAQD,EAAS,CAC1B,MAAM,MAACpZ,EAAK,IAAEzM,EAAA,YAAK2lB,GAAeG,EAClC,IAAKrZ,IAAU2Y,GAAiB16B,SAASsV,GACvC,SAEF,MAAMnG,EAAS4T,EAAOhB,KAAWgB,EAAOhB,GAAS,CAACjqC,MAAO,EAAGujD,OAAQ,EAAGjvC,OAAQ,EAAGtV,KAAM,IACxFq4B,EAAOr3B,QACPq3B,EAAO/iB,QAAU6uC,CACnB,CACA,OAAOlY,CACT,CAKA,SAASuY,GAAcH,EAASI,GAC9B,MAAMxY,EAASmY,GAAYC,IACrB,aAACK,EAAA,cAAcC,GAAiBF,EACtC,IAAIt9C,EAAG8Q,EAAM2sC,EACb,IAAKz9C,EAAI,EAAG8Q,EAAOosC,EAAQhrD,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CAChDy9C,EAASP,EAAQl9C,GACjB,MAAM,SAAC09C,GAAYD,EAAO7lB,IACpBkM,EAAQgB,EAAO2Y,EAAO3Z,OACtBhD,EAASgD,GAAS2Z,EAAOT,YAAclZ,EAAM31B,OAC/CsvC,EAAOnN,YACTmN,EAAOhyD,MAAQq1C,EAASA,EAASyc,EAAeG,GAAYJ,EAAOK,eACnEF,EAAO10B,OAASy0B,IAEhBC,EAAOhyD,MAAQ8xD,EACfE,EAAO10B,OAAS+X,EAASA,EAAS0c,EAAgBE,GAAYJ,EAAOM,gBAEzE,CACA,OAAO9Y,CACT,CAEA,SAAS+Y,GAAiBf,GACxB,MAAMC,EAAcF,GAAUC,GACxBY,EAAWd,GAAaG,EAAYxqB,OAAO4qB,GAAQA,EAAKvlB,IAAI8lB,WAAW,GACvEzjC,EAAO2iC,GAAaF,GAAiBK,EAAa,SAAS,GAC3D7iC,EAAQ0iC,GAAaF,GAAiBK,EAAa,UACnDh9B,EAAM68B,GAAaF,GAAiBK,EAAa,QAAQ,GACzD/8B,EAAS48B,GAAaF,GAAiBK,EAAa,WACpDe,EAAmBnB,GAA4BI,EAAa,KAC5DgB,EAAiBpB,GAA4BI,EAAa,KAEhE,MAAO,CACLW,WACAM,WAAY/jC,EAAKq0B,OAAOvuB,GACxBk+B,eAAgB/jC,EAAMo0B,OAAOyP,GAAgBzP,OAAOtuB,GAAQsuB,OAAOwP,GACnEtf,UAAWke,GAAiBK,EAAa,aACzCmB,SAAUjkC,EAAKq0B,OAAOp0B,GAAOo0B,OAAOyP,GACpCzN,WAAYvwB,EAAIuuB,OAAOtuB,GAAQsuB,OAAOwP,GAE1C,CAEA,SAASK,GAAeC,EAAY5f,EAAWrgC,EAAGC,GAChD,OAAO3D,KAAK6C,IAAI8gD,EAAWjgD,GAAIqgC,EAAUrgC,IAAM1D,KAAK6C,IAAI8gD,EAAWhgD,GAAIogC,EAAUpgC,GACnF,CAEA,SAASigD,GAAiBD,EAAYE,GACpCF,EAAWr+B,IAAMtlB,KAAK6C,IAAI8gD,EAAWr+B,IAAKu+B,EAAWv+B,KACrDq+B,EAAWnkC,KAAOxf,KAAK6C,IAAI8gD,EAAWnkC,KAAMqkC,EAAWrkC,MACvDmkC,EAAWp+B,OAASvlB,KAAK6C,IAAI8gD,EAAWp+B,OAAQs+B,EAAWt+B,QAC3Do+B,EAAWlkC,MAAQzf,KAAK6C,IAAI8gD,EAAWlkC,MAAOokC,EAAWpkC,MAC3D,CAEA,SAASqkC,GAAW/f,EAAW8e,EAAQG,EAAQ3Y,GAC7C,MAAM,IAACzN,EAAA,IAAKO,GAAO6lB,EACbW,EAAa5f,EAAU4f,WAG7B,IAAK3uC,GAAS4nB,GAAM,CACdomB,EAAO5kD,OAET2lC,EAAUnH,IAAQomB,EAAO5kD,MAE3B,MAAMirC,EAAQgB,EAAO2Y,EAAO3Z,QAAU,CAACjrC,KAAM,EAAGgB,MAAO,GACvDiqC,EAAMjrC,KAAO4B,KAAK6C,IAAIwmC,EAAMjrC,KAAM4kD,EAAOnN,WAAa1Y,EAAI7O,OAAS6O,EAAInsC,OACvEgyD,EAAO5kD,KAAOirC,EAAMjrC,KAAOirC,EAAMjqC,MACjC2kC,EAAUnH,IAAQomB,EAAO5kD,I,CAGvB++B,EAAI4mB,YACNH,GAAiBD,EAAYxmB,EAAI4mB,cAGnC,MAAMC,EAAWhkD,KAAK6C,IAAI,EAAGggD,EAAOoB,WAAaP,GAAeC,EAAY5f,EAAW,OAAQ,UACzFmgB,EAAYlkD,KAAK6C,IAAI,EAAGggD,EAAOsB,YAAcT,GAAeC,EAAY5f,EAAW,MAAO,WAC1FqgB,EAAeJ,IAAajgB,EAAU1+B,EACtCg/C,EAAgBH,IAAcngB,EAAUnhC,EAK9C,OAJAmhC,EAAU1+B,EAAI2+C,EACdjgB,EAAUnhC,EAAIshD,EAGPlB,EAAOnN,WACV,CAACyO,KAAMF,EAAcG,MAAOF,GAC5B,CAACC,KAAMD,EAAeE,MAAOH,EACnC,CAEA,SAASI,GAAiBzgB,GACxB,MAAM4f,EAAa5f,EAAU4f,WAE7B,SAASc,EAAU7nB,GACjB,MAAMtI,EAASt0B,KAAK6C,IAAI8gD,EAAW/mB,GAAOmH,EAAUnH,GAAM,GAE1D,OADAmH,EAAUnH,IAAQtI,EACXA,CACT,CACAyP,EAAUrsB,GAAK+sC,EAAU,OACzB1gB,EAAUt9B,GAAKg+C,EAAU,QACzBA,EAAU,SACVA,EAAU,SACZ,CAEA,SAASC,GAAW7O,EAAY9R,GAC9B,MAAM4f,EAAa5f,EAAU4f,WAE7B,SAASgB,EAAmBnoB,GAC1B,MAAMvM,EAAS,CAACzQ,KAAM,EAAG8F,IAAK,EAAG7F,MAAO,EAAG8F,OAAQ,GAInD,OAHAiX,EAAU1e,QAAS8e,IACjB3M,EAAO2M,GAAO58B,KAAK6C,IAAIkhC,EAAUnH,GAAM+mB,EAAW/mB,MAE7C3M,CACT,CAEA,OACI00B,EADG9O,EACgB,CAAC,OAAQ,SACT,CAAC,MAAO,UACjC,CAEA,SAAS+O,GAASvC,EAAOte,EAAW8e,EAAQxY,GAC1C,MAAMwa,EAAa,GACnB,IAAIt/C,EAAG8Q,EAAM2sC,EAAQ7lB,EAAK2nB,EAAOrjC,EAEjC,IAAKlc,EAAI,EAAG8Q,EAAOgsC,EAAM5qD,OAAQqtD,EAAQ,EAAGv/C,EAAI8Q,IAAQ9Q,EAAG,CACzDy9C,EAASX,EAAM98C,GACf43B,EAAM6lB,EAAO7lB,IAEbA,EAAIgK,OACF6b,EAAOhyD,OAAS+yC,EAAU1+B,EAC1B29C,EAAO10B,QAAUyV,EAAUnhC,EAC3B8hD,GAAW1B,EAAOnN,WAAY9R,IAEhC,MAAM,KAACugB,EAAA,MAAMC,GAAST,GAAW/f,EAAW8e,EAAQG,EAAQ3Y,GAI5Dya,GAASR,GAAQO,EAAWptD,OAG5BgqB,EAAUA,GAAW8iC,EAEhBpnB,EAAI8lB,UACP4B,EAAW9sC,KAAKirC,EAEpB,CAEA,OAAO8B,GAASF,GAASC,EAAY9gB,EAAW8e,EAAQxY,IAAW5oB,CACrE,CAEA,SAASsjC,GAAW5nB,EAAK3d,EAAM8F,EAAKt0B,EAAOs9B,GACzC6O,EAAI7X,IAAMA,EACV6X,EAAI3d,KAAOA,EACX2d,EAAI1d,MAAQD,EAAOxuB,EACnBmsC,EAAI5X,OAASD,EAAMgJ,EACnB6O,EAAInsC,MAAQA,EACZmsC,EAAI7O,OAASA,CACf,CAEA,SAAS02B,GAAW3C,EAAOte,EAAW8e,EAAQxY,GAC5C,MAAM4a,EAAcpC,EAAOx9B,QAC3B,IAAI,EAAC5e,EAAA,EAAGiR,GAAKqsB,EAEb,IAAK,MAAMif,KAAUX,EAAO,CAC1B,MAAMllB,EAAM6lB,EAAO7lB,IACbkM,EAAQgB,EAAO2Y,EAAO3Z,QAAU,CAACjqC,MAAO,EAAGujD,OAAQ,EAAGjvC,OAAQ,GAC9DA,EAASsvC,EAAQT,YAAclZ,EAAM31B,QAAW,EACtD,GAAIsvC,EAAOnN,WAAY,CACrB,MAAM7kD,EAAQ+yC,EAAU1+B,EAAIqO,EACtB4a,EAAS+a,EAAMjrC,MAAQ++B,EAAI7O,OAC7BjW,GAAQgxB,EAAMhyC,SAChBqgB,EAAI2xB,EAAMhyC,OAER8lC,EAAI8lB,SACN8B,GAAW5nB,EAAK8nB,EAAYzlC,KAAM9H,EAAGmrC,EAAOoB,WAAagB,EAAYxlC,MAAQwlC,EAAYzlC,KAAM8O,GAE/Fy2B,GAAW5nB,EAAK4G,EAAUvkB,KAAO6pB,EAAMsZ,OAAQjrC,EAAG1mB,EAAOs9B,GAE3D+a,EAAMhyC,MAAQqgB,EACd2xB,EAAMsZ,QAAU3xD,EAChB0mB,EAAIylB,EAAI5X,M,KACH,CACL,MAAM+I,EAASyV,EAAUnhC,EAAI8Q,EACvB1iB,EAAQq4C,EAAMjrC,MAAQ++B,EAAInsC,MAC5BqnB,GAAQgxB,EAAMhyC,SAChBoP,EAAI4iC,EAAMhyC,OAER8lC,EAAI8lB,SACN8B,GAAW5nB,EAAK12B,EAAGw+C,EAAY3/B,IAAKt0B,EAAO6xD,EAAOsB,YAAcc,EAAY1/B,OAAS0/B,EAAY3/B,KAEjGy/B,GAAW5nB,EAAK12B,EAAGs9B,EAAUze,IAAM+jB,EAAMsZ,OAAQ3xD,EAAOs9B,GAE1D+a,EAAMhyC,MAAQoP,EACd4iC,EAAMsZ,QAAUr0B,EAChB7nB,EAAI02B,EAAI1d,K,CAEZ,CAEAskB,EAAUt9B,EAAIA,EACds9B,EAAUrsB,EAAIA,CAChB,CAwBA,IAAA+qC,GAAe,CAQbyC,MAAAA,CAAOx+B,EAAOn3B,GACPm3B,EAAM27B,QACT37B,EAAM27B,MAAQ,IAIhB9yD,EAAK0zD,SAAW1zD,EAAK0zD,WAAY,EACjC1zD,EAAK+wD,SAAW/wD,EAAK+wD,UAAY,MACjC/wD,EAAKmkB,OAASnkB,EAAKmkB,QAAU,EAE7BnkB,EAAK41D,QAAU51D,EAAK41D,SAAW,WAC7B,MAAO,CAAC,CACNC,EAAG,EACHhgB,IAAAA,CAAKrB,GACHx0C,EAAK61C,KAAKrB,EACZ,GAEJ,EAEArd,EAAM27B,MAAMtqC,KAAKxoB,EACnB,EAOA81D,SAAAA,CAAU3+B,EAAO4+B,GACf,MAAM71D,EAAQi3B,EAAM27B,MAAQ37B,EAAM27B,MAAMvrC,QAAQwuC,IAAe,GAChD,IAAX71D,GACFi3B,EAAM27B,MAAMhkC,OAAO5uB,EAAO,EAE9B,EAQAo4C,SAAAA,CAAUnhB,EAAOn3B,EAAMsP,GACrBtP,EAAK0zD,SAAWpkD,EAAQokD,SACxB1zD,EAAK+wD,SAAWzhD,EAAQyhD,SACxB/wD,EAAKmkB,OAAS7U,EAAQ6U,MACxB,EAUAyzB,MAAAA,CAAOzgB,EAAO11B,EAAOs9B,EAAQi3B,GAC3B,IAAK7+B,EACH,OAGF,MAAMrB,EAAUsO,GAAUjN,EAAM7nB,QAAQmkD,OAAO39B,SACzC69B,EAAiBljD,KAAK6C,IAAI7R,EAAQq0B,EAAQr0B,MAAO,GACjDmyD,EAAkBnjD,KAAK6C,IAAIyrB,EAASjJ,EAAQiJ,OAAQ,GACpD+zB,EAAQe,GAAiB18B,EAAM27B,OAC/BmD,EAAgBnD,EAAMoB,SACtBgC,EAAkBpD,EAAMxM,WAI9B9/B,GAAK2Q,EAAM27B,MAAOllB,IACgB,oBAArBA,EAAIuoB,cACbvoB,EAAIuoB,iBA+BR,MAAMC,EAA0BH,EAAc1f,OAAO,CAACzlC,EAAOqiD,IAC3DA,EAAKvlB,IAAIt+B,UAAwC,IAA7B6jD,EAAKvlB,IAAIt+B,QAAQ4oB,QAAoBpnB,EAAQA,EAAQ,EAAG,IAAM,EAE9EwiD,EAAS9jD,OAAOwyC,OAAO,CAC3B0S,WAAYjzD,EACZmzD,YAAa71B,EACbjJ,UACA69B,iBACAC,kBACAL,aAAcI,EAAiB,EAAIyC,EACnC5C,cAAeI,EAAkB,IAE7BQ,EAAa5kD,OAAO8T,OAAO,CAAC,EAAGwS,GACrCu+B,GAAiBD,EAAYhwB,GAAU4xB,IACvC,MAAMxhB,EAAYhlC,OAAO8T,OAAO,CAC9B8wC,aACAt+C,EAAG69C,EACHtgD,EAAGugD,EACH18C,EAAG4e,EAAQ7F,KACX9H,EAAG2N,EAAQC,KACVD,GAEGglB,EAASuY,GAAc4C,EAAc3R,OAAO4R,GAAkB5C,GAGpE+B,GAASvC,EAAMY,SAAUlf,EAAW8e,EAAQxY,GAG5Cua,GAASY,EAAezhB,EAAW8e,EAAQxY,GAGvCua,GAASa,EAAiB1hB,EAAW8e,EAAQxY,IAE/Cua,GAASY,EAAezhB,EAAW8e,EAAQxY,GAG7Cma,GAAiBzgB,GAGjBihB,GAAW3C,EAAMkB,WAAYxf,EAAW8e,EAAQxY,GAGhDtG,EAAUt9B,GAAKs9B,EAAU1+B,EACzB0+B,EAAUrsB,GAAKqsB,EAAUnhC,EAEzBoiD,GAAW3C,EAAMmB,eAAgBzf,EAAW8e,EAAQxY,GAEpD3jB,EAAMqd,UAAY,CAChBvkB,KAAMukB,EAAUvkB,KAChB8F,IAAKye,EAAUze,IACf7F,MAAOskB,EAAUvkB,KAAOukB,EAAU1+B,EAClCkgB,OAAQwe,EAAUze,IAAMye,EAAUnhC,EAClC0rB,OAAQyV,EAAUnhC,EAClB5R,MAAO+yC,EAAU1+B,GAInB0Q,GAAKssC,EAAMte,UAAYif,IACrB,MAAM7lB,EAAM6lB,EAAO7lB,IACnBp+B,OAAO8T,OAAOsqB,EAAKzW,EAAMqd,WACzB5G,EAAIgK,OAAOpD,EAAU1+B,EAAG0+B,EAAUnhC,EAAG,CAAC4c,KAAM,EAAG8F,IAAK,EAAG7F,MAAO,EAAG8F,OAAQ,KAE7E,GC7ba,MAAMqgC,GAOnBC,cAAAA,CAAe33B,EAAQuQ,GAAc,CAQrCqnB,cAAAA,CAAev7B,GACb,OAAO,CACT,CASAh4B,gBAAAA,CAAiBm0B,EAAOr2B,EAAMmtB,GAAW,CAQzC/qB,mBAAAA,CAAoBi0B,EAAOr2B,EAAMmtB,GAAW,CAK5CiN,mBAAAA,GACE,OAAO,CACT,CASA6T,cAAAA,CAAenC,EAASnrC,EAAOs9B,EAAQmQ,GAGrC,OAFAztC,EAAQgP,KAAK6C,IAAI,EAAG7R,GAASmrC,EAAQnrC,OACrCs9B,EAASA,GAAU6N,EAAQ7N,OACpB,CACLt9B,QACAs9B,OAAQtuB,KAAK6C,IAAI,EAAG47B,EAAcz+B,KAAK2Z,MAAM3oB,EAAQytC,GAAenQ,GAExE,CAMAy3B,UAAAA,CAAW73B,GACT,OAAO,CACT,CAMA83B,YAAAA,CAAare,GAEb,ECrEa,MAAMse,WAAsBL,GACzCC,cAAAA,CAAet2D,GAIb,OAAOA,GAAQA,EAAK4+B,YAAc5+B,EAAK4+B,WAAW,OAAS,IAC7D,CACA63B,YAAAA,CAAare,GACXA,EAAO9oC,QAAQgmB,WAAY,CAC7B,ECRF,MAAMqhC,GAAc,WAOdC,GAAc,CAClBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,YAGRC,GAAgBhxD,GAAmB,OAAVA,GAA4B,KAAVA,EAQjD,SAASixD,GAAW54B,EAAQuQ,GAC1B,MAAMrvC,EAAQ8+B,EAAO9+B,MAIf23D,EAAe74B,EAAO84B,aAAa,UACnCC,EAAc/4B,EAAO84B,aAAa,SAsBxC,GAnBA94B,EAAOg4B,IAAe,CACpBrhB,QAAS,CACPvW,OAAQy4B,EACR/1D,MAAOi2D,EACP73D,MAAO,CACLq4B,QAASr4B,EAAMq4B,QACf6G,OAAQl/B,EAAMk/B,OACdt9B,MAAO5B,EAAM4B,SAQnB5B,EAAMq4B,QAAUr4B,EAAMq4B,SAAW,QAEjCr4B,EAAMsuC,UAAYtuC,EAAMsuC,WAAa,aAEjCmpB,GAAcI,GAAc,CAC9B,MAAMC,EAAe3nB,GAAarR,EAAQ,cACrBrpB,IAAjBqiD,IACFh5B,EAAOl9B,MAAQk2D,E,CAInB,GAAIL,GAAcE,GAChB,GAA4B,KAAxB74B,EAAO9+B,MAAMk/B,OAIfJ,EAAOI,OAASJ,EAAOl9B,OAASytC,GAAe,OAC1C,CACL,MAAM0oB,EAAgB5nB,GAAarR,EAAQ,eACrBrpB,IAAlBsiD,IACFj5B,EAAOI,OAAS64B,E,CAKtB,OAAOj5B,CACT,CAIA,MAAMk5B,KAAuBhoB,IAA+B,CAACE,SAAS,GAEtE,SAAS+nB,GAAYx9B,EAAMx5B,EAAMmtB,GAC3BqM,GACFA,EAAKt3B,iBAAiBlC,EAAMmtB,EAAU4pC,GAE1C,CAEA,SAASE,GAAe5gC,EAAOr2B,EAAMmtB,GAC/BkJ,GAASA,EAAMwH,QACjBxH,EAAMwH,OAAOz7B,oBAAoBpC,EAAMmtB,EAAU4pC,GAErD,CAEA,SAASG,GAAgB/pB,EAAO9W,GAC9B,MAAMr2B,EAAO81D,GAAY3oB,EAAMntC,OAASmtC,EAAMntC,MACxC,EAACoW,EAAC,EAAEiR,GAAK6lB,GAAoBC,EAAO9W,GAC1C,MAAO,CACLr2B,OACAq2B,QACA8gC,OAAQhqB,EACR/2B,OAAS5B,IAAN4B,EAAkBA,EAAI,KACzBiR,OAAS7S,IAAN6S,EAAkBA,EAAI,KAE7B,CAEA,SAAS+vC,GAAiBC,EAAUx5B,GAClC,IAAK,MAAMrE,KAAQ69B,EACjB,GAAI79B,IAASqE,GAAUrE,EAAK73B,SAASk8B,GACnC,OAAO,CAGb,CAEA,SAASy5B,GAAqBjhC,EAAOr2B,EAAMmtB,GACzC,MAAM0Q,EAASxH,EAAMwH,OACf05B,EAAW,IAAIC,iBAAiBC,IACpC,IAAIC,GAAU,EACd,IAAK,MAAMhT,KAAS+S,EAClBC,EAAUA,GAAWN,GAAiB1S,EAAMiT,WAAY95B,GACxD65B,EAAUA,IAAYN,GAAiB1S,EAAMkT,aAAc/5B,GAEzD65B,GACFvqC,MAIJ,OADAoqC,EAASM,QAAQzsB,SAAU,CAAC0sB,WAAW,EAAMC,SAAS,IAC/CR,CACT,CAEA,SAASS,GAAqB3hC,EAAOr2B,EAAMmtB,GACzC,MAAM0Q,EAASxH,EAAMwH,OACf05B,EAAW,IAAIC,iBAAiBC,IACpC,IAAIC,GAAU,EACd,IAAK,MAAMhT,KAAS+S,EAClBC,EAAUA,GAAWN,GAAiB1S,EAAMkT,aAAc/5B,GAC1D65B,EAAUA,IAAYN,GAAiB1S,EAAMiT,WAAY95B,GAEvD65B,GACFvqC,MAIJ,OADAoqC,EAASM,QAAQzsB,SAAU,CAAC0sB,WAAW,EAAMC,SAAS,IAC/CR,CACT,CAEA,MAAMU,GAAqB,IAAI7iC,IAC/B,IAAI8iC,GAAsB,EAE1B,SAASC,KACP,MAAMC,EAAM53D,OAAOy5B,iBACfm+B,IAAQF,KAGZA,GAAsBE,EACtBH,GAAmBxqC,QAAQ,CAACgH,EAAQ4B,KAC9BA,EAAMqH,0BAA4B06B,GACpC3jC,MAGN,CAEA,SAAS4jC,GAA8BhiC,EAAO5B,GACvCwjC,GAAmBlqD,MACtBvN,OAAO0B,iBAAiB,SAAUi2D,IAEpCF,GAAmB9pC,IAAIkI,EAAO5B,EAChC,CAEA,SAAS6jC,GAAgCjiC,GACvC4hC,GAAmB3wB,OAAOjR,GACrB4hC,GAAmBlqD,MACtBvN,OAAO4B,oBAAoB,SAAU+1D,GAEzC,CAEA,SAASI,GAAqBliC,EAAOr2B,EAAMmtB,GACzC,MAAM0Q,EAASxH,EAAMwH,OACf6P,EAAY7P,GAAUwN,GAAexN,GAC3C,IAAK6P,EACH,OAEF,MAAMjZ,EAASlG,GAAU,CAAC5tB,EAAOs9B,KAC/B,MAAMjpB,EAAI04B,EAAUI,YACpB3gB,EAASxsB,EAAOs9B,GACZjpB,EAAI04B,EAAUI,aAQhB3gB,KAED3sB,QAGG+2D,EAAW,IAAIiB,eAAef,IAClC,MAAM/S,EAAQ+S,EAAQ,GAChB92D,EAAQ+jD,EAAM+T,YAAY93D,MAC1Bs9B,EAASymB,EAAM+T,YAAYx6B,OAInB,IAAVt9B,GAA0B,IAAXs9B,GAGnBxJ,EAAO9zB,EAAOs9B,KAKhB,OAHAs5B,EAASM,QAAQnqB,GACjB2qB,GAA8BhiC,EAAO5B,GAE9B8iC,CACT,CAEA,SAASmB,GAAgBriC,EAAOr2B,EAAMu3D,GAChCA,GACFA,EAASoB,aAEE,WAAT34D,GACFs4D,GAAgCjiC,EAEpC,CAEA,SAASuiC,GAAqBviC,EAAOr2B,EAAMmtB,GACzC,MAAM0Q,EAASxH,EAAMwH,OACfiI,EAAQvX,GAAW4e,IAIL,OAAd9W,EAAMuE,KACRzN,EAAS+pC,GAAgB/pB,EAAO9W,KAEjCA,GAIH,OAFA2gC,GAAYn5B,EAAQ79B,EAAM8lC,GAEnBA,CACT,CAMe,MAAM+yB,WAAoBtD,GAOvCC,cAAAA,CAAe33B,EAAQuQ,GAIrB,MAAMlU,EAAU2D,GAAUA,EAAOC,YAAcD,EAAOC,WAAW,MASjE,OAAI5D,GAAWA,EAAQ2D,SAAWA,GAGhC44B,GAAW54B,EAAQuQ,GACZlU,GAGF,IACT,CAKAu7B,cAAAA,CAAev7B,GACb,MAAM2D,EAAS3D,EAAQ2D,OACvB,IAAKA,EAAOg4B,IACV,OAAO,EAGT,MAAMrhB,EAAU3W,EAAOg4B,IAAarhB,QACpC,CAAC,SAAU,SAAS/mB,QAAS0V,IAC3B,MAAM39B,EAAQgvC,EAAQrR,GAClB7e,GAAc9e,GAChBq4B,EAAOi7B,gBAAgB31B,GAEvBtF,EAAOk7B,aAAa51B,EAAM39B,KAI9B,MAAMzG,EAAQy1C,EAAQz1C,OAAS,CAAC,EAahC,OAZA2P,OAAOC,KAAK5P,GAAO0uB,QAAStuB,IAC1B0+B,EAAO9+B,MAAMI,GAAOJ,EAAMI,KAQ5B0+B,EAAOl9B,MAAQk9B,EAAOl9B,aAEfk9B,EAAOg4B,KACP,CACT,CAQA3zD,gBAAAA,CAAiBm0B,EAAOr2B,EAAMmtB,GAE5BzsB,KAAK0B,oBAAoBi0B,EAAOr2B,GAEhC,MAAMg5D,EAAU3iC,EAAM4iC,WAAa5iC,EAAM4iC,SAAW,CAAC,GAC/CC,EAAW,CACfC,OAAQ7B,GACR8B,OAAQpB,GACRvjC,OAAQ8jC,IAEJhxD,EAAU2xD,EAASl5D,IAAS44D,GAClCI,EAAQh5D,GAAQuH,EAAQ8uB,EAAOr2B,EAAMmtB,EACvC,CAOA/qB,mBAAAA,CAAoBi0B,EAAOr2B,GACzB,MAAMg5D,EAAU3iC,EAAM4iC,WAAa5iC,EAAM4iC,SAAW,CAAC,GAC/CnzB,EAAQkzB,EAAQh5D,GAEtB,IAAK8lC,EACH,OAGF,MAAMozB,EAAW,CACfC,OAAQT,GACRU,OAAQV,GACRjkC,OAAQikC,IAEJnxD,EAAU2xD,EAASl5D,IAASi3D,GAClC1vD,EAAQ8uB,EAAOr2B,EAAM8lC,GACrBkzB,EAAQh5D,QAAQwU,CAClB,CAEA4lB,mBAAAA,GACE,OAAO55B,OAAOy5B,gBAChB,CAQAgU,cAAAA,CAAepQ,EAAQl9B,EAAOs9B,EAAQmQ,GACpC,OAAOH,GAAepQ,EAAQl9B,EAAOs9B,EAAQmQ,EAC/C,CAKAsnB,UAAAA,CAAW73B,GACT,MAAM6P,EAAY7P,GAAUwN,GAAexN,GAC3C,SAAU6P,IAAaA,EAAU2rB,YACnC,EC9XK,SAASC,GAAgBz7B,GAC9B,OAAKsN,MAAiD,qBAApBouB,iBAAmC17B,aAAkB07B,gBAC9E3D,GAEFiD,EACT,CCLe,MAAMW,GAAA12C,WAAAA,IAAAsjC,EAAAA,GAAAA,GAAA,kBAAAA,EAAAA,GAAAA,GAAA,kBAAAA,EAAAA,GAAAA,GAAA,eAOV,IAAKA,EAAAA,GAAAA,GAAA,wBAAAA,EAAAA,GAAAA,GAAA,2BAIdqT,eAAAA,CAAgBhJ,GACd,MAAM,EAACr6C,EAAA,EAAGiR,GAAK3mB,KAAKowD,SAAS,CAAC,IAAK,KAAML,GACzC,MAAO,CAACr6C,IAAGiR,IACb,CAEAqyC,QAAAA,GACE,OAAOzvC,GAASvpB,KAAK0V,IAAM6T,GAASvpB,KAAK2mB,EAC3C,CASAypC,QAAAA,CAAS/wD,EAAiB45D,GACxB,MAAMtlB,EAAQ3zC,KAAKy3C,YACnB,IAAKwhB,IAAUtlB,EAEb,OAAO3zC,KAET,MAAM0T,EAA+B,CAAC,EAItC,OAHArU,EAAM0tB,QAAS0V,IACb/uB,EAAI+uB,GAAQkR,EAAMlR,IAASkR,EAAMlR,GAAM5O,SAAW8f,EAAMlR,GAAMyT,IAAMl2C,KAAKyiC,KAEpE/uB,CACT,EC3BK,SAASskB,GAAS+C,EAAOrF,GAC9B,MAAMwjC,EAAWn+B,EAAMjtB,QAAQ4nB,MACzByjC,EAAqBC,GAAkBr+B,GACvCs+B,EAAapqD,KAAK8C,IAAImnD,EAASI,eAAiBH,EAAoBA,GACpEI,EAAeL,EAAS9gC,MAAMohC,QAAUC,GAAgB/jC,GAAS,GACjEgkC,EAAkBH,EAAa7yD,OAC/BizD,EAAQJ,EAAa,GACrBrtC,EAAOqtC,EAAaG,EAAkB,GACtCE,EAAW,GAGjB,GAAIF,EAAkBL,EAEpB,OADAQ,GAAWnkC,EAAOkkC,EAAUL,EAAcG,EAAkBL,GACrDO,EAGT,MAAMzP,EAAU2P,GAAiBP,EAAc7jC,EAAO2jC,GAEtD,GAAIK,EAAkB,EAAG,CACvB,IAAIllD,EAAG8Q,EACP,MAAMy0C,EAAkBL,EAAkB,EAAIzqD,KAAKC,OAAOgd,EAAOytC,IAAUD,EAAkB,IAAM,KAEnG,IADA1xB,GAAKtS,EAAOkkC,EAAUzP,EAASvmC,GAAcm2C,GAAmB,EAAIJ,EAAQI,EAAiBJ,GACxFnlD,EAAI,EAAG8Q,EAAOo0C,EAAkB,EAAGllD,EAAI8Q,EAAM9Q,IAChDwzB,GAAKtS,EAAOkkC,EAAUzP,EAASoP,EAAa/kD,GAAI+kD,EAAa/kD,EAAI,IAGnE,OADAwzB,GAAKtS,EAAOkkC,EAAUzP,EAASj+B,EAAMtI,GAAcm2C,GAAmBrkC,EAAMhvB,OAASwlB,EAAO6tC,GACrFH,C,CAGT,OADA5xB,GAAKtS,EAAOkkC,EAAUzP,GACfyP,CACT,CAEA,SAASR,GAAkBr+B,GACzB,MAAMpE,EAASoE,EAAMjtB,QAAQ6oB,OACvBS,EAAa2D,EAAMi/B,YACnBC,EAAWl/B,EAAMkoB,QAAU7rB,GAAcT,EAAS,EAAI,GACtDujC,EAAWn/B,EAAMo/B,WAAa/iC,EACpC,OAAOnoB,KAAK2Z,MAAM3Z,KAAK8C,IAAIkoD,EAAUC,GACvC,CAOA,SAASJ,GAAiBP,EAAc7jC,EAAO2jC,GAC7C,MAAMe,EAAmBC,GAAed,GAClCpP,EAAUz0B,EAAMhvB,OAAS2yD,EAI/B,IAAKe,EACH,OAAOnrD,KAAK6C,IAAIq4C,EAAS,GAG3B,MAAMmQ,EAAUvxC,GAAWqxC,GAC3B,IAAK,IAAI5lD,EAAI,EAAG8Q,EAAOg1C,EAAQ5zD,OAAS,EAAG8N,EAAI8Q,EAAM9Q,IAAK,CACxD,MAAM8gC,EAASglB,EAAQ9lD,GACvB,GAAI8gC,EAAS6U,EACX,OAAO7U,CAEX,CACA,OAAOrmC,KAAK6C,IAAIq4C,EAAS,EAC3B,CAKA,SAASsP,GAAgB/jC,GACvB,MAAM1M,EAAS,GACf,IAAIxU,EAAG8Q,EACP,IAAK9Q,EAAI,EAAG8Q,EAAOoQ,EAAMhvB,OAAQ8N,EAAI8Q,EAAM9Q,IACrCkhB,EAAMlhB,GAAG4jB,OACXpP,EAAOhC,KAAKxS,GAGhB,OAAOwU,CACT,CAQA,SAAS6wC,GAAWnkC,EAAOkkC,EAAUL,EAAcpP,GACjD,IAEI31C,EAFAnG,EAAQ,EACRi6B,EAAOixB,EAAa,GAIxB,IADApP,EAAUl7C,KAAKsrD,KAAKpQ,GACf31C,EAAI,EAAGA,EAAIkhB,EAAMhvB,OAAQ8N,IACxBA,IAAM8zB,IACRsxB,EAAS5yC,KAAK0O,EAAMlhB,IACpBnG,IACAi6B,EAAOixB,EAAalrD,EAAQ87C,GAGlC,CASA,SAASniB,GAAKtS,EAAOkkC,EAAUzP,EAASqQ,EAAYC,GAClD,MAAMn0D,EAAQge,GAAek2C,EAAY,GACnCtvC,EAAMjc,KAAK8C,IAAIuS,GAAem2C,EAAU/kC,EAAMhvB,QAASgvB,EAAMhvB,QACnE,IACIA,EAAQ8N,EAAG8zB,EADXj6B,EAAQ,EAGZ87C,EAAUl7C,KAAKsrD,KAAKpQ,GAChBsQ,IACF/zD,EAAS+zD,EAAWD,EACpBrQ,EAAUzjD,EAASuI,KAAK2Z,MAAMliB,EAASyjD,IAGzC7hB,EAAOhiC,EAEP,MAAOgiC,EAAO,EACZj6B,IACAi6B,EAAOr5B,KAAKC,MAAM5I,EAAQ+H,EAAQ87C,GAGpC,IAAK31C,EAAIvF,KAAK6C,IAAIxL,EAAO,GAAIkO,EAAI0W,EAAK1W,IAChCA,IAAM8zB,IACRsxB,EAAS5yC,KAAK0O,EAAMlhB,IACpBnG,IACAi6B,EAAOr5B,KAAKC,MAAM5I,EAAQ+H,EAAQ87C,GAGxC,CAMA,SAASkQ,GAAevzB,GACtB,MAAMnzB,EAAMmzB,EAAIpgC,OAChB,IAAI8N,EAAGo6C,EAEP,GAAIj7C,EAAM,EACR,OAAO,EAGT,IAAKi7C,EAAO9nB,EAAI,GAAItyB,EAAI,EAAGA,EAAIb,IAAOa,EACpC,GAAIsyB,EAAItyB,GAAKsyB,EAAItyB,EAAI,KAAOo6C,EAC1B,OAAO,EAGX,OAAOA,CACT,ED7HAlJ,EAAAA,GAAAA,GAvCqBoT,GAAA,WAED,CAAC,IAAEpT,EAAAA,GAAAA,GAFFoT,GAAA,qBAGIhlD,GEAzB,MAAM4mD,GAAgBpsC,GAAoB,SAAVA,EAAmB,QAAoB,UAAVA,EAAoB,OAASA,EACpFqsC,GAAiBA,CAAC5/B,EAAOiqB,EAAMruB,IAAoB,QAATquB,GAA2B,SAATA,EAAkBjqB,EAAMiqB,GAAQruB,EAASoE,EAAMiqB,GAAQruB,EACnHikC,GAAgBA,CAACC,EAAavB,IAAkBrqD,KAAK8C,IAAIunD,GAAiBuB,EAAaA,GAY7F,SAASC,GAAOh0B,EAAKi0B,GACnB,MAAM/xC,EAAS,GACTgyC,EAAYl0B,EAAIpgC,OAASq0D,EACzBpnD,EAAMmzB,EAAIpgC,OAChB,IAAI8N,EAAI,EAER,KAAOA,EAAIb,EAAKa,GAAKwmD,EACnBhyC,EAAOhC,KAAK8f,EAAI73B,KAAK2Z,MAAMpU,KAE7B,OAAOwU,CACT,CAOA,SAASiyC,GAAoBlgC,EAAOr8B,EAAOw8D,GACzC,MAAMx0D,EAASq0B,EAAMrF,MAAMhvB,OACrBy0D,EAAalsD,KAAK8C,IAAIrT,EAAOgI,EAAS,GACtCJ,EAAQy0B,EAAMosB,YACdj8B,EAAM6P,EAAMqsB,UACZ7+B,EAAU,KAChB,IACIoO,EADAykC,EAAYrgC,EAAMooB,gBAAgBgY,GAGtC,KAAID,IAEAvkC,EADa,IAAXjwB,EACOuI,KAAK6C,IAAIspD,EAAY90D,EAAO4kB,EAAMkwC,GACxB,IAAV18D,GACCq8B,EAAMooB,gBAAgB,GAAKiY,GAAa,GAExCA,EAAYrgC,EAAMooB,gBAAgBgY,EAAa,IAAM,EAEjEC,GAAaD,EAAaz8D,EAAQi4B,GAAUA,EAGxCykC,EAAY90D,EAAQiiB,GAAW6yC,EAAYlwC,EAAM3C,IAIvD,OAAO6yC,CACT,CAMA,SAAS7+B,GAAe8+B,EAAQ30D,GAC9Bse,GAAKq2C,EAAS/+B,IACZ,MAAMP,EAAKO,EAAMP,GACXc,EAAQd,EAAGr1B,OAAS,EAC1B,IAAI8N,EACJ,GAAIqoB,EAAQn2B,EAAQ,CAClB,IAAK8N,EAAI,EAAGA,EAAIqoB,IAASroB,SAChB8nB,EAAM58B,KAAKq8B,EAAGvnB,IAEvBunB,EAAGzO,OAAO,EAAGuP,E,GAGnB,CAKA,SAASy+B,GAAkBxtD,GACzB,OAAOA,EAAQqpB,UAAYrpB,EAAQspB,WAAa,CAClD,CAKA,SAASmkC,GAAeztD,EAASg1B,GAC/B,IAAKh1B,EAAQ4oB,QACX,OAAO,EAGT,MAAMmD,EAAOgJ,GAAO/0B,EAAQ+rB,KAAMiJ,GAC5BxO,EAAUsO,GAAU90B,EAAQwmB,SAC5B+M,EAAQzsB,GAAQ9G,EAAQ4pB,MAAQ5pB,EAAQ4pB,KAAKhxB,OAAS,EAE5D,OAAO26B,EAASxH,EAAKE,WAAczF,EAAQiJ,MAC7C,CAEA,SAASi+B,GAAmBt0B,EAAQnM,GAClC,OAAO0I,GAAcyD,EAAQ,CAC3BnM,QACAz7B,KAAM,SAEV,CAEA,SAASm8D,GAAkBv0B,EAAQxoC,EAAO81C,GACxC,OAAO/Q,GAAcyD,EAAQ,CAC3BsN,OACA91C,QACAY,KAAM,QAEV,CAEA,SAASo8D,GAAWptC,EAAOihC,EAAUrqC,GAEnC,IAAIxR,EAAM2a,GAAmBC,GAI7B,OAHIpJ,GAAyB,UAAbqqC,IAA2BrqC,GAAwB,UAAbqqC,KACpD77C,EAAMgnD,GAAahnD,IAEdA,CACT,CAEA,SAASioD,GAAU5gC,EAAOpE,EAAQ44B,EAAUjhC,GAC1C,MAAM,IAACiG,EAAG,KAAE9F,EAAI,OAAE+F,EAAM,MAAE9F,EAAK,MAAEiH,GAASoF,GACpC,UAACiY,EAAA,OAAWhY,GAAUrF,EAC5B,IACI+L,EAAUk6B,EAAQC,EADlB79B,EAAW,EAEf,MAAMT,EAAS/I,EAASD,EAClBt0B,EAAQyuB,EAAQD,EAEtB,GAAIsM,EAAM6pB,eAAgB,CAGxB,GAFAgX,EAASrtC,GAAeD,EAAOG,EAAMC,GAEjCzK,GAASsrC,GAAW,CACtB,MAAMuM,EAAiB9tD,OAAOC,KAAKshD,GAAU,GACvCzqD,EAAQyqD,EAASuM,GACvBD,EAAS7gC,EAAO8gC,GAAgBlsC,iBAAiB9qB,GAASy4B,EAAS5G,C,MAEnEklC,EADsB,WAAbtM,GACCvc,EAAUxe,OAASwe,EAAUze,KAAO,EAAIgJ,EAAS5G,EAElDgkC,GAAe5/B,EAAOw0B,EAAU54B,GAE3C+K,EAAWhT,EAAQD,C,KACd,CACL,GAAIxK,GAASsrC,GAAW,CACtB,MAAMuM,EAAiB9tD,OAAOC,KAAKshD,GAAU,GACvCzqD,EAAQyqD,EAASuM,GACvBF,EAAS5gC,EAAO8gC,GAAgBlsC,iBAAiB9qB,GAAS7E,EAAQ02B,C,MAElEilC,EADsB,WAAbrM,GACCvc,EAAUvkB,KAAOukB,EAAUtkB,OAAS,EAAIzuB,EAAQ02B,EAEjDgkC,GAAe5/B,EAAOw0B,EAAU54B,GAE3CklC,EAASttC,GAAeD,EAAOkG,EAAQD,GACvCyJ,EAAwB,SAAbuxB,GAAuBtnC,GAAUA,E,CAE9C,MAAO,CAAC2zC,SAAQC,SAAQn6B,WAAU1D,WACpC,CAEe,MAAM+9B,WAAcjD,GAGjC12C,WAAAA,CAAYszB,GACVkQ,QAGA5lD,KAAK+Q,GAAK2kC,EAAI3kC,GAEd/Q,KAAKV,KAAOo2C,EAAIp2C,KAEhBU,KAAK8N,aAAUgG,EAEf9T,KAAKk6B,IAAMwb,EAAIxb,IAEfl6B,KAAK21B,MAAQ+f,EAAI/f,MAIjB31B,KAAKu0B,SAAMzgB,EAEX9T,KAAKw0B,YAAS1gB,EAEd9T,KAAKyuB,UAAO3a,EAEZ9T,KAAK0uB,WAAQ5a,EAEb9T,KAAKC,WAAQ6T,EAEb9T,KAAKu9B,YAASzpB,EACd9T,KAAKg8D,SAAW,CACdvtC,KAAM,EACNC,MAAO,EACP6F,IAAK,EACLC,OAAQ,GAGVx0B,KAAK0hC,cAAW5tB,EAEhB9T,KAAK+sC,eAAYj5B,EAEjB9T,KAAKi8D,gBAAanoD,EAElB9T,KAAKk8D,mBAAgBpoD,EAErB9T,KAAKm8D,iBAAcroD,EAEnB9T,KAAKo8D,kBAAetoD,EAIpB9T,KAAKwvB,UAAO1b,EAEZ9T,KAAKq8D,mBAAgBvoD,EACrB9T,KAAK+R,SAAM+B,EACX9T,KAAK8R,SAAMgC,EACX9T,KAAKs8D,YAASxoD,EAEd9T,KAAK01B,MAAQ,GAEb11B,KAAKu8D,eAAiB,KAEtBv8D,KAAKw8D,YAAc,KAEnBx8D,KAAKy8D,YAAc,KACnBz8D,KAAKijD,QAAU,EACfjjD,KAAKm6D,WAAa,EAClBn6D,KAAK08D,kBAAoB,CAAC,EAE1B18D,KAAKmnD,iBAAcrzC,EAEnB9T,KAAKonD,eAAYtzC,EACjB9T,KAAKovD,gBAAiB,EACtBpvD,KAAK28D,cAAW7oD,EAChB9T,KAAK48D,cAAW9oD,EAChB9T,KAAK68D,mBAAgB/oD,EACrB9T,KAAK88D,mBAAgBhpD,EACrB9T,KAAK+8D,aAAe,EACpB/8D,KAAKg9D,aAAe,EACpBh9D,KAAKnC,OAAS,CAAC,EACfmC,KAAKi9D,mBAAoB,EACzBj9D,KAAKk8C,cAAWpoC,CAClB,CAMA46C,IAAAA,CAAK5gD,GACH9N,KAAK8N,QAAUA,EAAQ63B,WAAW3lC,KAAKo9B,cAEvCp9B,KAAKwvB,KAAO1hB,EAAQ0hB,KAGpBxvB,KAAK48D,SAAW58D,KAAK6nC,MAAM/5B,EAAQiE,KACnC/R,KAAK28D,SAAW38D,KAAK6nC,MAAM/5B,EAAQgE,KACnC9R,KAAK88D,cAAgB98D,KAAK6nC,MAAM/5B,EAAQovD,cACxCl9D,KAAK68D,cAAgB78D,KAAK6nC,MAAM/5B,EAAQqvD,aAC1C,CAQAt1B,KAAAA,CAAMgT,EAAKn8C,GACT,OAAOm8C,CACT,CAOAlrB,aAAAA,GACE,IAAI,SAACitC,EAAQ,SAAED,EAAQ,cAAEG,EAAA,cAAeD,GAAiB78D,KAKzD,OAJA48D,EAAWx4C,GAAgBw4C,EAAUp3D,OAAOuiB,mBAC5C40C,EAAWv4C,GAAgBu4C,EAAUn3D,OAAO4zC,mBAC5C0jB,EAAgB14C,GAAgB04C,EAAet3D,OAAOuiB,mBACtD80C,EAAgBz4C,GAAgBy4C,EAAer3D,OAAO4zC,mBAC/C,CACLrnC,IAAKqS,GAAgBw4C,EAAUE,GAC/BhrD,IAAKsS,GAAgBu4C,EAAUE,GAC/BptC,WAAYvL,GAAS04C,GACrBltC,WAAYxL,GAASy4C,GAEzB,CAQAnd,SAAAA,CAAUpE,GACR,IACIl0C,GADA,IAAC6K,EAAA,IAAKD,EAAA,WAAK2d,EAAA,WAAYC,GAAc1vB,KAAK2vB,gBAG9C,GAAIF,GAAcC,EAChB,MAAO,CAAC3d,MAAKD,OAGf,MAAMsrD,EAAQp9D,KAAK45C,0BACnB,IAAK,IAAIplC,EAAI,EAAG8Q,EAAO83C,EAAM12D,OAAQ8N,EAAI8Q,IAAQ9Q,EAC/CtN,EAAQk2D,EAAM5oD,GAAGslC,WAAW0F,UAAUx/C,KAAMo7C,GACvC3rB,IACH1d,EAAM9C,KAAK8C,IAAIA,EAAK7K,EAAM6K,MAEvB2d,IACH5d,EAAM7C,KAAK6C,IAAIA,EAAK5K,EAAM4K,MAQ9B,OAHAC,EAAM2d,GAAc3d,EAAMD,EAAMA,EAAMC,EACtCD,EAAM2d,GAAc1d,EAAMD,EAAMC,EAAMD,EAE/B,CACLC,IAAKqS,GAAgBrS,EAAKqS,GAAgBtS,EAAKC,IAC/CD,IAAKsS,GAAgBtS,EAAKsS,GAAgBrS,EAAKD,IAEnD,CAOAkhD,UAAAA,GACE,MAAO,CACLvkC,KAAMzuB,KAAKm8D,aAAe,EAC1B5nC,IAAKv0B,KAAKi8D,YAAc,EACxBvtC,MAAO1uB,KAAKo8D,cAAgB,EAC5B5nC,OAAQx0B,KAAKk8D,eAAiB,EAElC,CAOAmB,QAAAA,GACE,OAAOr9D,KAAK01B,KACd,CAKAqpB,SAAAA,GACE,MAAMr/C,EAAOM,KAAK21B,MAAMj2B,KACxB,OAAOM,KAAK8N,QAAQgxC,SAAW9+C,KAAK4kD,eAAiBllD,EAAK49D,QAAU59D,EAAK69D,UAAY79D,EAAKo/C,QAAU,EACtG,CAKA0e,aAAAA,CAAcxqB,EAAYhzC,KAAK21B,MAAMqd,WACnC,MAAMxlB,EAAQxtB,KAAKw8D,cAAgBx8D,KAAKw8D,YAAcx8D,KAAKy9D,mBAAmBzqB,IAC9E,OAAOxlB,CACT,CAGAmnC,YAAAA,GACE30D,KAAKnC,OAAS,CAAC,EACfmC,KAAKi9D,mBAAoB,CAC3B,CAMAS,YAAAA,GACE94C,GAAK5kB,KAAK8N,QAAQ4vD,aAAc,CAAC19D,MACnC,CAUAo2C,MAAAA,CAAO1U,EAAUqL,EAAWY,GAC1B,MAAM,YAAC/W,EAAW,MAAEG,EAAOrB,MAAOwjC,GAAYl5D,KAAK8N,QAC7C6vD,EAAazE,EAASyE,WAG5B39D,KAAK09D,eAGL19D,KAAK0hC,SAAWA,EAChB1hC,KAAK+sC,UAAYA,EACjB/sC,KAAKg8D,SAAWruB,EAAU3/B,OAAO8T,OAAO,CACtC2M,KAAM,EACNC,MAAO,EACP6F,IAAK,EACLC,OAAQ,GACPmZ,GAEH3tC,KAAK01B,MAAQ,KACb11B,KAAKy8D,YAAc,KACnBz8D,KAAKu8D,eAAiB,KACtBv8D,KAAKw8D,YAAc,KAGnBx8D,KAAK49D,sBACL59D,KAAK69D,gBACL79D,KAAK89D,qBAEL99D,KAAKm6D,WAAan6D,KAAK4kD,eACnB5kD,KAAKC,MAAQ0tC,EAAQlf,KAAOkf,EAAQjf,MACpC1uB,KAAKu9B,OAASoQ,EAAQpZ,IAAMoZ,EAAQnZ,OAGnCx0B,KAAKi9D,oBACRj9D,KAAK+9D,mBACL/9D,KAAKg+D,sBACLh+D,KAAKi+D,kBACLj+D,KAAKs8D,OAASj5B,GAAUrjC,KAAM+2B,EAAOH,GACrC52B,KAAKi9D,mBAAoB,GAG3Bj9D,KAAKk+D,mBAELl+D,KAAK01B,MAAQ11B,KAAKm+D,cAAgB,GAGlCn+D,KAAKo+D,kBAIL,MAAMC,EAAkBV,EAAa39D,KAAK01B,MAAMhvB,OAChD1G,KAAKs+D,sBAAsBD,EAAkBvD,GAAO96D,KAAK01B,MAAOioC,GAAc39D,KAAK01B,OAMnF11B,KAAK82C,YAGL92C,KAAKu+D,+BACLv+D,KAAKw+D,yBACLx+D,KAAKy+D,8BAGDvF,EAASxiC,UAAYwiC,EAASlhC,UAAgC,SAApBkhC,EAASxzC,UACrD1lB,KAAK01B,MAAQsC,GAASh4B,KAAMA,KAAK01B,OACjC11B,KAAKy8D,YAAc,KACnBz8D,KAAK0+D,iBAGHL,GAEFr+D,KAAKs+D,sBAAsBt+D,KAAK01B,OAGlC11B,KAAK2+D,YACL3+D,KAAKgR,MACLhR,KAAK4+D,WAIL5+D,KAAK6+D,aACP,CAKA/nB,SAAAA,GACE,IACI2Q,EAAYE,EADZmX,EAAgB9+D,KAAK8N,QAAQoX,QAG7BllB,KAAK4kD,gBACP6C,EAAaznD,KAAKyuB,KAClBk5B,EAAW3nD,KAAK0uB,QAEhB+4B,EAAaznD,KAAKu0B,IAClBozB,EAAW3nD,KAAKw0B,OAEhBsqC,GAAiBA,GAEnB9+D,KAAKmnD,YAAcM,EACnBznD,KAAKonD,UAAYO,EACjB3nD,KAAKovD,eAAiB0P,EACtB9+D,KAAKijD,QAAU0E,EAAWF,EAC1BznD,KAAK++D,eAAiB/+D,KAAK8N,QAAQkxD,aACrC,CAEAH,WAAAA,GACEj6C,GAAK5kB,KAAK8N,QAAQ+wD,YAAa,CAAC7+D,MAClC,CAIA49D,mBAAAA,GACEh5C,GAAK5kB,KAAK8N,QAAQ8vD,oBAAqB,CAAC59D,MAC1C,CACA69D,aAAAA,GAEM79D,KAAK4kD,gBAEP5kD,KAAKC,MAAQD,KAAK0hC,SAClB1hC,KAAKyuB,KAAO,EACZzuB,KAAK0uB,MAAQ1uB,KAAKC,QAElBD,KAAKu9B,OAASv9B,KAAK+sC,UAGnB/sC,KAAKu0B,IAAM,EACXv0B,KAAKw0B,OAASx0B,KAAKu9B,QAIrBv9B,KAAKm8D,YAAc,EACnBn8D,KAAKi8D,WAAa,EAClBj8D,KAAKo8D,aAAe,EACpBp8D,KAAKk8D,cAAgB,CACvB,CACA4B,kBAAAA,GACEl5C,GAAK5kB,KAAK8N,QAAQgwD,mBAAoB,CAAC99D,MACzC,CAEAi/D,UAAAA,CAAW7/D,GACTY,KAAK21B,MAAMupC,cAAc9/D,EAAMY,KAAKo9B,cACpCxY,GAAK5kB,KAAK8N,QAAQ1O,GAAO,CAACY,MAC5B,CAGA+9D,gBAAAA,GACE/9D,KAAKi/D,WAAW,mBAClB,CACAjB,mBAAAA,GAAuB,CACvBC,eAAAA,GACEj+D,KAAKi/D,WAAW,kBAClB,CAGAf,gBAAAA,GACEl+D,KAAKi/D,WAAW,mBAClB,CAIAd,UAAAA,GACE,MAAO,EACT,CACAC,eAAAA,GACEp+D,KAAKi/D,WAAW,kBAClB,CAEAE,2BAAAA,GACEv6C,GAAK5kB,KAAK8N,QAAQqxD,4BAA6B,CAACn/D,MAClD,CAKAo/D,kBAAAA,CAAmB1pC,GACjB,MAAMwjC,EAAWl5D,KAAK8N,QAAQ4nB,MAC9B,IAAIlhB,EAAG8Q,EAAMkvB,EACb,IAAKhgC,EAAI,EAAG8Q,EAAOoQ,EAAMhvB,OAAQ8N,EAAI8Q,EAAM9Q,IACzCggC,EAAO9e,EAAMlhB,GACbggC,EAAKlnC,MAAQsX,GAAKs0C,EAASt0C,SAAU,CAAC4vB,EAAK1vC,MAAO0P,EAAGkhB,GAAQ11B,KAEjE,CACAq/D,0BAAAA,GACEz6C,GAAK5kB,KAAK8N,QAAQuxD,2BAA4B,CAACr/D,MACjD,CAIAu+D,4BAAAA,GACE35C,GAAK5kB,KAAK8N,QAAQywD,6BAA8B,CAACv+D,MACnD,CACAw+D,sBAAAA,GACE,MAAM1wD,EAAU9N,KAAK8N,QACforD,EAAWprD,EAAQ4nB,MACnB4pC,EAAW1E,GAAc56D,KAAK01B,MAAMhvB,OAAQoH,EAAQ4nB,MAAM4jC,eAC1D3hC,EAAcuhC,EAASvhC,aAAe,EACtCC,EAAcshC,EAASthC,YAC7B,IACIP,EAAW0V,EAAWwyB,EADtBlD,EAAgB1kC,EAGpB,IAAK33B,KAAKw/D,eAAiBtG,EAASxiC,SAAWiB,GAAeC,GAAe0nC,GAAY,IAAMt/D,KAAK4kD,eAElG,YADA5kD,KAAKq8D,cAAgB1kC,GAIvB,MAAM8nC,EAAaz/D,KAAK0/D,iBAClBC,EAAgBF,EAAWG,OAAO3/D,MAClC4/D,EAAiBJ,EAAWK,QAAQviC,OAIpCmE,EAAWlW,GAAYxrB,KAAK21B,MAAM11B,MAAQ0/D,EAAe,EAAG3/D,KAAK0hC,UACvErK,EAAYvpB,EAAQ6oB,OAAS32B,KAAK0hC,SAAW49B,EAAW59B,GAAY49B,EAAW,GAG3EK,EAAgB,EAAItoC,IACtBA,EAAYqK,GAAY49B,GAAYxxD,EAAQ6oB,OAAS,GAAM,IAC3DoW,EAAY/sC,KAAK+sC,UAAYuuB,GAAkBxtD,EAAQkpB,MACvDkiC,EAAS5kC,QAAUinC,GAAeztD,EAAQN,MAAOxN,KAAK21B,MAAM7nB,QAAQ+rB,MACpE0lC,EAAmBtwD,KAAKga,KAAK02C,EAAgBA,EAAgBE,EAAiBA,GAC9ExD,EAAgBryC,GAAU/a,KAAK8C,IAC7B9C,KAAK8wD,KAAKv0C,IAAai0C,EAAWK,QAAQviC,OAAS,GAAKlG,GAAY,EAAG,IACvEpoB,KAAK8wD,KAAKv0C,GAAYuhB,EAAYwyB,GAAmB,EAAG,IAAMtwD,KAAK8wD,KAAKv0C,GAAYq0C,EAAiBN,GAAmB,EAAG,MAE7HlD,EAAgBptD,KAAK6C,IAAI6lB,EAAa1oB,KAAK8C,IAAI6lB,EAAaykC,KAG9Dr8D,KAAKq8D,cAAgBA,CACvB,CACAoC,2BAAAA,GACE75C,GAAK5kB,KAAK8N,QAAQ2wD,4BAA6B,CAACz+D,MAClD,CACA0+D,aAAAA,GAAiB,CAIjBC,SAAAA,GACE/5C,GAAK5kB,KAAK8N,QAAQ6wD,UAAW,CAAC3+D,MAChC,CACAgR,GAAAA,GAEE,MAAMk8C,EAAU,CACdjtD,MAAO,EACPs9B,OAAQ,IAGJ,MAAC5H,EAAO7nB,SAAU4nB,MAAOwjC,EAAU1rD,MAAOwyD,EAAWhpC,KAAMipC,IAAajgE,KACxE02B,EAAU12B,KAAKw/D,aACf5a,EAAe5kD,KAAK4kD,eAE1B,GAAIluB,EAAS,CACX,MAAMwpC,EAAc3E,GAAeyE,EAAWrqC,EAAM7nB,QAAQ+rB,MAU5D,GATI+qB,GACFsI,EAAQjtD,MAAQD,KAAK0hC,SACrBwrB,EAAQ3vB,OAAS+9B,GAAkB2E,GAAYC,IAE/ChT,EAAQ3vB,OAASv9B,KAAK+sC,UACtBmgB,EAAQjtD,MAAQq7D,GAAkB2E,GAAYC,GAI5ChH,EAASxiC,SAAW12B,KAAK01B,MAAMhvB,OAAQ,CACzC,MAAM,MAACizD,EAAA,KAAOztC,EAAA,OAAM0zC,EAAA,QAAQE,GAAW9/D,KAAK0/D,iBACtCS,EAAiC,EAAnBjH,EAAS5kC,QACvB8rC,EAAet2C,GAAU9pB,KAAKq8D,eAC9BvqC,EAAM7iB,KAAK6iB,IAAIsuC,GACfvvC,EAAM5hB,KAAK4hB,IAAIuvC,GAErB,GAAIxb,EAAc,CAEhB,MAAMyb,EAAcnH,EAASrhC,OAAS,EAAIhH,EAAM+uC,EAAO3/D,MAAQ6xB,EAAMguC,EAAQviC,OAC7E2vB,EAAQ3vB,OAAStuB,KAAK8C,IAAI/R,KAAK+sC,UAAWmgB,EAAQ3vB,OAAS8iC,EAAcF,E,KACpE,CAGL,MAAMG,EAAapH,EAASrhC,OAAS,EAAI/F,EAAM8tC,EAAO3/D,MAAQ4wB,EAAMivC,EAAQviC,OAE5E2vB,EAAQjtD,MAAQgP,KAAK8C,IAAI/R,KAAK0hC,SAAUwrB,EAAQjtD,MAAQqgE,EAAaH,E,CAEvEngE,KAAKugE,kBAAkB5G,EAAOztC,EAAM2E,EAAKiB,E,EAI7C9xB,KAAKwgE,iBAED5b,GACF5kD,KAAKC,MAAQD,KAAKijD,QAAUttB,EAAM11B,MAAQD,KAAKg8D,SAASvtC,KAAOzuB,KAAKg8D,SAASttC,MAC7E1uB,KAAKu9B,OAAS2vB,EAAQ3vB,SAEtBv9B,KAAKC,MAAQitD,EAAQjtD,MACrBD,KAAKu9B,OAASv9B,KAAKijD,QAAUttB,EAAM4H,OAASv9B,KAAKg8D,SAASznC,IAAMv0B,KAAKg8D,SAASxnC,OAElF,CAEA+rC,iBAAAA,CAAkB5G,EAAOztC,EAAM2E,EAAKiB,GAClC,MAAO4D,OAAO,MAACpH,EAAA,QAAOgG,GAAQ,SAAEi7B,GAAYvvD,KAAK8N,QAC3C2yD,EAAmC,IAAvBzgE,KAAKq8D,cACjBqE,EAAgC,QAAbnR,GAAoC,MAAdvvD,KAAKwvB,KAEpD,GAAIxvB,KAAK4kD,eAAgB,CACvB,MAAM+b,EAAa3gE,KAAKmjD,gBAAgB,GAAKnjD,KAAKyuB,KAC5CmyC,EAAc5gE,KAAK0uB,MAAQ1uB,KAAKmjD,gBAAgBnjD,KAAK01B,MAAMhvB,OAAS,GAC1E,IAAIy1D,EAAc,EACdC,EAAe,EAIfqE,EACEC,GACFvE,EAAcrqC,EAAM6nC,EAAM15D,MAC1Bm8D,EAAevrC,EAAM3E,EAAKqR,SAE1B4+B,EAActrC,EAAM8oC,EAAMp8B,OAC1B6+B,EAAetqC,EAAM5F,EAAKjsB,OAET,UAAVquB,EACT8tC,EAAelwC,EAAKjsB,MACD,QAAVquB,EACT6tC,EAAcxC,EAAM15D,MACD,UAAVquB,IACT6tC,EAAcxC,EAAM15D,MAAQ,EAC5Bm8D,EAAelwC,EAAKjsB,MAAQ,GAI9BD,KAAKm8D,YAAcltD,KAAK6C,KAAKqqD,EAAcwE,EAAarsC,GAAWt0B,KAAKC,OAASD,KAAKC,MAAQ0gE,GAAa,GAC3G3gE,KAAKo8D,aAAentD,KAAK6C,KAAKsqD,EAAewE,EAActsC,GAAWt0B,KAAKC,OAASD,KAAKC,MAAQ2gE,GAAc,E,KAC1G,CACL,IAAI3E,EAAa/vC,EAAKqR,OAAS,EAC3B2+B,EAAgBvC,EAAMp8B,OAAS,EAErB,UAAVjP,GACF2tC,EAAa,EACbC,EAAgBvC,EAAMp8B,QACH,QAAVjP,IACT2tC,EAAa/vC,EAAKqR,OAClB2+B,EAAgB,GAGlBl8D,KAAKi8D,WAAaA,EAAa3nC,EAC/Bt0B,KAAKk8D,cAAgBA,EAAgB5nC,C,CAEzC,CAMAksC,cAAAA,GACMxgE,KAAKg8D,WACPh8D,KAAKg8D,SAASvtC,KAAOxf,KAAK6C,IAAI9R,KAAKm8D,YAAan8D,KAAKg8D,SAASvtC,MAC9DzuB,KAAKg8D,SAASznC,IAAMtlB,KAAK6C,IAAI9R,KAAKi8D,WAAYj8D,KAAKg8D,SAASznC,KAC5Dv0B,KAAKg8D,SAASttC,MAAQzf,KAAK6C,IAAI9R,KAAKo8D,aAAcp8D,KAAKg8D,SAASttC,OAChE1uB,KAAKg8D,SAASxnC,OAASvlB,KAAK6C,IAAI9R,KAAKk8D,cAAel8D,KAAKg8D,SAASxnC,QAEtE,CAEAoqC,QAAAA,GACEh6C,GAAK5kB,KAAK8N,QAAQ8wD,SAAU,CAAC5+D,MAC/B,CAMA4kD,YAAAA,GACE,MAAM,KAACp1B,EAAA,SAAM+/B,GAAYvvD,KAAK8N,QAC9B,MAAoB,QAAbyhD,GAAmC,WAAbA,GAAkC,MAAT//B,CACxD,CAIAqxC,UAAAA,GACE,OAAO7gE,KAAK8N,QAAQokD,QACtB,CAMAoM,qBAAAA,CAAsB5oC,GAMpB,IAAIlhB,EAAG8Q,EACP,IANAtlB,KAAKm/D,8BAELn/D,KAAKo/D,mBAAmB1pC,GAInBlhB,EAAI,EAAG8Q,EAAOoQ,EAAMhvB,OAAQ8N,EAAI8Q,EAAM9Q,IACrCoP,GAAc8R,EAAMlhB,GAAGlH,SACzBooB,EAAMpI,OAAO9Y,EAAG,GAChB8Q,IACA9Q,KAIJxU,KAAKq/D,4BACP,CAMAK,cAAAA,GACE,IAAID,EAAaz/D,KAAKy8D,YAEtB,IAAKgD,EAAY,CACf,MAAM9B,EAAa39D,KAAK8N,QAAQ4nB,MAAMioC,WACtC,IAAIjoC,EAAQ11B,KAAK01B,MACbioC,EAAajoC,EAAMhvB,SACrBgvB,EAAQolC,GAAOplC,EAAOioC,IAGxB39D,KAAKy8D,YAAcgD,EAAaz/D,KAAK8gE,mBAAmBprC,EAAOA,EAAMhvB,OAAQ1G,KAAK8N,QAAQ4nB,MAAM4jC,c,CAGlG,OAAOmG,CACT,CAQAqB,kBAAAA,CAAmBprC,EAAOhvB,EAAQ4yD,GAChC,MAAM,IAACp/B,EAAKwiC,kBAAmBrB,GAAUr7D,KACnC+gE,EAAS,GACTC,EAAU,GACVhG,EAAY/rD,KAAK2Z,MAAMliB,EAASk0D,GAAcl0D,EAAQ4yD,IAC5D,IAEI9kD,EAAG+L,EAAGkc,EAAMnvB,EAAO2zD,EAAUC,EAAY5kC,EAAOvC,EAAY95B,EAAOs9B,EAAQ4jC,EAF3EC,EAAkB,EAClBC,EAAmB,EAGvB,IAAK7sD,EAAI,EAAGA,EAAI9N,EAAQ8N,GAAKwmD,EAAW,CAQtC,GAPA1tD,EAAQooB,EAAMlhB,GAAGlH,MACjB2zD,EAAWjhE,KAAKshE,wBAAwB9sD,GACxC0lB,EAAIL,KAAOqnC,EAAaD,EAAShlC,OACjCK,EAAQ++B,EAAO6F,GAAc7F,EAAO6F,IAAe,CAACxhE,KAAM,CAAC,EAAGq8B,GAAI,IAClEhC,EAAaknC,EAASlnC,WACtB95B,EAAQs9B,EAAS,EAEZ3Z,GAActW,IAAWsH,GAAQtH,IAG/B,GAAIsH,GAAQtH,GAEjB,IAAKiT,EAAI,EAAGkc,EAAOnvB,EAAM5G,OAAQ6Z,EAAIkc,IAAQlc,EAC3C4gD,EAAqC7zD,EAAMiT,GAEtCqD,GAAcu9C,IAAiBvsD,GAAQusD,KAC1ClhE,EAAQ67B,GAAa5B,EAAKoC,EAAM58B,KAAM48B,EAAMP,GAAI97B,EAAOkhE,GACvD5jC,GAAUxD,QATd95B,EAAQ67B,GAAa5B,EAAKoC,EAAM58B,KAAM48B,EAAMP,GAAI97B,EAAOqN,GACvDiwB,EAASxD,EAYXgnC,EAAO/5C,KAAK/mB,GACZ+gE,EAAQh6C,KAAKuW,GACb6jC,EAAkBnyD,KAAK6C,IAAI7R,EAAOmhE,GAClCC,EAAmBpyD,KAAK6C,IAAIyrB,EAAQ8jC,EACtC,CACA9kC,GAAe8+B,EAAQ30D,GAEvB,MAAMk5D,EAASmB,EAAOh7C,QAAQq7C,GACxBtB,EAAUkB,EAAQj7C,QAAQs7C,GAE1BE,EAAWC,IAAA,CAAUvhE,MAAO8gE,EAAOS,IAAQ,EAAGjkC,OAAQyjC,EAAQQ,IAAQ,IAE5E,MAAO,CACL7H,MAAO4H,EAAQ,GACfr1C,KAAMq1C,EAAQ76D,EAAS,GACvBk5D,OAAQ2B,EAAQ3B,GAChBE,QAASyB,EAAQzB,GACjBiB,SACAC,UAEJ,CAOAhhB,gBAAAA,CAAiBl7C,GACf,OAAOA,CACT,CASA8qB,gBAAAA,CAAiB9qB,EAAOpG,GACtB,OAAO6gD,GACT,CAQAqI,gBAAAA,CAAiB7qB,GAAQ,CAQzBomB,eAAAA,CAAgBzkD,GACd,MAAMg3B,EAAQ11B,KAAK01B,MACnB,OAAIh3B,EAAQ,GAAKA,EAAQg3B,EAAMhvB,OAAS,EAC/B,KAEF1G,KAAK4vB,iBAAiB8F,EAAMh3B,GAAOoG,MAC5C,CAQA4iD,kBAAAA,CAAmB+Z,GACbzhE,KAAKovD,iBACPqS,EAAU,EAAIA,GAGhB,MAAM1kC,EAAQ/8B,KAAKmnD,YAAcsa,EAAUzhE,KAAKijD,QAChD,OAAOx3B,GAAYzrB,KAAK++D,eAAiBjiC,GAAY98B,KAAK21B,MAAOoH,EAAO,GAAKA,EAC/E,CAMA2kC,kBAAAA,CAAmB3kC,GACjB,MAAM0kC,GAAW1kC,EAAQ/8B,KAAKmnD,aAAennD,KAAKijD,QAClD,OAAOjjD,KAAKovD,eAAiB,EAAIqS,EAAUA,CAC7C,CAOA3b,YAAAA,GACE,OAAO9lD,KAAK4vB,iBAAiB5vB,KAAK2hE,eACpC,CAKAA,YAAAA,GACE,MAAM,IAAC5vD,EAAG,IAAED,GAAO9R,KAEnB,OAAO+R,EAAM,GAAKD,EAAM,EAAIA,EAC1BC,EAAM,GAAKD,EAAM,EAAIC,EACrB,CACJ,CAKAqrB,UAAAA,CAAW1+B,GACT,MAAMg3B,EAAQ11B,KAAK01B,OAAS,GAE5B,GAAIh3B,GAAS,GAAKA,EAAQg3B,EAAMhvB,OAAQ,CACtC,MAAM8tC,EAAO9e,EAAMh3B,GACnB,OAAO81C,EAAK0H,WACb1H,EAAK0H,SAAWuf,GAAkBz7D,KAAKo9B,aAAc1+B,EAAO81C,G,CAE7D,OAAOx0C,KAAKk8C,WACZl8C,KAAKk8C,SAAWsf,GAAmBx7D,KAAK21B,MAAMyH,aAAcp9B,MAC9D,CAMAg6D,SAAAA,GACE,MAAM4H,EAAc5hE,KAAK8N,QAAQ4nB,MAG3BmsC,EAAM/3C,GAAU9pB,KAAKq8D,eACrBvqC,EAAM7iB,KAAKuZ,IAAIvZ,KAAK6iB,IAAI+vC,IACxBhxC,EAAM5hB,KAAKuZ,IAAIvZ,KAAK4hB,IAAIgxC,IAExBpC,EAAaz/D,KAAK0/D,iBAClBprC,EAAUstC,EAAY3pC,iBAAmB,EACzC3jB,EAAImrD,EAAaA,EAAWG,OAAO3/D,MAAQq0B,EAAU,EACrDziB,EAAI4tD,EAAaA,EAAWK,QAAQviC,OAASjJ,EAAU,EAG7D,OAAOt0B,KAAK4kD,eACR/yC,EAAIigB,EAAMxd,EAAIuc,EAAMvc,EAAIwd,EAAMjgB,EAAIgf,EAClChf,EAAIgf,EAAMvc,EAAIwd,EAAMjgB,EAAIigB,EAAMxd,EAAIuc,CACxC,CAMA2uC,UAAAA,GACE,MAAM9oC,EAAU12B,KAAK8N,QAAQ4oB,QAE7B,MAAgB,SAAZA,IACOA,EAGJ12B,KAAK45C,0BAA0BlzC,OAAS,CACjD,CAKAo7D,qBAAAA,CAAsB9uB,GACpB,MAAMxjB,EAAOxvB,KAAKwvB,KACZmG,EAAQ31B,KAAK21B,MACb7nB,EAAU9N,KAAK8N,SACf,KAACkpB,EAAI,SAAEu4B,EAAA,OAAUh4B,GAAUzpB,EAC3B6oB,EAASK,EAAKL,OACdiuB,EAAe5kD,KAAK4kD,eACpBlvB,EAAQ11B,KAAK01B,MACbmlC,EAAcnlC,EAAMhvB,QAAUiwB,EAAS,EAAI,GAC3CorC,EAAKzG,GAAkBtkC,GACvBxJ,EAAQ,GAERw0C,EAAazqC,EAAOoO,WAAW3lC,KAAKo9B,cACpC6kC,EAAYD,EAAWtrC,QAAUsrC,EAAW/hE,MAAQ,EACpDiiE,EAAgBD,EAAY,EAC5BE,EAAmB,SAASplC,GAChC,OAAOD,GAAYnH,EAAOoH,EAAOklC,EACnC,EACA,IAAIG,EAAa5tD,EAAG4mD,EAAWiH,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EAEpC,GAAiB,QAAbtT,EACF6S,EAAcD,EAAiBniE,KAAKw0B,QACpC+tC,EAAMviE,KAAKw0B,OAASutC,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiBnvB,EAAUze,KAAO2tC,EACvCW,EAAK7vB,EAAUxe,YACV,GAAiB,WAAb+6B,EACT6S,EAAcD,EAAiBniE,KAAKu0B,KACpCouC,EAAK3vB,EAAUze,IACfsuC,EAAKV,EAAiBnvB,EAAUxe,QAAU0tC,EAC1CK,EAAMH,EAAcF,EACpBO,EAAMziE,KAAKu0B,IAAMwtC,OACZ,GAAiB,SAAbxS,EACT6S,EAAcD,EAAiBniE,KAAK0uB,OACpC4zC,EAAMtiE,KAAK0uB,MAAQqzC,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiBnvB,EAAUvkB,MAAQyzC,EACxCU,EAAK5vB,EAAUtkB,WACV,GAAiB,UAAb6gC,EACT6S,EAAcD,EAAiBniE,KAAKyuB,MACpCi0C,EAAK1vB,EAAUvkB,KACfm0C,EAAKT,EAAiBnvB,EAAUtkB,OAASwzC,EACzCI,EAAMF,EAAcF,EACpBM,EAAMxiE,KAAKyuB,KAAOszC,OACb,GAAa,MAATvyC,EAAc,CACvB,GAAiB,WAAb+/B,EACF6S,EAAcD,GAAkBnvB,EAAUze,IAAMye,EAAUxe,QAAU,EAAI,SACnE,GAAIvQ,GAASsrC,GAAW,CAC7B,MAAMuM,EAAiB9tD,OAAOC,KAAKshD,GAAU,GACvCzqD,EAAQyqD,EAASuM,GACvBsG,EAAcD,EAAiBniE,KAAK21B,MAAMqF,OAAO8gC,GAAgBlsC,iBAAiB9qB,G,CAGpF69D,EAAK3vB,EAAUze,IACfsuC,EAAK7vB,EAAUxe,OACf+tC,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,C,MACP,GAAa,MAATvyC,EAAc,CACvB,GAAiB,WAAb+/B,EACF6S,EAAcD,GAAkBnvB,EAAUvkB,KAAOukB,EAAUtkB,OAAS,QAC/D,GAAIzK,GAASsrC,GAAW,CAC7B,MAAMuM,EAAiB9tD,OAAOC,KAAKshD,GAAU,GACvCzqD,EAAQyqD,EAASuM,GACvBsG,EAAcD,EAAiBniE,KAAK21B,MAAMqF,OAAO8gC,GAAgBlsC,iBAAiB9qB,G,CAGpFw9D,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAK1vB,EAAUvkB,KACfm0C,EAAK5vB,EAAUtkB,K,CAGjB,MAAMo0C,EAAQx+C,GAAexW,EAAQ4nB,MAAM4jC,cAAeuB,GACpDkI,EAAO9zD,KAAK6C,IAAI,EAAG7C,KAAKsrD,KAAKM,EAAciI,IACjD,IAAKtuD,EAAI,EAAGA,EAAIqmD,EAAarmD,GAAKuuD,EAAM,CACtC,MAAMvpC,EAAUx5B,KAAKo9B,WAAW5oB,GAC1BwuD,EAAchsC,EAAK2O,WAAWnM,GAC9BypC,EAAoB1rC,EAAOoO,WAAWnM,GAEtCvC,EAAY+rC,EAAY/rC,UACxBisC,EAAYF,EAAYtgD,MACxBiwB,EAAaswB,EAAkBzrC,MAAQ,GACvCob,EAAmBqwB,EAAkBxrC,WAErCJ,EAAY2rC,EAAY3rC,UACxBC,EAAY0rC,EAAY1rC,UACxB6rC,EAAiBH,EAAYG,gBAAkB,GAC/CC,EAAuBJ,EAAYI,qBAEzChI,EAAYH,GAAoBj7D,KAAMwU,EAAGmiB,QAGvB7iB,IAAdsnD,IAIJiH,EAAmBvlC,GAAYnH,EAAOylC,EAAWnkC,GAE7C2tB,EACF0d,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAGxB70C,EAAMxG,KAAK,CACTs7C,MACAC,MACAC,MACAC,MACAC,KACAC,KACAC,KACAC,KACA5iE,MAAOg3B,EACPvU,MAAOwgD,EACPvwB,aACAC,mBACAvb,YACAC,YACA6rC,iBACAC,yBAEJ,CAKA,OAHApjE,KAAK+8D,aAAelC,EACpB76D,KAAKg9D,aAAeoF,EAEb50C,CACT,CAKAiwC,kBAAAA,CAAmBzqB,GACjB,MAAMxjB,EAAOxvB,KAAKwvB,KACZ1hB,EAAU9N,KAAK8N,SACf,SAACyhD,EAAU75B,MAAOksC,GAAe9zD,EACjC82C,EAAe5kD,KAAK4kD,eACpBlvB,EAAQ11B,KAAK01B,OACb,MAACpH,EAAA,WAAO+J,EAAA,QAAY/D,EAAO,OAAEuD,GAAU+pC,EACvCG,EAAKzG,GAAkBxtD,EAAQkpB,MAC/BqsC,EAAiBtB,EAAKztC,EACtBgvC,EAAkBzrC,GAAUvD,EAAU+uC,EACtCrlC,GAAYlU,GAAU9pB,KAAKq8D,eAC3B7uC,EAAQ,GACd,IAAIhZ,EAAG8Q,EAAMkvB,EAAMlnC,EAAOoI,EAAGiR,EAAGwZ,EAAWpD,EAAOlD,EAAME,EAAYwpC,EAAWC,EAC3EpjC,EAAe,SAEnB,GAAiB,QAAbmvB,EACF5oC,EAAI3mB,KAAKw0B,OAAS8uC,EAClBnjC,EAAYngC,KAAKyjE,+BACZ,GAAiB,WAAblU,EACT5oC,EAAI3mB,KAAKu0B,IAAM+uC,EACfnjC,EAAYngC,KAAKyjE,+BACZ,GAAiB,SAAblU,EAAqB,CAC9B,MAAM77C,EAAM1T,KAAK0jE,wBAAwB3B,GACzC5hC,EAAYzsB,EAAIysB,UAChBzqB,EAAIhC,EAAIgC,C,MACH,GAAiB,UAAb65C,EAAsB,CAC/B,MAAM77C,EAAM1T,KAAK0jE,wBAAwB3B,GACzC5hC,EAAYzsB,EAAIysB,UAChBzqB,EAAIhC,EAAIgC,C,MACH,GAAa,MAAT8Z,EAAc,CACvB,GAAiB,WAAb+/B,EACF5oC,GAAMqsB,EAAUze,IAAMye,EAAUxe,QAAU,EAAK6uC,OAC1C,GAAIp/C,GAASsrC,GAAW,CAC7B,MAAMuM,EAAiB9tD,OAAOC,KAAKshD,GAAU,GACvCzqD,EAAQyqD,EAASuM,GACvBn1C,EAAI3mB,KAAK21B,MAAMqF,OAAO8gC,GAAgBlsC,iBAAiB9qB,GAASu+D,C,CAElEljC,EAAYngC,KAAKyjE,yB,MACZ,GAAa,MAATj0C,EAAc,CACvB,GAAiB,WAAb+/B,EACF75C,GAAMs9B,EAAUvkB,KAAOukB,EAAUtkB,OAAS,EAAK20C,OAC1C,GAAIp/C,GAASsrC,GAAW,CAC7B,MAAMuM,EAAiB9tD,OAAOC,KAAKshD,GAAU,GACvCzqD,EAAQyqD,EAASuM,GACvBpmD,EAAI1V,KAAK21B,MAAMqF,OAAO8gC,GAAgBlsC,iBAAiB9qB,E,CAEzDq7B,EAAYngC,KAAK0jE,wBAAwB3B,GAAI5hC,S,CAGlC,MAAT3Q,IACY,UAAVlB,EACF8R,EAAe,MACI,QAAV9R,IACT8R,EAAe,WAInB,MAAMq/B,EAAaz/D,KAAK0/D,iBACxB,IAAKlrD,EAAI,EAAG8Q,EAAOoQ,EAAMhvB,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CAC9CggC,EAAO9e,EAAMlhB,GACblH,EAAQknC,EAAKlnC,MAEb,MAAM01D,EAAcpB,EAAYj8B,WAAW3lC,KAAKo9B,WAAW5oB,IAC3DuoB,EAAQ/8B,KAAKmjD,gBAAgB3uC,GAAKotD,EAAY1pC,YAC9C2B,EAAO75B,KAAKshE,wBAAwB9sD,GACpCulB,EAAaF,EAAKE,WAClBwpC,EAAY3uD,GAAQtH,GAASA,EAAM5G,OAAS,EAC5C,MAAMi9D,EAAYJ,EAAY,EACxB7gD,EAAQsgD,EAAYtgD,MACpB6e,EAAcyhC,EAAYjrC,gBAC1BuJ,EAAc0hC,EAAYlrC,gBAChC,IA4CI0J,EA5CAoiC,EAAgBzjC,EA8CpB,GA5CIykB,GACFlvC,EAAIqnB,EAEc,UAAdoD,IAEAyjC,EADEpvD,IAAM8Q,EAAO,EACEtlB,KAAK8N,QAAQoX,QAAoB,OAAV,QACzB,IAAN1Q,EACQxU,KAAK8N,QAAQoX,QAAmB,QAAT,OAExB,UAMhBs+C,EAFa,QAAbjU,EACiB,SAAfl3B,GAAsC,IAAb2F,GACbulC,EAAYxpC,EAAaA,EAAa,EAC5B,WAAf1B,GACKonC,EAAWK,QAAQviC,OAAS,EAAIomC,EAAY5pC,EAAaA,GAEzD0lC,EAAWK,QAAQviC,OAASxD,EAAa,EAItC,SAAf1B,GAAsC,IAAb2F,EACdjE,EAAa,EACF,WAAf1B,EACIonC,EAAWK,QAAQviC,OAAS,EAAIomC,EAAY5pC,EAE5C0lC,EAAWK,QAAQviC,OAASgmC,EAAYxpC,EAGrDlC,IACF2rC,IAAe,GAEA,IAAbxlC,GAAmBglC,EAAY1qC,oBACjC5iB,GAAKqkB,EAAc,EAAK9qB,KAAK4hB,IAAImN,MAGnCrX,EAAIoW,EACJymC,GAAc,EAAID,GAAaxpC,EAAa,GAK1CipC,EAAY1qC,kBAAmB,CACjC,MAAMurC,EAAejhC,GAAUogC,EAAYxqC,iBACrC+E,EAASkiC,EAAWuB,QAAQxsD,GAC5BvU,EAAQw/D,EAAWsB,OAAOvsD,GAEhC,IAAI+f,EAAMivC,EAAaK,EAAatvC,IAChC9F,EAAO,EAAIo1C,EAAap1C,KAE5B,OAAQ2R,GACR,IAAK,SACH7L,GAAOgJ,EAAS,EAChB,MACF,IAAK,SACHhJ,GAAOgJ,EACP,MAKF,OAAQ4C,GACR,IAAK,SACH1R,GAAQxuB,EAAQ,EAChB,MACF,IAAK,QACHwuB,GAAQxuB,EACR,MACF,IAAK,QACCuU,IAAM8Q,EAAO,EACfmJ,GAAQxuB,EACCuU,EAAI,IACbia,GAAQxuB,EAAQ,GAElB,MAKFuhC,EAAW,CACT/S,OACA8F,MACAt0B,MAAOA,EAAQ4jE,EAAa5jE,MAC5Bs9B,OAAQA,EAASsmC,EAAatmC,OAE9B7a,MAAOsgD,EAAYzqC,c,CAIvB/K,EAAMxG,KAAK,CACT1Z,QACAusB,OACA2pC,aACA11D,QAAS,CACPkwB,WACAtb,QACA6e,cACAD,cACAnB,UAAWyjC,EACXxjC,eACAH,YAAa,CAACvqB,EAAGiR,GACjB6a,aAGN,CAEA,OAAOhU,CACT,CAEAi2C,uBAAAA,GACE,MAAM,SAAClU,EAAA,MAAU75B,GAAS11B,KAAK8N,QACzBkwB,GAAYlU,GAAU9pB,KAAKq8D,eAEjC,GAAIr+B,EACF,MAAoB,QAAbuxB,EAAqB,OAAS,QAGvC,IAAIjhC,EAAQ,SAUZ,MARoB,UAAhBoH,EAAMpH,MACRA,EAAQ,OACiB,QAAhBoH,EAAMpH,MACfA,EAAQ,QACiB,UAAhBoH,EAAMpH,QACfA,EAAQ,SAGHA,CACT,CAEAo1C,uBAAAA,CAAwB3B,GACtB,MAAM,SAACxS,EAAU75B,OAAO,WAAC2C,EAAA,OAAYR,EAAA,QAAQvD,IAAYt0B,KAAK8N,QACxD2xD,EAAaz/D,KAAK0/D,iBAClB2D,EAAiBtB,EAAKztC,EACtBsrC,EAASH,EAAWG,OAAO3/D,MAEjC,IAAIkgC,EACAzqB,EA0DJ,MAxDiB,SAAb65C,EACE13B,GACFniB,EAAI1V,KAAK0uB,MAAQ4F,EAEE,SAAf+D,EACF8H,EAAY,OACY,WAAf9H,GACT8H,EAAY,SACZzqB,GAAMkqD,EAAS,IAEfz/B,EAAY,QACZzqB,GAAKkqD,KAGPlqD,EAAI1V,KAAK0uB,MAAQ20C,EAEE,SAAfhrC,EACF8H,EAAY,QACY,WAAf9H,GACT8H,EAAY,SACZzqB,GAAMkqD,EAAS,IAEfz/B,EAAY,OACZzqB,EAAI1V,KAAKyuB,OAGS,UAAb8gC,EACL13B,GACFniB,EAAI1V,KAAKyuB,KAAO6F,EAEG,SAAf+D,EACF8H,EAAY,QACY,WAAf9H,GACT8H,EAAY,SACZzqB,GAAMkqD,EAAS,IAEfz/B,EAAY,OACZzqB,GAAKkqD,KAGPlqD,EAAI1V,KAAKyuB,KAAO40C,EAEG,SAAfhrC,EACF8H,EAAY,OACY,WAAf9H,GACT8H,EAAY,SACZzqB,GAAKkqD,EAAS,IAEdz/B,EAAY,QACZzqB,EAAI1V,KAAK0uB,QAIbyR,EAAY,QAGP,CAACA,YAAWzqB,IACrB,CAKAouD,iBAAAA,GACE,GAAI9jE,KAAK8N,QAAQ4nB,MAAMmC,OACrB,OAGF,MAAMlC,EAAQ31B,KAAK21B,MACb45B,EAAWvvD,KAAK8N,QAAQyhD,SAE9B,MAAiB,SAAbA,GAAoC,UAAbA,EAClB,CAACh7B,IAAK,EAAG9F,KAAMzuB,KAAKyuB,KAAM+F,OAAQmB,EAAM4H,OAAQ7O,MAAO1uB,KAAK0uB,OAClD,QAAb6gC,GAAmC,WAAbA,EACnB,CAACh7B,IAAKv0B,KAAKu0B,IAAK9F,KAAM,EAAG+F,OAAQx0B,KAAKw0B,OAAQ9F,MAAOiH,EAAM11B,YADlE,CAGJ,CAKA8jE,cAAAA,GACE,MAAM,IAAC7pC,EAAKpsB,SAAS,gBAACsrB,GAAgB,KAAE3K,EAAI,IAAE8F,EAAA,MAAKt0B,EAAA,OAAOs9B,GAAUv9B,KAChEo5B,IACFc,EAAIsC,OACJtC,EAAIgG,UAAY9G,EAChBc,EAAIiH,SAAS1S,EAAM8F,EAAKt0B,EAAOs9B,GAC/BrD,EAAI0C,UAER,CAEAkrB,oBAAAA,CAAqBhjD,GACnB,MAAMkyB,EAAOh3B,KAAK8N,QAAQkpB,KAC1B,IAAKh3B,KAAKw/D,eAAiBxoC,EAAKN,QAC9B,OAAO,EAET,MAAMhB,EAAQ11B,KAAK01B,MACbh3B,EAAQg3B,EAAM5F,UAAUtO,GAAKA,EAAE1c,QAAUA,GAC/C,GAAIpG,GAAS,EAAG,CACd,MAAMshC,EAAOhJ,EAAK2O,WAAW3lC,KAAKo9B,WAAW1+B,IAC7C,OAAOshC,EAAK/I,S,CAEd,OAAO,CACT,CAKA+sC,QAAAA,CAAShxB,GACP,MAAMhc,EAAOh3B,KAAK8N,QAAQkpB,KACpBkD,EAAMl6B,KAAKk6B,IACX1M,EAAQxtB,KAAKu8D,iBAAmBv8D,KAAKu8D,eAAiBv8D,KAAK8hE,sBAAsB9uB,IACvF,IAAIx+B,EAAG8Q,EAEP,MAAM2+C,EAAWA,CAAC5uD,EAAIC,EAAIjX,KACnBA,EAAM4B,OAAU5B,EAAMqkB,QAG3BwX,EAAIsC,OACJtC,EAAIjD,UAAY54B,EAAM4B,MACtBi6B,EAAI6G,YAAc1iC,EAAMqkB,MACxBwX,EAAIgqC,YAAY7lE,EAAMs0C,YAAc,IACpCzY,EAAI8xB,eAAiB3tD,EAAMu0C,iBAE3B1Y,EAAImE,YACJnE,EAAIuE,OAAOppB,EAAGK,EAAGL,EAAGsR,GACpBuT,EAAIwE,OAAOppB,EAAGI,EAAGJ,EAAGqR,GACpBuT,EAAI6E,SACJ7E,EAAI0C,YAGN,GAAI5F,EAAKN,QACP,IAAKliB,EAAI,EAAG8Q,EAAOkI,EAAM9mB,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CAC9C,MAAMhW,EAAOgvB,EAAMhZ,GAEfwiB,EAAKE,iBACP+sC,EACE,CAACvuD,EAAGlX,EAAKkkE,GAAI/7C,EAAGnoB,EAAKmkE,IACrB,CAACjtD,EAAGlX,EAAKokE,GAAIj8C,EAAGnoB,EAAKqkE,IACrBrkE,GAIAw4B,EAAKG,WACP8sC,EACE,CAACvuD,EAAGlX,EAAK8jE,IAAK37C,EAAGnoB,EAAK+jE,KACtB,CAAC7sD,EAAGlX,EAAKgkE,IAAK77C,EAAGnoB,EAAKikE,KACtB,CACE//C,MAAOlkB,EAAK84B,UACZr3B,MAAOzB,EAAK64B,UACZsb,WAAYn0C,EAAK2kE,eACjBvwB,iBAAkBp0C,EAAK4kE,sBAI/B,CAEJ,CAKAe,UAAAA,GACE,MAAM,MAACxuC,EAAA,IAAOuE,EAAKpsB,SAAS,OAACypB,EAAM,KAAEP,IAASh3B,KACxCgiE,EAAazqC,EAAOoO,WAAW3lC,KAAKo9B,cACpC6kC,EAAY1qC,EAAOb,QAAUsrC,EAAW/hE,MAAQ,EACtD,IAAKgiE,EACH,OAEF,MAAMmC,EAAgBptC,EAAK2O,WAAW3lC,KAAKo9B,WAAW,IAAInG,UACpDmrC,EAAcpiE,KAAKg9D,aACzB,IAAI0F,EAAIE,EAAID,EAAIE,EAEZ7iE,KAAK4kD,gBACP8d,EAAK5lC,GAAYnH,EAAO31B,KAAKyuB,KAAMwzC,GAAaA,EAAY,EAC5DW,EAAK9lC,GAAYnH,EAAO31B,KAAK0uB,MAAO01C,GAAiBA,EAAgB,EACrEzB,EAAKE,EAAKT,IAEVO,EAAK7lC,GAAYnH,EAAO31B,KAAKu0B,IAAK0tC,GAAaA,EAAY,EAC3DY,EAAK/lC,GAAYnH,EAAO31B,KAAKw0B,OAAQ4vC,GAAiBA,EAAgB,EACtE1B,EAAKE,EAAKR,GAEZloC,EAAIsC,OACJtC,EAAIjD,UAAY+qC,EAAW/hE,MAC3Bi6B,EAAI6G,YAAcihC,EAAWt/C,MAE7BwX,EAAImE,YACJnE,EAAIuE,OAAOikC,EAAIC,GACfzoC,EAAIwE,OAAOkkC,EAAIC,GACf3oC,EAAI6E,SAEJ7E,EAAI0C,SACN,CAKAynC,UAAAA,CAAWrxB,GACT,MAAM4uB,EAAc5hE,KAAK8N,QAAQ4nB,MAEjC,IAAKksC,EAAYlrC,QACf,OAGF,MAAMwD,EAAMl6B,KAAKk6B,IAEX+E,EAAOj/B,KAAK8jE,oBACd7kC,GACFE,GAASjF,EAAK+E,GAGhB,MAAMzR,EAAQxtB,KAAKw9D,cAAcxqB,GACjC,IAAK,MAAMx0C,KAAQgvB,EAAO,CACxB,MAAM82C,EAAoB9lE,EAAKsP,QACzBmzD,EAAWziE,EAAKq7B,KAChBvsB,EAAQ9O,EAAK8O,MACbqZ,EAAInoB,EAAKglE,WACfpiC,GAAWlH,EAAK5sB,EAAO,EAAGqZ,EAAGs6C,EAAUqD,EACzC,CAEIrlC,GACFG,GAAWlF,EAEf,CAKAqqC,SAAAA,GACE,MAAM,IAACrqC,EAAKpsB,SAAS,SAACyhD,EAAQ,MAAE/hD,EAAK,QAAE0X,IAAYllB,KAEnD,IAAKwN,EAAMkpB,QACT,OAGF,MAAMmD,EAAOgJ,GAAOr1B,EAAMqsB,MACpBvF,EAAUsO,GAAUp1B,EAAM8mB,SAC1BhG,EAAQ9gB,EAAM8gB,MACpB,IAAIqI,EAASkD,EAAKE,WAAa,EAEd,WAAbw1B,GAAsC,WAAbA,GAAyBtrC,GAASsrC,IAC7D54B,GAAUrC,EAAQE,OACd5f,GAAQpH,EAAMkqB,QAChBf,GAAUkD,EAAKE,YAAcvsB,EAAMkqB,KAAKhxB,OAAS,KAGnDiwB,GAAUrC,EAAQC,IAGpB,MAAM,OAACqnC,EAAA,OAAQC,EAAA,SAAQn6B,EAAQ,SAAE1D,GAAY29B,GAAU37D,KAAM22B,EAAQ44B,EAAUjhC,GAE/E8S,GAAWlH,EAAK1sB,EAAMkqB,KAAM,EAAG,EAAGmC,EAAM,CACtCnX,MAAOlV,EAAMkV,MACbgf,WACA1D,WACAmC,UAAWu7B,GAAWptC,EAAOihC,EAAUrqC,GACvCkb,aAAc,SACdH,YAAa,CAAC27B,EAAQC,IAE1B,CAEAxnB,IAAAA,CAAKrB,GACEhzC,KAAKw/D,eAIVx/D,KAAK+jE,iBACL/jE,KAAKgkE,SAAShxB,GACdhzC,KAAKmkE,aACLnkE,KAAKukE,YACLvkE,KAAKqkE,WAAWrxB,GAClB,CAMAohB,OAAAA,GACE,MAAMp0B,EAAOhgC,KAAK8N,QACZ02D,EAAKxkC,EAAKtK,OAASsK,EAAKtK,MAAM2+B,GAAK,EACnCoQ,EAAKngD,GAAe0b,EAAKhJ,MAAQgJ,EAAKhJ,KAAKq9B,GAAI,GAC/CqQ,EAAKpgD,GAAe0b,EAAKzI,QAAUyI,EAAKzI,OAAO88B,EAAG,GAExD,OAAKr0D,KAAKw/D,cAAgBx/D,KAAKq0C,OAAS0nB,GAAMl4C,UAAUwwB,KAUjD,CAAC,CACNggB,EAAGoQ,EACHpwB,KAAOrB,IACLhzC,KAAK+jE,iBACL/jE,KAAKgkE,SAAShxB,GACdhzC,KAAKukE,cAEN,CACDlQ,EAAGqQ,EACHrwB,KAAMA,KACJr0C,KAAKmkE,eAEN,CACD9P,EAAGmQ,EACHnwB,KAAOrB,IACLhzC,KAAKqkE,WAAWrxB,MAvBX,CAAC,CACNqhB,EAAGmQ,EACHnwB,KAAOrB,IACLhzC,KAAKq0C,KAAKrB,KAuBlB,CAOA4G,uBAAAA,CAAwBt6C,GACtB,MAAM89D,EAAQp9D,KAAK21B,MAAM65B,+BACnBtH,EAASloD,KAAKwvB,KAAO,SACrBxG,EAAS,GACf,IAAIxU,EAAG8Q,EAEP,IAAK9Q,EAAI,EAAG8Q,EAAO83C,EAAM12D,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CAC9C,MAAMsa,EAAOsuC,EAAM5oD,GACfsa,EAAKo5B,KAAYloD,KAAK+Q,IAAQzR,GAAQwvB,EAAKxvB,OAASA,GACtD0pB,EAAOhC,KAAK8H,EAEhB,CACA,OAAO9F,CACT,CAOAs4C,uBAAAA,CAAwB5iE,GACtB,MAAMshC,EAAOhgC,KAAK8N,QAAQ4nB,MAAMiQ,WAAW3lC,KAAKo9B,WAAW1+B,IAC3D,OAAOmkC,GAAO7C,EAAKnG,KACrB,CAKA8qC,UAAAA,GACE,MAAMC,EAAW5kE,KAAKshE,wBAAwB,GAAGvnC,WACjD,OAAQ/5B,KAAK4kD,eAAiB5kD,KAAKC,MAAQD,KAAKu9B,QAAUqnC,CAC5D,ECrqDa,MAAMC,GACnBziD,WAAAA,CAAY9iB,EAAM05B,EAAOmC,GACvBn7B,KAAKV,KAAOA,EACZU,KAAKg5B,MAAQA,EACbh5B,KAAKm7B,SAAWA,EAChBn7B,KAAKwtB,MAAQxf,OAAO4X,OAAO,KAC7B,CAEAk/C,SAAAA,CAAUxlE,GACR,OAAO0O,OAAO6V,UAAUkhD,cAAchhD,KAAK/jB,KAAKV,KAAKukB,UAAWvkB,EAAKukB,UACvE,CAMAmhD,QAAAA,CAASxmE,GACP,MAAMqjB,EAAQ7T,OAAO82B,eAAetmC,GACpC,IAAIymE,EAEAC,GAAkBrjD,KAEpBojD,EAAcjlE,KAAKglE,SAASnjD,IAG9B,MAAM2L,EAAQxtB,KAAKwtB,MACbzc,EAAKvS,EAAKuS,GACVioB,EAAQh5B,KAAKg5B,MAAQ,IAAMjoB,EAEjC,IAAKA,EACH,MAAM,IAAI21B,MAAM,2BAA6BloC,GAG/C,OAAIuS,KAAMyc,IAKVA,EAAMzc,GAAMvS,EACZ2mE,GAAiB3mE,EAAMw6B,EAAOisC,GAC1BjlE,KAAKm7B,UACP9H,GAAS8H,SAAS38B,EAAKuS,GAAIvS,EAAKm6B,YANzBK,CAUX,CAMA/D,GAAAA,CAAIlkB,GACF,OAAO/Q,KAAKwtB,MAAMzc,EACpB,CAKAq0D,UAAAA,CAAW5mE,GACT,MAAMgvB,EAAQxtB,KAAKwtB,MACbzc,EAAKvS,EAAKuS,GACVioB,EAAQh5B,KAAKg5B,MAEfjoB,KAAMyc,UACDA,EAAMzc,GAGXioB,GAASjoB,KAAMsiB,GAAS2F,YACnB3F,GAAS2F,GAAOjoB,GACnB/Q,KAAKm7B,iBACAxC,GAAU5nB,GAGvB,EAGF,SAASo0D,GAAiB3mE,EAAMw6B,EAAOisC,GAErC,MAAMI,EAAel/C,GAAMnY,OAAO4X,OAAO,MAAO,CAC9Cq/C,EAAc5xC,GAAS4B,IAAIgwC,GAAe,CAAC,EAC3C5xC,GAAS4B,IAAI+D,GACbx6B,EAAK60B,WAGPA,GAAS5F,IAAIuL,EAAOqsC,GAEhB7mE,EAAK8mE,eACPC,GAAcvsC,EAAOx6B,EAAK8mE,eAGxB9mE,EAAKo6B,aACPvF,GAASG,SAASwF,EAAOx6B,EAAKo6B,YAElC,CAEA,SAAS2sC,GAAcvsC,EAAOwsC,GAC5Bx3D,OAAOC,KAAKu3D,GAAQz4C,QAAQlD,IAC1B,MAAM47C,EAAgB57C,EAAS/C,MAAM,KAC/B4+C,EAAaD,EAAct8C,MAC3Bw8C,EAAc,CAAC3sC,GAAO8pB,OAAO2iB,GAAe9+B,KAAK,KACjD9f,EAAQ2+C,EAAO37C,GAAU/C,MAAM,KAC/BuU,EAAaxU,EAAMsC,MACnBiS,EAAcvU,EAAM8f,KAAK,KAC/BtT,GAASoF,MAAMktC,EAAaD,EAAYtqC,EAAaC,IAEzD,CAEA,SAAS6pC,GAAkBrjD,GACzB,MAAO,OAAQA,GAAS,aAAcA,CACxC,CC1GO,MAAM+jD,GACXxjD,WAAAA,GACEpiB,KAAK6lE,YAAc,IAAIhB,GAActpB,GAAmB,YAAY,GACpEv7C,KAAK25B,SAAW,IAAIkrC,GAAc/L,GAAS,YAC3C94D,KAAK66B,QAAU,IAAIgqC,GAAc72D,OAAQ,WACzChO,KAAKg7B,OAAS,IAAI6pC,GAAc9I,GAAO,UAGvC/7D,KAAK8lE,iBAAmB,CAAC9lE,KAAK6lE,YAAa7lE,KAAKg7B,OAAQh7B,KAAK25B,SAC/D,CAKAr4B,GAAAA,IAAOpC,GACLc,KAAK+lE,MAAM,WAAY7mE,EACzB,CAEAgC,MAAAA,IAAUhC,GACRc,KAAK+lE,MAAM,aAAc7mE,EAC3B,CAKA8mE,cAAAA,IAAkB9mE,GAChBc,KAAK+lE,MAAM,WAAY7mE,EAAMc,KAAK6lE,YACpC,CAKArpB,WAAAA,IAAet9C,GACbc,KAAK+lE,MAAM,WAAY7mE,EAAMc,KAAK25B,SACpC,CAKAssC,UAAAA,IAAc/mE,GACZc,KAAK+lE,MAAM,WAAY7mE,EAAMc,KAAK66B,QACpC,CAKAqrC,SAAAA,IAAahnE,GACXc,KAAK+lE,MAAM,WAAY7mE,EAAMc,KAAKg7B,OACpC,CAMAmrC,aAAAA,CAAcp1D,GACZ,OAAO/Q,KAAKomE,KAAKr1D,EAAI/Q,KAAK6lE,YAAa,aACzC,CAMAvX,UAAAA,CAAWv9C,GACT,OAAO/Q,KAAKomE,KAAKr1D,EAAI/Q,KAAK25B,SAAU,UACtC,CAMA0sC,SAAAA,CAAUt1D,GACR,OAAO/Q,KAAKomE,KAAKr1D,EAAI/Q,KAAK66B,QAAS,SACrC,CAMAyrC,QAAAA,CAASv1D,GACP,OAAO/Q,KAAKomE,KAAKr1D,EAAI/Q,KAAKg7B,OAAQ,QACpC,CAKAurC,iBAAAA,IAAqBrnE,GACnBc,KAAK+lE,MAAM,aAAc7mE,EAAMc,KAAK6lE,YACtC,CAKAW,cAAAA,IAAkBtnE,GAChBc,KAAK+lE,MAAM,aAAc7mE,EAAMc,KAAK25B,SACtC,CAKA8sC,aAAAA,IAAiBvnE,GACfc,KAAK+lE,MAAM,aAAc7mE,EAAMc,KAAK66B,QACtC,CAKA6rC,YAAAA,IAAgBxnE,GACdc,KAAK+lE,MAAM,aAAc7mE,EAAMc,KAAKg7B,OACtC,CAKA+qC,KAAAA,CAAM/4C,EAAQ9tB,EAAMynE,GAClB,IAAIznE,GAAM6tB,QAAQ65C,IAChB,MAAMC,EAAMF,GAAiB3mE,KAAK8mE,oBAAoBF,GAClDD,GAAiBE,EAAI/B,UAAU8B,IAASC,IAAQ7mE,KAAK66B,SAAW+rC,EAAI71D,GACtE/Q,KAAK+mE,MAAM/5C,EAAQ65C,EAAKD,GAMxB5hD,GAAK4hD,EAAKpoE,IAOR,MAAMwoE,EAAUL,GAAiB3mE,KAAK8mE,oBAAoBtoE,GAC1DwB,KAAK+mE,MAAM/5C,EAAQg6C,EAASxoE,MAIpC,CAKAuoE,KAAAA,CAAM/5C,EAAQqhC,EAAU4Y,GACtB,MAAMC,EAAc9/C,GAAY4F,GAChCpI,GAAKqiD,EAAU,SAAWC,GAAc,GAAID,GAC5C5Y,EAASrhC,GAAQi6C,GACjBriD,GAAKqiD,EAAU,QAAUC,GAAc,GAAID,EAC7C,CAKAH,mBAAAA,CAAoBxnE,GAClB,IAAK,IAAIkV,EAAI,EAAGA,EAAIxU,KAAK8lE,iBAAiBp/D,OAAQ8N,IAAK,CACrD,MAAMqyD,EAAM7mE,KAAK8lE,iBAAiBtxD,GAClC,GAAIqyD,EAAI/B,UAAUxlE,GAChB,OAAOunE,CAEX,CAEA,OAAO7mE,KAAK66B,OACd,CAKAurC,IAAAA,CAAKr1D,EAAI41D,EAAernE,GACtB,MAAMd,EAAOmoE,EAAc1xC,IAAIlkB,GAC/B,QAAa+C,IAATtV,EACF,MAAM,IAAIkoC,MAAM,IAAM31B,EAAK,yBAA2BzR,EAAO,KAE/D,OAAOd,CACT,EAKF,IAAA6vD,GAA+B,IAAIuX,GCtKpB,MAAMuB,GACnB/kD,WAAAA,GACEpiB,KAAKonE,WAAQtzD,CACf,CAYAuzD,MAAAA,CAAO1xC,EAAO2xC,EAAMpoE,EAAM6nC,GAMxB,GALa,eAATugC,IACFtnE,KAAKonE,MAAQpnE,KAAKunE,mBAAmB5xC,GAAO,GAC5C31B,KAAK0zC,QAAQ1zC,KAAKonE,MAAOzxC,EAAO,iBAGf7hB,IAAf9T,KAAKonE,MACP,OAGF,MAAMxuC,EAAcmO,EAAS/mC,KAAKk5B,aAAavD,GAAOoR,OAAOA,GAAU/mC,KAAKk5B,aAAavD,GACnF3M,EAAShpB,KAAK0zC,QAAQ9a,EAAajD,EAAO2xC,EAAMpoE,GAOtD,MALa,iBAATooE,IACFtnE,KAAK0zC,QAAQ9a,EAAajD,EAAO,QACjC31B,KAAK0zC,QAAQ1zC,KAAKonE,MAAOzxC,EAAO,aAChC31B,KAAKonE,WAAQtzD,GAERkV,CACT,CAKA0qB,OAAAA,CAAQ9a,EAAajD,EAAO2xC,EAAMpoE,GAChCA,EAAOA,GAAQ,CAAC,EAChB,IAAK,MAAMsoE,KAAc5uC,EAAa,CACpC,MAAM6uC,EAASD,EAAWC,OACpBz6C,EAASy6C,EAAOH,GAChBxV,EAAS,CAACn8B,EAAOz2B,EAAMsoE,EAAW15D,SACxC,IAA6C,IAAzC8W,GAAaoI,EAAQ8kC,EAAQ2V,IAAqBvoE,EAAKwoE,WACzD,OAAO,CAEX,CAEA,OAAO,CACT,CAEAC,UAAAA,GAMO/jD,GAAc5jB,KAAKnC,UACtBmC,KAAK4nE,UAAY5nE,KAAKnC,OACtBmC,KAAKnC,YAASiW,EAElB,CAMAolB,YAAAA,CAAavD,GACX,GAAI31B,KAAKnC,OACP,OAAOmC,KAAKnC,OAGd,MAAM+6B,EAAc54B,KAAKnC,OAASmC,KAAKunE,mBAAmB5xC,GAI1D,OAFA31B,KAAK6nE,oBAAoBlyC,GAElBiD,CACT,CAEA2uC,kBAAAA,CAAmB5xC,EAAOiiB,GACxB,MAAMhB,EAASjhB,GAASA,EAAMihB,OACxB9oC,EAAUwW,GAAesyB,EAAO9oC,SAAW8oC,EAAO9oC,QAAQ+sB,QAAS,CAAC,GACpEA,EAAUitC,GAAWlxB,GAE3B,OAAmB,IAAZ9oC,GAAsB8pC,EAAWmwB,GAAkBpyC,EAAOkF,EAAS/sB,EAAS8pC,GAAhD,EACrC,CAMAiwB,mBAAAA,CAAoBlyC,GAClB,MAAMqyC,EAAsBhoE,KAAK4nE,WAAa,GACxChvC,EAAc54B,KAAKnC,OACnB+wD,EAAOA,CAACj8C,EAAGC,IAAMD,EAAEo0B,OAAOrxB,IAAM9C,EAAEq1D,KAAKthD,GAAKjR,EAAE+xD,OAAO12D,KAAO4V,EAAE8gD,OAAO12D,KAC3E/Q,KAAK0zC,QAAQkb,EAAKoZ,EAAqBpvC,GAAcjD,EAAO,QAC5D31B,KAAK0zC,QAAQkb,EAAKh2B,EAAaovC,GAAsBryC,EAAO,QAC9D,EAMF,SAASmyC,GAAWlxB,GAClB,MAAMsxB,EAAW,CAAC,EACZrtC,EAAU,GACV5sB,EAAOD,OAAOC,KAAKogD,GAASxzB,QAAQrN,OAC1C,IAAK,IAAIhZ,EAAI,EAAGA,EAAIvG,EAAKvH,OAAQ8N,IAC/BqmB,EAAQ7T,KAAKqnC,GAASgY,UAAUp4D,EAAKuG,KAGvC,MAAMmnB,EAAQib,EAAO/b,SAAW,GAChC,IAAK,IAAIrmB,EAAI,EAAGA,EAAImnB,EAAMj1B,OAAQ8N,IAAK,CACrC,MAAMizD,EAAS9rC,EAAMnnB,IAEY,IAA7BqmB,EAAQ9U,QAAQ0hD,KAClB5sC,EAAQ7T,KAAKygD,GACbS,EAAST,EAAO12D,KAAM,EAE1B,CAEA,MAAO,CAAC8pB,UAASqtC,WACnB,CAEA,SAASC,GAAQr6D,EAAS8pC,GACxB,OAAKA,IAAmB,IAAZ9pC,GAGI,IAAZA,EACK,CAAC,EAEHA,EALE,IAMX,CAEA,SAASi6D,GAAkBpyC,GAAO,QAACkF,EAAO,SAAEqtC,GAAWp6D,EAAS8pC,GAC9D,MAAM5uB,EAAS,GACTwQ,EAAU7D,EAAMyH,aAEtB,IAAK,MAAMqqC,KAAU5sC,EAAS,CAC5B,MAAM9pB,EAAK02D,EAAO12D,GACZivB,EAAOmoC,GAAQr6D,EAAQiD,GAAK6mC,GACrB,OAAT5X,GAGJhX,EAAOhC,KAAK,CACVygD,SACA35D,QAASs6D,GAAWzyC,EAAMihB,OAAQ,CAAC6wB,SAAQ9rC,MAAOusC,EAASn3D,IAAMivB,EAAMxG,IAE3E,CAEA,OAAOxQ,CACT,CAEA,SAASo/C,GAAWxxB,GAAQ,OAAC6wB,EAAM,MAAE9rC,GAAQqE,EAAMxG,GACjD,MAAMvrB,EAAO2oC,EAAOyxB,gBAAgBZ,GAC9B7jC,EAASgT,EAAO2H,gBAAgBve,EAAM/xB,GAK5C,OAJI0tB,GAAS8rC,EAAOp0C,UAElBuQ,EAAO5c,KAAKygD,EAAOp0C,UAEdujB,EAAO4H,eAAe5a,EAAQpK,EAAS,CAAC,IAAK,CAElDuM,YAAY,EACZC,WAAW,EACXF,SAAS,GAEb,CCvLO,SAASwiC,GAAahpE,EAAMwO,GACjC,MAAMy6D,EAAkBl1C,GAASiG,SAASh6B,IAAS,CAAC,EAC9CkpE,GAAkB16D,EAAQwrB,UAAY,CAAC,GAAGh6B,IAAS,CAAC,EAC1D,OAAOkpE,EAAenuC,WAAavsB,EAAQusB,WAAakuC,EAAgBluC,WAAa,GACvF,CAEA,SAASouC,GAA0B13D,EAAIspB,GACrC,IAAI7K,EAAOze,EAMX,MALW,YAAPA,EACFye,EAAO6K,EACS,YAAPtpB,IACTye,EAAqB,MAAd6K,EAAoB,IAAM,KAE5B7K,CACT,CAEA,SAASk5C,GAA0Bl5C,EAAM6K,GACvC,OAAO7K,IAAS6K,EAAY,UAAY,SAC1C,CAEA,SAASsuC,GAAc53D,GACrB,GAAW,MAAPA,GAAqB,MAAPA,GAAqB,MAAPA,EAC9B,OAAOA,CAEX,CAEA,SAAS63D,GAAiBrZ,GACxB,MAAiB,QAAbA,GAAmC,WAAbA,EACjB,IAEQ,SAAbA,GAAoC,UAAbA,EAClB,SADT,CAGF,CAEO,SAASsZ,GAAc93D,KAAO+3D,GACnC,GAAIH,GAAc53D,GAChB,OAAOA,EAET,IAAK,MAAMivB,KAAQ8oC,EAAc,CAC/B,MAAMt5C,EAAOwQ,EAAKxQ,MACbo5C,GAAiB5oC,EAAKuvB,WACtBx+C,EAAGrK,OAAS,GAAKiiE,GAAc53D,EAAG,GAAGgQ,eAC1C,GAAIyO,EACF,OAAOA,CAEX,CACA,MAAM,IAAIkX,MAAM,6BAA6B31B,uDAC/C,CAEA,SAASg4D,GAAmBh4D,EAAIye,EAAMD,GACpC,GAAIA,EAAQC,EAAO,YAAcze,EAC/B,MAAO,CAACye,OAEZ,CAEA,SAASw5C,GAAyBj4D,EAAI6lC,GACpC,GAAIA,EAAOl3C,MAAQk3C,EAAOl3C,KAAK45B,SAAU,CACvC,MAAM2vC,EAAUryB,EAAOl3C,KAAK45B,SAASyN,OAAQj0B,GAAMA,EAAEgqC,UAAY/rC,GAAM+B,EAAEkqC,UAAYjsC,GACrF,GAAIk4D,EAAQviE,OACV,OAAOqiE,GAAmBh4D,EAAI,IAAKk4D,EAAQ,KAAOF,GAAmBh4D,EAAI,IAAKk4D,EAAQ,G,CAG1F,MAAO,CAAC,CACV,CAEA,SAASC,GAAiBtyB,EAAQ9oC,GAChC,MAAMq7D,EAAgBxwC,GAAUie,EAAOt3C,OAAS,CAAC07B,OAAQ,CAAC,GACpDouC,EAAet7D,EAAQktB,QAAU,CAAC,EAClCquC,EAAiBf,GAAa1xB,EAAOt3C,KAAMwO,GAC3CktB,EAAShtB,OAAO4X,OAAO,MAqC7B,OAlCA5X,OAAOC,KAAKm7D,GAAcr8C,QAAQhc,IAChC,MAAMu4D,EAAYF,EAAar4D,GAC/B,IAAKkT,GAASqlD,GACZ,OAAOvmC,QAAQwmC,MAAM,0CAA0Cx4D,KAEjE,GAAIu4D,EAAU/jC,OACZ,OAAOxC,QAAQC,KAAK,kDAAkDjyB,KAExE,MAAMye,EAAOq5C,GAAc93D,EAAIu4D,EAAWN,GAAyBj4D,EAAI6lC,GAASvjB,GAAS2H,OAAOsuC,EAAUhqE,OACpGkqE,EAAYd,GAA0Bl5C,EAAM65C,GAC5CI,EAAsBN,EAAcnuC,QAAU,CAAC,EACrDA,EAAOjqB,GAAMuV,GAAQtY,OAAO4X,OAAO,MAAO,CAAC,CAAC4J,QAAO85C,EAAWG,EAAoBj6C,GAAOi6C,EAAoBD,OAI/G5yB,EAAOl3C,KAAK45B,SAASvM,QAAQwC,IAC3B,MAAMjwB,EAAOiwB,EAAQjwB,MAAQs3C,EAAOt3C,KAC9B+6B,EAAY9K,EAAQ8K,WAAaiuC,GAAahpE,EAAMwO,GACpDy6D,EAAkB5vC,GAAUr5B,IAAS,CAAC,EACtCmqE,EAAsBlB,EAAgBvtC,QAAU,CAAC,EACvDhtB,OAAOC,KAAKw7D,GAAqB18C,QAAQ28C,IACvC,MAAMl6C,EAAOi5C,GAA0BiB,EAAWrvC,GAC5CtpB,EAAKwe,EAAQC,EAAO,WAAaA,EACvCwL,EAAOjqB,GAAMiqB,EAAOjqB,IAAO/C,OAAO4X,OAAO,MACzCU,GAAQ0U,EAAOjqB,GAAK,CAAC,CAACye,QAAO45C,EAAar4D,GAAK04D,EAAoBC,SAKvE17D,OAAOC,KAAK+sB,GAAQjO,QAAQtuB,IAC1B,MAAMs8B,EAAQC,EAAOv8B,GACrB6nB,GAAQyU,EAAO,CAAC1H,GAAS2H,OAAOD,EAAMz7B,MAAO+zB,GAAS0H,UAGjDC,CACT,CAEA,SAAS2uC,GAAY/yB,GACnB,MAAM9oC,EAAU8oC,EAAO9oC,UAAY8oC,EAAO9oC,QAAU,CAAC,GAErDA,EAAQ+sB,QAAUvW,GAAexW,EAAQ+sB,QAAS,CAAC,GACnD/sB,EAAQktB,OAASkuC,GAAiBtyB,EAAQ9oC,EAC5C,CAEA,SAAS87D,GAASlqE,GAIhB,OAHAA,EAAOA,GAAQ,CAAC,EAChBA,EAAK45B,SAAW55B,EAAK45B,UAAY,GACjC55B,EAAKo/C,OAASp/C,EAAKo/C,QAAU,GACtBp/C,CACT,CAEA,SAASmqE,GAAWjzB,GAMlB,OALAA,EAASA,GAAU,CAAC,EACpBA,EAAOl3C,KAAOkqE,GAAShzB,EAAOl3C,MAE9BiqE,GAAY/yB,GAELA,CACT,CAEA,MAAMkzB,GAAW,IAAIp1C,IACfq1C,GAAa,IAAIr8C,IAEvB,SAASs8C,GAAWn1C,EAAUo1C,GAC5B,IAAIh8D,EAAO67D,GAAS70C,IAAIJ,GAMxB,OALK5mB,IACHA,EAAOg8D,IACPH,GAASr8C,IAAIoH,EAAU5mB,GACvB87D,GAAWzoE,IAAI2M,IAEVA,CACT,CAEA,MAAMi8D,GAAaA,CAACz8C,EAAKjL,EAAK/jB,KAC5B,MAAMuhC,EAAO9Y,GAAiB1E,EAAK/jB,QACtBqV,IAATksB,GACFvS,EAAInsB,IAAI0+B,IAIG,MAAMmqC,GACnB/nD,WAAAA,CAAYw0B,GACV52C,KAAKoqE,QAAUP,GAAWjzB,GAC1B52C,KAAKqqE,YAAc,IAAI31C,IACvB10B,KAAKsqE,eAAiB,IAAI51C,GAC5B,CAEA,YAAI+E,GACF,OAAOz5B,KAAKoqE,QAAQ3wC,QACtB,CAEA,QAAIn6B,GACF,OAAOU,KAAKoqE,QAAQ9qE,IACtB,CAEA,QAAIA,CAAKA,GACPU,KAAKoqE,QAAQ9qE,KAAOA,CACtB,CAEA,QAAII,GACF,OAAOM,KAAKoqE,QAAQ1qE,IACtB,CAEA,QAAIA,CAAKA,GACPM,KAAKoqE,QAAQ1qE,KAAOkqE,GAASlqE,EAC/B,CAEA,WAAIoO,GACF,OAAO9N,KAAKoqE,QAAQt8D,OACtB,CAEA,WAAIA,CAAQA,GACV9N,KAAKoqE,QAAQt8D,QAAUA,CACzB,CAEA,WAAI+sB,GACF,OAAO76B,KAAKoqE,QAAQvvC,OACtB,CAEAub,MAAAA,GACE,MAAMQ,EAAS52C,KAAKoqE,QACpBpqE,KAAKuqE,aACLZ,GAAY/yB,EACd,CAEA2zB,UAAAA,GACEvqE,KAAKqqE,YAAYG,QACjBxqE,KAAKsqE,eAAeE,OACtB,CAQAlsB,gBAAAA,CAAiBmsB,GACf,OAAOT,GAAWS,EAChB,IAAM,CAAC,CACL,YAAYA,IACZ,KAEN,CASA/pB,yBAAAA,CAA0B+pB,EAAa3pE,GACrC,OAAOkpE,GAAW,GAAGS,gBAA0B3pE,IAC7C,IAAM,CACJ,CACE,YAAY2pE,iBAA2B3pE,IACvC,eAAeA,KAGjB,CACE,YAAY2pE,IACZ,KAGR,CAUAnqB,uBAAAA,CAAwBmqB,EAAarqB,GACnC,OAAO4pB,GAAW,GAAGS,KAAerqB,IAClC,IAAM,CAAC,CACL,YAAYqqB,cAAwBrqB,IACpC,YAAYqqB,IACZ,YAAYrqB,IACZ,KAEN,CAOAioB,eAAAA,CAAgBZ,GACd,MAAM12D,EAAK02D,EAAO12D,GACZzR,EAAOU,KAAKV,KAClB,OAAO0qE,GAAW,GAAG1qE,YAAeyR,IAClC,IAAM,CAAC,CACL,WAAWA,OACR02D,EAAOiD,wBAA0B,KAE1C,CAKAC,aAAAA,CAAcC,EAAWC,GACvB,MAAMR,EAAcrqE,KAAKqqE,YACzB,IAAI/tC,EAAQ+tC,EAAYp1C,IAAI21C,GAK5B,OAJKtuC,IAASuuC,IACZvuC,EAAQ,IAAI5H,IACZ21C,EAAY58C,IAAIm9C,EAAWtuC,IAEtBA,CACT,CAQAiiB,eAAAA,CAAgBqsB,EAAWE,EAAUD,GACnC,MAAM,QAAC/8D,EAAO,KAAExO,GAAQU,KAClBs8B,EAAQt8B,KAAK2qE,cAAcC,EAAWC,GACtC5vB,EAAS3e,EAAMrH,IAAI61C,GACzB,GAAI7vB,EACF,OAAOA,EAGT,MAAMrX,EAAS,IAAIlW,IAEnBo9C,EAAS/9C,QAAQ9e,IACX28D,IACFhnC,EAAOtiC,IAAIspE,GACX38D,EAAK8e,QAAQtuB,GAAOyrE,GAAWtmC,EAAQgnC,EAAWnsE,KAEpDwP,EAAK8e,QAAQtuB,GAAOyrE,GAAWtmC,EAAQ91B,EAASrP,IAChDwP,EAAK8e,QAAQtuB,GAAOyrE,GAAWtmC,EAAQjL,GAAUr5B,IAAS,CAAC,EAAGb,IAC9DwP,EAAK8e,QAAQtuB,GAAOyrE,GAAWtmC,EAAQvQ,GAAU50B,IACjDwP,EAAK8e,QAAQtuB,GAAOyrE,GAAWtmC,EAAQhL,GAAan6B,MAGtD,MAAMmrB,EAAQ7jB,MAAMU,KAAKm9B,GAOzB,OANqB,IAAjBha,EAAMljB,QACRkjB,EAAM5C,KAAKhZ,OAAO4X,OAAO,OAEvBmkD,GAAWtiD,IAAIqjD,IACjBxuC,EAAM7O,IAAIq9C,EAAUlhD,GAEfA,CACT,CAMAmhD,iBAAAA,GACE,MAAM,QAACj9D,EAAO,KAAExO,GAAQU,KAExB,MAAO,CACL8N,EACA6qB,GAAUr5B,IAAS,CAAC,EACpB+zB,GAASiG,SAASh6B,IAAS,CAAC,EAC5B,CAACA,QACD+zB,GACAuF,GAEJ,CASA2nB,mBAAAA,CAAoB3c,EAAQhjB,EAAO4Y,EAASqK,EAAW,CAAC,KACtD,MAAM7a,EAAS,CAACuuB,SAAS,IACnB,SAACpwB,EAAQ,YAAE6jD,GAAeC,GAAYjrE,KAAKsqE,eAAgB1mC,EAAQC,GACzE,IAAI/1B,EAAUqZ,EACd,GAAI+jD,GAAY/jD,EAAUvG,GAAQ,CAChCoI,EAAOuuB,SAAU,EACjB/d,EAAUjS,GAAWiS,GAAWA,IAAYA,EAE5C,MAAM2xC,EAAcnrE,KAAKw+C,eAAe5a,EAAQpK,EAASwxC,GACzDl9D,EAAUq3B,GAAehe,EAAUqS,EAAS2xC,E,CAG9C,IAAK,MAAM1oC,KAAQ7hB,EACjBoI,EAAOyZ,GAAQ30B,EAAQ20B,GAEzB,OAAOzZ,CACT,CAQAw1B,cAAAA,CAAe5a,EAAQpK,EAASqK,EAAW,CAAC,IAAKyB,GAC/C,MAAM,SAACne,GAAY8jD,GAAYjrE,KAAKsqE,eAAgB1mC,EAAQC,GAC5D,OAAO5f,GAASuV,GACZ2L,GAAehe,EAAUqS,OAAS1lB,EAAWwxB,GAC7Cne,CACN,EAGF,SAAS8jD,GAAYG,EAAexnC,EAAQC,GAC1C,IAAIvH,EAAQ8uC,EAAcn2C,IAAI2O,GACzBtH,IACHA,EAAQ,IAAI5H,IACZ02C,EAAc39C,IAAImW,EAAQtH,IAE5B,MAAMzH,EAAWgP,EAAS8C,OAC1B,IAAIsU,EAAS3e,EAAMrH,IAAIJ,GACvB,IAAKomB,EAAQ,CACX,MAAM9zB,EAAWwc,GAAgBC,EAAQC,GACzCoX,EAAS,CACP9zB,WACA6jD,YAAannC,EAASkD,OAAOhkB,IAAMA,EAAEhC,cAAcwV,SAAS,WAE9D+F,EAAM7O,IAAIoH,EAAUomB,E,CAEtB,OAAOA,CACT,CAEA,MAAMowB,GAAcvmE,GAASmf,GAASnf,IACjCkJ,OAAOipC,oBAAoBnyC,GAAOmjE,KAAMxpE,GAAQ8oB,GAAWziB,EAAMrG,KAEtE,SAASysE,GAAY9lC,EAAOxkB,GAC1B,MAAM,aAACslB,EAAY,YAAEC,GAAejN,GAAakM,GAEjD,IAAK,MAAM3C,KAAQ7hB,EAAO,CACxB,MAAMmlB,EAAaG,EAAazD,GAC1BuD,EAAYG,EAAY1D,GACxB39B,GAASkhC,GAAaD,IAAeX,EAAM3C,GACjD,GAAKsD,IAAexe,GAAWziB,IAAUumE,GAAYvmE,KAC/CkhC,GAAapxB,GAAQ9P,GACzB,OAAO,CAEX,CACA,OAAO,CACT,C,eC9YA,MAAMwmE,GAAkB,CAAC,MAAO,SAAU,OAAQ,QAAS,aAC3D,SAASC,GAAqBhc,EAAU//B,GACtC,MAAoB,QAAb+/B,GAAmC,WAAbA,IAAiE,IAAvC+b,GAAgBvlD,QAAQwpC,IAA6B,MAAT//B,CACrG,CAEA,SAASg8C,GAAcC,EAAIC,GACzB,OAAO,SAAS/4D,EAAGC,GACjB,OAAOD,EAAE84D,KAAQ74D,EAAE64D,GACf94D,EAAE+4D,GAAM94D,EAAE84D,GACV/4D,EAAE84D,GAAM74D,EAAE64D,EAChB,CACF,CAEA,SAASE,GAAqBnyC,GAC5B,MAAM7D,EAAQ6D,EAAQ7D,MAChBohB,EAAmBphB,EAAM7nB,QAAQgmB,UAEvC6B,EAAMupC,cAAc,eACpBt6C,GAAamyB,GAAoBA,EAAiB60B,WAAY,CAACpyC,GAAU7D,EAC3E,CAEA,SAASk2C,GAAoBryC,GAC3B,MAAM7D,EAAQ6D,EAAQ7D,MAChBohB,EAAmBphB,EAAM7nB,QAAQgmB,UACvClP,GAAamyB,GAAoBA,EAAiB+0B,WAAY,CAACtyC,GAAU7D,EAC3E,CAMA,SAASo2C,GAAUvtE,GAYjB,OAXIisC,MAAqC,kBAATjsC,EAC9BA,EAAOksC,SAASshC,eAAextE,GACtBA,GAAQA,EAAKkI,SAEtBlI,EAAOA,EAAK,IAGVA,GAAQA,EAAK2+B,SAEf3+B,EAAOA,EAAK2+B,QAEP3+B,CACT,CAEA,MAAMytE,GAAY,CAAC,EACbC,GAAYztE,IAChB,MAAM0+B,EAAS4uC,GAAUttE,GACzB,OAAOuP,OAAOse,OAAO2/C,IAAWllC,OAAQl0B,GAAMA,EAAEsqB,SAAWA,GAAQhU,OAGrE,SAASgjD,GAAgB3pD,EAAKlc,EAAOy7C,GACnC,MAAM9zC,EAAOD,OAAOC,KAAKuU,GACzB,IAAK,MAAM/jB,KAAOwP,EAAM,CACtB,MAAMm+D,GAAU3tE,EAChB,GAAI2tE,GAAU9lE,EAAO,CACnB,MAAMxB,EAAQ0d,EAAI/jB,UACX+jB,EAAI/jB,IACPsjD,EAAO,GAAKqqB,EAAS9lE,KACvBkc,EAAI4pD,EAASrqB,GAAQj9C,E,CAG3B,CACF,CASA,SAASunE,GAAmBt5D,EAAGu5D,EAAWC,EAAaC,GACrD,OAAKD,GAA0B,aAAXx5D,EAAEzT,KAGlBktE,EACKF,EAEFv5D,EALE,IAMX,CAEA,MAAM05D,GASJ,eAAOzH,IAAYx3C,GACjB6gC,GAAS/sD,OAAOksB,GAChBk/C,IACF,CAEA,iBAAOtH,IAAc53C,GACnB6gC,GAASntD,UAAUssB,GACnBk/C,IACF,CAGAtqD,WAAAA,CAAY5jB,EAAMmuE,GAChB,MAAM/1B,EAAS52C,KAAK42C,OAAS,IAAIuzB,GAAOwC,GAClCC,EAAgBb,GAAUvtE,GAC1BquE,EAAgBX,GAASU,GAC/B,GAAIC,EACF,MAAM,IAAInmC,MACR,4CAA+CmmC,EAAc97D,GAA7D,kDACgD87D,EAAc1vC,OAAOpsB,GAAK,oBAI9E,MAAMjD,EAAU8oC,EAAO4H,eAAe5H,EAAOm0B,oBAAqB/qE,KAAKo9B,cAEvEp9B,KAAKy5B,SAAW,IAAKmd,EAAOnd,UAAYm/B,GAAgBgU,IACxD5sE,KAAKy5B,SAASw7B,aAAare,GAE3B,MAAMpd,EAAUx5B,KAAKy5B,SAASq7B,eAAe8X,EAAe9+D,EAAQ4/B,aAC9DvQ,EAAS3D,GAAWA,EAAQ2D,OAC5BI,EAASJ,GAAUA,EAAOI,OAC1Bt9B,EAAQk9B,GAAUA,EAAOl9B,MAE/BD,KAAK+Q,GAAK4S,KACV3jB,KAAKk6B,IAAMV,EACXx5B,KAAKm9B,OAASA,EACdn9B,KAAKC,MAAQA,EACbD,KAAKu9B,OAASA,EACdv9B,KAAK8sE,SAAWh/D,EAIhB9N,KAAK+sE,aAAe/sE,KAAK0tC,YACzB1tC,KAAKo0D,QAAU,GACfp0D,KAAKgtE,UAAY,GACjBhtE,KAAKg6C,aAAUlmC,EACf9T,KAAKsxD,MAAQ,GACbtxD,KAAKg9B,6BAA0BlpB,EAC/B9T,KAAKgzC,eAAYl/B,EACjB9T,KAAKs0C,QAAU,GACft0C,KAAKitE,gBAAan5D,EAClB9T,KAAKktE,WAAa,CAAC,EAEnBltE,KAAKmtE,0BAAuBr5D,EAC5B9T,KAAKotE,gBAAkB,GACvBptE,KAAKg7B,OAAS,CAAC,EACfh7B,KAAKqtE,SAAW,IAAIlG,GACpBnnE,KAAKu4D,SAAW,CAAC,EACjBv4D,KAAKstE,eAAiB,CAAC,EACvBttE,KAAKutE,UAAW,EAChBvtE,KAAK8gD,yBAAsBhtC,EAC3B9T,KAAKk8C,cAAWpoC,EAChB9T,KAAKwtE,UAAYx/C,GAASuM,GAAQv6B,KAAKo2C,OAAO7b,GAAOzsB,EAAQ2/D,aAAe,GAC5EztE,KAAKmiD,aAAe,GAGpB8pB,GAAUjsE,KAAK+Q,IAAM/Q,KAEhBw5B,GAAY2D,GASjBgY,GAASN,OAAO70C,KAAM,WAAY2rE,IAClCx2B,GAASN,OAAO70C,KAAM,WAAY6rE,IAElC7rE,KAAK0tE,cACD1tE,KAAKutE,UACPvtE,KAAKo2C,UATLrT,QAAQwmC,MAAM,oEAWlB,CAEA,eAAI77B,GACF,MAAO5/B,SAAS,YAAC4/B,EAAW,oBAAEhT,GAAoB,MAAEz6B,EAAA,OAAOs9B,EAAM,aAAEwvC,GAAgB/sE,KACnF,OAAK4jB,GAAc8pB,GAKfhT,GAAuBqyC,EAElBA,EAIFxvC,EAASt9B,EAAQs9B,EAAS,KATxBmQ,CAUX,CAEA,QAAIhuC,GACF,OAAOM,KAAK42C,OAAOl3C,IACrB,CAEA,QAAIA,CAAKA,GACPM,KAAK42C,OAAOl3C,KAAOA,CACrB,CAEA,WAAIoO,GACF,OAAO9N,KAAK8sE,QACd,CAEA,WAAIh/D,CAAQA,GACV9N,KAAK42C,OAAO9oC,QAAUA,CACxB,CAEA,YAAIugD,GACF,OAAOA,EACT,CAKAqf,WAAAA,GAeE,OAbA1tE,KAAKk/D,cAAc,cAEfl/D,KAAK8N,QAAQgtB,WACf96B,KAAK+zB,SAEL+Z,GAAY9tC,KAAMA,KAAK8N,QAAQyrB,kBAGjCv5B,KAAK2tE,aAGL3tE,KAAKk/D,cAAc,aAEZl/D,IACT,CAEAwqE,KAAAA,GAEE,OADAttC,GAAYl9B,KAAKm9B,OAAQn9B,KAAKk6B,KACvBl6B,IACT,CAEAqxC,IAAAA,GAEE,OADA8D,GAAS9D,KAAKrxC,MACPA,IACT,CAOA+zB,MAAAA,CAAO9zB,EAAOs9B,GACP4X,GAASf,QAAQp0C,MAGpBA,KAAK4tE,kBAAoB,CAAC3tE,QAAOs9B,UAFjCv9B,KAAK6tE,QAAQ5tE,EAAOs9B,EAIxB,CAEAswC,OAAAA,CAAQ5tE,EAAOs9B,GACb,MAAMzvB,EAAU9N,KAAK8N,QACfqvB,EAASn9B,KAAKm9B,OACduQ,EAAc5/B,EAAQ4sB,qBAAuB16B,KAAK0tC,YAClDogC,EAAU9tE,KAAKy5B,SAAS8T,eAAepQ,EAAQl9B,EAAOs9B,EAAQmQ,GAC9DqgC,EAAWjgE,EAAQyrB,kBAAoBv5B,KAAKy5B,SAASC,sBACrDa,EAAOv6B,KAAKC,MAAQ,SAAW,SAErCD,KAAKC,MAAQ6tE,EAAQ7tE,MACrBD,KAAKu9B,OAASuwC,EAAQvwC,OACtBv9B,KAAK+sE,aAAe/sE,KAAK0tC,YACpBI,GAAY9tC,KAAM+tE,GAAU,KAIjC/tE,KAAKk/D,cAAc,SAAU,CAAC7xD,KAAMygE,IAEpClpD,GAAa9W,EAAQkgE,SAAU,CAAChuE,KAAM8tE,GAAU9tE,MAE5CA,KAAKutE,UACHvtE,KAAKwtE,UAAUjzC,IAEjBv6B,KAAKrC,SAGX,CAEAswE,mBAAAA,GACE,MAAMngE,EAAU9N,KAAK8N,QACfogE,EAAgBpgE,EAAQktB,QAAU,CAAC,EAEzChW,GAAKkpD,EAAe,CAACC,EAAajmB,KAChCimB,EAAYp9D,GAAKm3C,GAErB,CAKAkmB,mBAAAA,GACE,MAAMtgE,EAAU9N,KAAK8N,QACfugE,EAAYvgE,EAAQktB,OACpBA,EAASh7B,KAAKg7B,OACdszC,EAAUtgE,OAAOC,KAAK+sB,GAAQ+Z,OAAO,CAACvyB,EAAKzR,KAC/CyR,EAAIzR,IAAM,EACHyR,GACN,CAAC,GACJ,IAAIgL,EAAQ,GAER6gD,IACF7gD,EAAQA,EAAMs1B,OACZ90C,OAAOC,KAAKogE,GAAWx5D,IAAK9D,IAC1B,MAAM+3D,EAAeuF,EAAUt9D,GACzBye,EAAOq5C,GAAc93D,EAAI+3D,GACzByF,EAAoB,MAAT/+C,EACXo1B,EAAwB,MAATp1B,EACrB,MAAO,CACL1hB,QAASg7D,EACT0F,UAAWD,EAAW,YAAc3pB,EAAe,SAAW,OAC9D6pB,MAAOF,EAAW,eAAiB3pB,EAAe,WAAa,cAMvE5/B,GAAKwI,EAAQhvB,IACX,MAAMsqE,EAAetqE,EAAKsP,QACpBiD,EAAK+3D,EAAa/3D,GAClBye,EAAOq5C,GAAc93D,EAAI+3D,GACzB4F,EAAYpqD,GAAewkD,EAAaxpE,KAAMd,EAAKiwE,YAE3B36D,IAA1Bg1D,EAAavZ,UAA0Bgc,GAAqBzC,EAAavZ,SAAU//B,KAAU+7C,GAAqB/sE,EAAKgwE,aACzH1F,EAAavZ,SAAW/wD,EAAKgwE,WAG/BF,EAAQv9D,IAAM,EACd,IAAIgqB,EAAQ,KACZ,GAAIhqB,KAAMiqB,GAAUA,EAAOjqB,GAAIzR,OAASovE,EACtC3zC,EAAQC,EAAOjqB,OACV,CACL,MAAM49D,EAAatgB,GAASiY,SAASoI,GACrC3zC,EAAQ,IAAI4zC,EAAW,CACrB59D,KACAzR,KAAMovE,EACNx0C,IAAKl6B,KAAKk6B,IACVvE,MAAO31B,OAETg7B,EAAOD,EAAMhqB,IAAMgqB,C,CAGrBA,EAAM2zB,KAAKoa,EAAch7D,KAG3BkX,GAAKspD,EAAS,CAACM,EAAY79D,KACpB69D,UACI5zC,EAAOjqB,KAIlBiU,GAAKgW,EAASD,IACZ22B,GAAQ5a,UAAU92C,KAAM+6B,EAAOA,EAAMjtB,SACrC4jD,GAAQyC,OAAOn0D,KAAM+6B,IAEzB,CAKA8zC,eAAAA,GACE,MAAM12B,EAAWn4C,KAAKgtE,UAChBprB,EAAU5hD,KAAKN,KAAK45B,SAAS5yB,OAC7Bi7C,EAAUxJ,EAASzxC,OAGzB,GADAyxC,EAASjvB,KAAK,CAACvW,EAAGC,IAAMD,EAAEjU,MAAQkU,EAAElU,OAChCijD,EAAUC,EAAS,CACrB,IAAK,IAAIptC,EAAIotC,EAASptC,EAAImtC,IAAWntC,EACnCxU,KAAK8uE,oBAAoBt6D,GAE3B2jC,EAAS7qB,OAAOs0B,EAASD,EAAUC,E,CAErC5hD,KAAKotE,gBAAkBj1B,EAASn0B,MAAM,GAAGkF,KAAKsiD,GAAc,QAAS,SACvE,CAKAuD,2BAAAA,GACE,MAAO/B,UAAW70B,EAAUz4C,MAAM,SAAC45B,IAAat5B,KAC5Cm4C,EAASzxC,OAAS4yB,EAAS5yB,eACtB1G,KAAKg6C,QAEd7B,EAASprB,QAAQ,CAAC+B,EAAMpwB,KACmC,IAArD46B,EAASyN,OAAOrxB,GAAKA,IAAMoZ,EAAKu9B,UAAU3lD,QAC5C1G,KAAK8uE,oBAAoBpwE,IAG/B,CAEAswE,wBAAAA,GACE,MAAMC,EAAiB,GACjB31C,EAAWt5B,KAAKN,KAAK45B,SAC3B,IAAI9kB,EAAG8Q,EAIP,IAFAtlB,KAAK+uE,8BAEAv6D,EAAI,EAAG8Q,EAAOgU,EAAS5yB,OAAQ8N,EAAI8Q,EAAM9Q,IAAK,CACjD,MAAM+a,EAAU+J,EAAS9kB,GACzB,IAAIsa,EAAO9uB,KAAKy9C,eAAejpC,GAC/B,MAAMlV,EAAOiwB,EAAQjwB,MAAQU,KAAK42C,OAAOt3C,KAazC,GAXIwvB,EAAKxvB,MAAQwvB,EAAKxvB,OAASA,IAC7BU,KAAK8uE,oBAAoBt6D,GACzBsa,EAAO9uB,KAAKy9C,eAAejpC,IAE7Bsa,EAAKxvB,KAAOA,EACZwvB,EAAKuL,UAAY9K,EAAQ8K,WAAaiuC,GAAahpE,EAAMU,KAAK8N,SAC9DghB,EAAKogD,MAAQ3/C,EAAQ2/C,OAAS,EAC9BpgD,EAAKpwB,MAAQ8V,EACbsa,EAAKxhB,MAAQ,GAAKiiB,EAAQjiB,MAC1BwhB,EAAKoF,QAAUl0B,KAAKiqD,iBAAiBz1C,GAEjCsa,EAAKgrB,WACPhrB,EAAKgrB,WAAW4C,YAAYloC,GAC5Bsa,EAAKgrB,WAAWyC,iBACX,CACL,MAAM4yB,EAAkB9gB,GAAS8X,cAAc7mE,IACzC,mBAAC88C,EAAA,gBAAoBC,GAAmBhpB,GAASiG,SAASh6B,GAChE0O,OAAO8T,OAAOqtD,EAAiB,CAC7B9yB,gBAAiBgS,GAASC,WAAWjS,GACrCD,mBAAoBA,GAAsBiS,GAASC,WAAWlS,KAEhEttB,EAAKgrB,WAAa,IAAIq1B,EAAgBnvE,KAAMwU,GAC5Cy6D,EAAejoD,KAAK8H,EAAKgrB,W,CAE7B,CAGA,OADA95C,KAAK6uE,kBACEI,CACT,CAMAG,cAAAA,GACEpqD,GAAKhlB,KAAKN,KAAK45B,SAAU,CAAC/J,EAAS9J,KACjCzlB,KAAKy9C,eAAeh4B,GAAcq0B,WAAW8D,SAC5C59C,KACL,CAKA49C,KAAAA,GACE59C,KAAKovE,iBACLpvE,KAAKk/D,cAAc,QACrB,CAEA9oB,MAAAA,CAAO7b,GACL,MAAMqc,EAAS52C,KAAK42C,OAEpBA,EAAOR,SACP,MAAMtoC,EAAU9N,KAAK8sE,SAAWl2B,EAAO4H,eAAe5H,EAAOm0B,oBAAqB/qE,KAAKo9B,cACjFiyC,EAAgBrvE,KAAK8gD,qBAAuBhzC,EAAQgmB,UAU1D,GARA9zB,KAAKsvE,gBACLtvE,KAAKuvE,sBACLvvE,KAAKwvE,uBAILxvE,KAAKqtE,SAAS1F,cAEuD,IAAjE3nE,KAAKk/D,cAAc,eAAgB,CAAC3kC,OAAMmtC,YAAY,IACxD,OAIF,MAAMuH,EAAiBjvE,KAAKgvE,2BAE5BhvE,KAAKk/D,cAAc,wBAGnB,IAAI1K,EAAa,EACjB,IAAK,IAAIhgD,EAAI,EAAG8Q,EAAOtlB,KAAKN,KAAK45B,SAAS5yB,OAAQ8N,EAAI8Q,EAAM9Q,IAAK,CAC/D,MAAM,WAACslC,GAAc95C,KAAKy9C,eAAejpC,GACnCopC,GAASyxB,IAAyD,IAAxCJ,EAAelpD,QAAQ+zB,GAGvDA,EAAWkE,sBAAsBJ,GACjC4W,EAAavlD,KAAK6C,KAAKgoC,EAAWgG,iBAAkB0U,EACtD,CACAA,EAAax0D,KAAKyvE,YAAc3hE,EAAQmkD,OAAO59B,YAAcmgC,EAAa,EAC1Ex0D,KAAK0vE,cAAclb,GAGd6a,GAGHrqD,GAAKiqD,EAAiBn1B,IACpBA,EAAW8D,UAIf59C,KAAK2vE,gBAAgBp1C,GAGrBv6B,KAAKk/D,cAAc,cAAe,CAAC3kC,SAEnCv6B,KAAKo0D,QAAQlrC,KAAKsiD,GAAc,IAAK,SAGrC,MAAM,QAACl3B,EAAO,WAAE24B,GAAcjtE,KAC1BitE,EACFjtE,KAAK4vE,cAAc3C,GAAY,GACtB34B,EAAQ5tC,QACjB1G,KAAK6vE,mBAAmBv7B,EAASA,GAAS,GAG5Ct0C,KAAKrC,QACP,CAKA2xE,aAAAA,GACEtqD,GAAKhlB,KAAKg7B,OAASD,IACjB22B,GAAQ4C,UAAUt0D,KAAM+6B,KAG1B/6B,KAAKiuE,sBACLjuE,KAAKouE,qBACP,CAKAmB,mBAAAA,GACE,MAAMzhE,EAAU9N,KAAK8N,QACfgiE,EAAiB,IAAIpiD,IAAI1f,OAAOC,KAAKjO,KAAKktE,aAC1C6C,EAAY,IAAIriD,IAAI5f,EAAQ8rB,QAE7BpS,GAAUsoD,EAAgBC,MAAgB/vE,KAAKmtE,uBAAyBr/D,EAAQgtB,aAEnF96B,KAAKgwE,eACLhwE,KAAK2tE,aAET,CAKA6B,oBAAAA,GACE,MAAM,eAAClC,GAAkBttE,KACnBiwE,EAAUjwE,KAAKkwE,0BAA4B,GACjD,IAAK,MAAM,OAACljD,EAAM,MAAE1mB,EAAA,MAAO+H,KAAU4hE,EAAS,CAC5C,MAAMluB,EAAkB,oBAAX/0B,GAAgC3e,EAAQA,EACrD89D,GAAgBmB,EAAgBhnE,EAAOy7C,EACzC,CACF,CAKAmuB,sBAAAA,GACE,MAAM/tB,EAAeniD,KAAKmiD,aAC1B,IAAKA,IAAiBA,EAAaz7C,OACjC,OAGF1G,KAAKmiD,aAAe,GACpB,MAAMguB,EAAenwE,KAAKN,KAAK45B,SAAS5yB,OAClC0pE,EAAW5O,GAAQ,IAAI9zC,IAC3By0B,EACGpb,OAAOl0B,GAAKA,EAAE,KAAO2uD,GACrB3sD,IAAI,CAAChC,EAAG2B,IAAMA,EAAI,IAAM3B,EAAEya,OAAO,GAAGqZ,KAAK,OAGxC0pC,EAAYD,EAAQ,GAC1B,IAAK,IAAI57D,EAAI,EAAGA,EAAI27D,EAAc37D,IAChC,IAAKgT,GAAU6oD,EAAWD,EAAQ57D,IAChC,OAGJ,OAAOzO,MAAMU,KAAK4pE,GACfx7D,IAAIhC,GAAKA,EAAEiU,MAAM,MACjBjS,IAAIlC,IAAA,CAAOqa,OAAQra,EAAE,GAAIrM,OAAQqM,EAAE,GAAItE,OAAQsE,EAAE,KACtD,CAOA+8D,aAAAA,CAAclb,GACZ,IAA+D,IAA3Dx0D,KAAKk/D,cAAc,eAAgB,CAACwI,YAAY,IAClD,OAGFhW,GAAQtb,OAAOp2C,KAAMA,KAAKC,MAAOD,KAAKu9B,OAAQi3B,GAE9C,MAAMv1B,EAAOj/B,KAAKgzC,UACZs9B,EAASrxC,EAAKh/B,OAAS,GAAKg/B,EAAK1B,QAAU,EAEjDv9B,KAAKo0D,QAAU,GACfpvC,GAAKhlB,KAAKsxD,MAAQllB,IACZkkC,GAA2B,cAAjBlkC,EAAImjB,WAOdnjB,EAAI0K,WACN1K,EAAI0K,YAEN92C,KAAKo0D,QAAQptC,QAAQolB,EAAIgoB,aACxBp0D,MAEHA,KAAKo0D,QAAQrnC,QAAQ,CAACvuB,EAAME,KAC1BF,EAAK+xE,KAAO7xE,IAGdsB,KAAKk/D,cAAc,cACrB,CAOAyQ,eAAAA,CAAgBp1C,GACd,IAA6E,IAAzEv6B,KAAKk/D,cAAc,uBAAwB,CAAC3kC,OAAMmtC,YAAY,IAAlE,CAIA,IAAK,IAAIlzD,EAAI,EAAG8Q,EAAOtlB,KAAKN,KAAK45B,SAAS5yB,OAAQ8N,EAAI8Q,IAAQ9Q,EAC5DxU,KAAKy9C,eAAejpC,GAAGslC,WAAWhD,YAGpC,IAAK,IAAItiC,EAAI,EAAG8Q,EAAOtlB,KAAKN,KAAK45B,SAAS5yB,OAAQ8N,EAAI8Q,IAAQ9Q,EAC5DxU,KAAKwwE,eAAeh8D,EAAG+S,GAAWgT,GAAQA,EAAK,CAAC9U,aAAcjR,IAAM+lB,GAGtEv6B,KAAKk/D,cAAc,sBAAuB,CAAC3kC,Q,CAC7C,CAOAi2C,cAAAA,CAAe9xE,EAAO67B,GACpB,MAAMzL,EAAO9uB,KAAKy9C,eAAe/+C,GAC3BQ,EAAO,CAAC4vB,OAAMpwB,QAAO67B,OAAMmtC,YAAY,IAEW,IAApD1nE,KAAKk/D,cAAc,sBAAuBhgE,KAI9C4vB,EAAKgrB,WAAW7F,QAAQ1Z,GAExBr7B,EAAKwoE,YAAa,EAClB1nE,KAAKk/D,cAAc,qBAAsBhgE,GAC3C,CAEAvB,MAAAA,IACiE,IAA3DqC,KAAKk/D,cAAc,eAAgB,CAACwI,YAAY,MAIhDvyB,GAAS1tB,IAAIznB,MACXA,KAAKutE,WAAap4B,GAASf,QAAQp0C,OACrCm1C,GAAS7uC,MAAMtG,OAGjBA,KAAKq0C,OACLs3B,GAAqB,CAACh2C,MAAO31B,QAEjC,CAEAq0C,IAAAA,GACE,IAAI7/B,EACJ,GAAIxU,KAAK4tE,kBAAmB,CAC1B,MAAM,MAAC3tE,EAAA,OAAOs9B,GAAUv9B,KAAK4tE,kBAE7B5tE,KAAK4tE,kBAAoB,KACzB5tE,KAAK6tE,QAAQ5tE,EAAOs9B,E,CAItB,GAFAv9B,KAAKwqE,QAEDxqE,KAAKC,OAAS,GAAKD,KAAKu9B,QAAU,EACpC,OAGF,IAA6D,IAAzDv9B,KAAKk/D,cAAc,aAAc,CAACwI,YAAY,IAChD,OAMF,MAAM+I,EAASzwE,KAAKo0D,QACpB,IAAK5/C,EAAI,EAAGA,EAAIi8D,EAAO/pE,QAAU+pE,EAAOj8D,GAAG6/C,GAAK,IAAK7/C,EACnDi8D,EAAOj8D,GAAG6/B,KAAKr0C,KAAKgzC,WAMtB,IAHAhzC,KAAK0wE,gBAGEl8D,EAAIi8D,EAAO/pE,SAAU8N,EAC1Bi8D,EAAOj8D,GAAG6/B,KAAKr0C,KAAKgzC,WAGtBhzC,KAAKk/D,cAAc,YACrB,CAKA9mB,sBAAAA,CAAuBF,GACrB,MAAMC,EAAWn4C,KAAKotE,gBAChBpkD,EAAS,GACf,IAAIxU,EAAG8Q,EAEP,IAAK9Q,EAAI,EAAG8Q,EAAO6yB,EAASzxC,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CACjD,MAAMsa,EAAOqpB,EAAS3jC,GACjB0jC,IAAiBppB,EAAKoF,SACzBlL,EAAOhC,KAAK8H,EAEhB,CAEA,OAAO9F,CACT,CAMAwmC,4BAAAA,GACE,OAAOxvD,KAAKo4C,wBAAuB,EACrC,CAOAs4B,aAAAA,GACE,IAAqE,IAAjE1wE,KAAKk/D,cAAc,qBAAsB,CAACwI,YAAY,IACxD,OAGF,MAAMvvB,EAAWn4C,KAAKwvD,+BACtB,IAAK,IAAIh7C,EAAI2jC,EAASzxC,OAAS,EAAG8N,GAAK,IAAKA,EAC1CxU,KAAK2wE,aAAax4B,EAAS3jC,IAG7BxU,KAAKk/D,cAAc,oBACrB,CAOAyR,YAAAA,CAAa7hD,GACX,MAAMoL,EAAMl6B,KAAKk6B,IACXh7B,EAAO,CACX4vB,OACApwB,MAAOowB,EAAKpwB,MACZgpE,YAAY,GAGR5wC,EAAOqc,GAAmBnzC,KAAM8uB,IAEgB,IAAlD9uB,KAAKk/D,cAAc,oBAAqBhgE,KAIxC43B,GACFqI,GAASjF,EAAKpD,GAGhBhI,EAAKgrB,WAAWzF,OAEZvd,GACFsI,GAAWlF,GAGbh7B,EAAKwoE,YAAa,EAClB1nE,KAAKk/D,cAAc,mBAAoBhgE,GACzC,CAOA8wD,aAAAA,CAAcjgC,GACZ,OAAOiP,GAAejP,EAAO/vB,KAAKgzC,UAAWhzC,KAAKyvE,YACpD,CAEAmB,yBAAAA,CAA0B79D,EAAGwnB,EAAMzsB,EAASiiD,GAC1C,MAAM/iC,EAAS8jC,GAAYC,MAAMx2B,GACjC,MAAsB,oBAAXvN,EACFA,EAAOhtB,KAAM+S,EAAGjF,EAASiiD,GAG3B,EACT,CAEAtS,cAAAA,CAAeh4B,GACb,MAAM8J,EAAUvvB,KAAKN,KAAK45B,SAAS7T,GAC7B0yB,EAAWn4C,KAAKgtE,UACtB,IAAIl+C,EAAOqpB,EAASpR,OAAOrxB,GAAKA,GAAKA,EAAE22C,WAAa98B,GAASpG,MAoB7D,OAlBK2F,IACHA,EAAO,CACLxvB,KAAM,KACNI,KAAM,GACN6vB,QAAS,KACTuqB,WAAY,KACZuB,OAAQ,KACRyB,QAAS,KACTE,QAAS,KACTkyB,MAAO3/C,GAAWA,EAAQ2/C,OAAS,EACnCxwE,MAAO+mB,EACP4mC,SAAU98B,EACVF,QAAS,GACTH,SAAS,GAEXipB,EAASnxB,KAAK8H,IAGTA,CACT,CAEAsO,UAAAA,GACE,OAAOp9B,KAAKk8C,WAAal8C,KAAKk8C,SAAWzY,GAAc,KAAM,CAAC9N,MAAO31B,KAAMV,KAAM,UACnF,CAEA8tD,sBAAAA,GACE,OAAOptD,KAAKwvD,+BAA+B9oD,MAC7C,CAEAujD,gBAAAA,CAAiBxkC,GACf,MAAM8J,EAAUvvB,KAAKN,KAAK45B,SAAS7T,GACnC,IAAK8J,EACH,OAAO,EAGT,MAAMT,EAAO9uB,KAAKy9C,eAAeh4B,GAIjC,MAA8B,mBAAhBqJ,EAAKusB,QAAwBvsB,EAAKusB,QAAU9rB,EAAQ8rB,MACpE,CAEAw1B,oBAAAA,CAAqBprD,EAAcyO,GACjC,MAAMpF,EAAO9uB,KAAKy9C,eAAeh4B,GACjCqJ,EAAKusB,QAAUnnB,CACjB,CAEAi4B,oBAAAA,CAAqBztD,GACnBsB,KAAKstE,eAAe5uE,IAAUsB,KAAKstE,eAAe5uE,EACpD,CAEA8oD,iBAAAA,CAAkB9oD,GAChB,OAAQsB,KAAKstE,eAAe5uE,EAC9B,CAKAoyE,iBAAAA,CAAkBrrD,EAAcm1B,EAAW1mB,GACzC,MAAMqG,EAAOrG,EAAU,OAAS,OAC1BpF,EAAO9uB,KAAKy9C,eAAeh4B,GAC3BkuB,EAAQ7kB,EAAKgrB,WAAW2G,wBAAmB3sC,EAAWymB,GAExDjT,GAAQszB,IACV9rB,EAAKpvB,KAAKk7C,GAAWS,QAAUnnB,EAC/Bl0B,KAAKo2C,WAELp2C,KAAK6wE,qBAAqBprD,EAAcyO,GAExCyf,EAAMyC,OAAOtnB,EAAM,CAACoF,YACpBl0B,KAAKo2C,OAAQlc,GAAQA,EAAIzU,eAAiBA,EAAe8U,OAAOzmB,GAEpE,CAEAqgB,IAAAA,CAAK1O,EAAcm1B,GACjB56C,KAAK8wE,kBAAkBrrD,EAAcm1B,GAAW,EAClD,CAEA5mB,IAAAA,CAAKvO,EAAcm1B,GACjB56C,KAAK8wE,kBAAkBrrD,EAAcm1B,GAAW,EAClD,CAKAk0B,mBAAAA,CAAoBrpD,GAClB,MAAMqJ,EAAO9uB,KAAKgtE,UAAUvnD,GACxBqJ,GAAQA,EAAKgrB,YACfhrB,EAAKgrB,WAAW+D,kBAEX79C,KAAKgtE,UAAUvnD,EACxB,CAEAsrD,KAAAA,GACE,IAAIv8D,EAAG8Q,EAIP,IAHAtlB,KAAKqxC,OACL8D,GAASj0C,OAAOlB,MAEXwU,EAAI,EAAG8Q,EAAOtlB,KAAKN,KAAK45B,SAAS5yB,OAAQ8N,EAAI8Q,IAAQ9Q,EACxDxU,KAAK8uE,oBAAoBt6D,EAE7B,CAEAw8D,OAAAA,GACEhxE,KAAKk/D,cAAc,iBACnB,MAAM,OAAC/hC,EAAM,IAAEjD,GAAOl6B,KAEtBA,KAAK+wE,QACL/wE,KAAK42C,OAAO2zB,aAERptC,IACFn9B,KAAKgwE,eACL9yC,GAAYC,EAAQjD,GACpBl6B,KAAKy5B,SAASs7B,eAAe76B,GAC7Bl6B,KAAKm9B,OAAS,KACdn9B,KAAKk6B,IAAM,aAGN+xC,GAAUjsE,KAAK+Q,IAEtB/Q,KAAKk/D,cAAc,eACrB,CAEA+R,aAAAA,IAAiB/xE,GACf,OAAOc,KAAKm9B,OAAO+zC,aAAahyE,EAClC,CAKAyuE,UAAAA,GACE3tE,KAAKmxE,iBACDnxE,KAAK8N,QAAQgtB,WACf96B,KAAKoxE,uBAELpxE,KAAKutE,UAAW,CAEpB,CAKA4D,cAAAA,GACE,MAAMxkD,EAAY3sB,KAAKktE,WACjBzzC,EAAWz5B,KAAKy5B,SAEhB43C,EAAOA,CAAC/xE,EAAMmtB,KAClBgN,EAASj4B,iBAAiBxB,KAAMV,EAAMmtB,GACtCE,EAAUrtB,GAAQmtB,GAGdA,EAAWA,CAAC1Z,EAAG2C,EAAGiR,KACtB5T,EAAEm5B,QAAUx2B,EACZ3C,EAAEo5B,QAAUxlB,EACZ3mB,KAAK4vE,cAAc78D,IAGrBiS,GAAKhlB,KAAK8N,QAAQ8rB,OAASt6B,GAAS+xE,EAAK/xE,EAAMmtB,GACjD,CAKA2kD,oBAAAA,GACOpxE,KAAKmtE,uBACRntE,KAAKmtE,qBAAuB,CAAC,GAE/B,MAAMxgD,EAAY3sB,KAAKmtE,qBACjB1zC,EAAWz5B,KAAKy5B,SAEhB43C,EAAOA,CAAC/xE,EAAMmtB,KAClBgN,EAASj4B,iBAAiBxB,KAAMV,EAAMmtB,GACtCE,EAAUrtB,GAAQmtB,GAEd6kD,EAAUA,CAAChyE,EAAMmtB,KACjBE,EAAUrtB,KACZm6B,EAAS/3B,oBAAoB1B,KAAMV,EAAMmtB,UAClCE,EAAUrtB,KAIfmtB,EAAWA,CAACxsB,EAAOs9B,KACnBv9B,KAAKm9B,QACPn9B,KAAK+zB,OAAO9zB,EAAOs9B,IAIvB,IAAIg0C,EACJ,MAAMhE,EAAWA,KACf+D,EAAQ,SAAU/D,GAElBvtE,KAAKutE,UAAW,EAChBvtE,KAAK+zB,SAELs9C,EAAK,SAAU5kD,GACf4kD,EAAK,SAAUE,IAGjBA,EAAWA,KACTvxE,KAAKutE,UAAW,EAEhB+D,EAAQ,SAAU7kD,GAGlBzsB,KAAK+wE,QACL/wE,KAAK6tE,QAAQ,EAAG,GAEhBwD,EAAK,SAAU9D,IAGb9zC,EAASu7B,WAAWh1D,KAAKm9B,QAC3BowC,IAEAgE,GAEJ,CAKAvB,YAAAA,GACEhrD,GAAKhlB,KAAKktE,WAAY,CAACzgD,EAAUntB,KAC/BU,KAAKy5B,SAAS/3B,oBAAoB1B,KAAMV,EAAMmtB,KAEhDzsB,KAAKktE,WAAa,CAAC,EAEnBloD,GAAKhlB,KAAKmtE,qBAAsB,CAAC1gD,EAAUntB,KACzCU,KAAKy5B,SAAS/3B,oBAAoB1B,KAAMV,EAAMmtB,KAEhDzsB,KAAKmtE,0BAAuBr5D,CAC9B,CAEA09D,gBAAAA,CAAiBhkD,EAAO+M,EAAMi/B,GAC5B,MAAMnzB,EAASmzB,EAAU,MAAQ,SACjC,IAAI1qC,EAAMtwB,EAAMgW,EAAG8Q,EAOnB,IALa,YAATiV,IACFzL,EAAO9uB,KAAKy9C,eAAejwB,EAAM,GAAG/H,cACpCqJ,EAAKgrB,WAAW,IAAMzT,EAAS,wBAG5B7xB,EAAI,EAAG8Q,EAAOkI,EAAM9mB,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CAC9ChW,EAAOgvB,EAAMhZ,GACb,MAAMslC,EAAat7C,GAAQwB,KAAKy9C,eAAej/C,EAAKinB,cAAcq0B,WAC9DA,GACFA,EAAWzT,EAAS,cAAc7nC,EAAK4sC,QAAS5sC,EAAKinB,aAAcjnB,EAAKE,MAE5E,CACF,CAMA+yE,iBAAAA,GACE,OAAOzxE,KAAKs0C,SAAW,EACzB,CAMAo9B,iBAAAA,CAAkBC,GAChB,MAAMC,EAAa5xE,KAAKs0C,SAAW,GAC7BzgB,EAAS89C,EAAe98D,IAAI,EAAE4Q,eAAc/mB,YAChD,MAAMowB,EAAO9uB,KAAKy9C,eAAeh4B,GACjC,IAAKqJ,EACH,MAAM,IAAI4X,MAAM,6BAA+BjhB,GAGjD,MAAO,CACLA,eACA2lB,QAAStc,EAAKpvB,KAAKhB,GACnBA,WAGEgyB,GAAWvL,GAAe0O,EAAQ+9C,GAEpClhD,IACF1wB,KAAKs0C,QAAUzgB,EAEf7zB,KAAKitE,WAAa,KAClBjtE,KAAK6vE,mBAAmBh8C,EAAQ+9C,GAEpC,CAWA1S,aAAAA,CAAcoI,EAAMpoE,EAAM6nC,GACxB,OAAO/mC,KAAKqtE,SAAShG,OAAOrnE,KAAMsnE,EAAMpoE,EAAM6nC,EAChD,CAOA0V,eAAAA,CAAgBo1B,GACd,OAA6E,IAAtE7xE,KAAKqtE,SAASxvE,OAAOkpC,OAAOhkB,GAAKA,EAAE0kD,OAAO12D,KAAO8gE,GAAUnrE,MACpE,CAKAmpE,kBAAAA,CAAmBh8C,EAAQ+9C,EAAYE,GACrC,MAAMC,EAAe/xE,KAAK8N,QAAQksB,MAC5B40B,EAAOA,CAACj8C,EAAGC,IAAMD,EAAEo0B,OAAOrxB,IAAM9C,EAAEq1D,KAAKthD,GAAKjR,EAAE+P,eAAiBkB,EAAElB,cAAgB/P,EAAEhX,QAAUioB,EAAEjoB,QAC/FszE,EAAcpjB,EAAKgjB,EAAY/9C,GAC/Bo+C,EAAYH,EAASj+C,EAAS+6B,EAAK/6B,EAAQ+9C,GAE7CI,EAAYtrE,QACd1G,KAAKwxE,iBAAiBQ,EAAaD,EAAax3C,MAAM,GAGpD03C,EAAUvrE,QAAUqrE,EAAax3C,MACnCv6B,KAAKwxE,iBAAiBS,EAAWF,EAAax3C,MAAM,EAExD,CAKAq1C,aAAAA,CAAc78D,EAAG++D,GACf,MAAM5yE,EAAO,CACXutC,MAAO15B,EACP++D,SACApK,YAAY,EACZ6E,YAAavsE,KAAKgwD,cAAcj9C,IAE5Bm/D,EAAezK,IAAYA,EAAO35D,QAAQ8rB,QAAU55B,KAAK8N,QAAQ8rB,QAAQrD,SAASxjB,EAAE0jD,OAAOn3D,MAEjG,IAA6D,IAAzDU,KAAKk/D,cAAc,cAAehgE,EAAMgzE,GAC1C,OAGF,MAAMxhD,EAAU1wB,KAAKmyE,aAAap/D,EAAG++D,EAAQ5yE,EAAKqtE,aASlD,OAPArtE,EAAKwoE,YAAa,EAClB1nE,KAAKk/D,cAAc,aAAchgE,EAAMgzE,IAEnCxhD,GAAWxxB,EAAKwxB,UAClB1wB,KAAKrC,SAGAqC,IACT,CAUAmyE,YAAAA,CAAap/D,EAAG++D,EAAQvF,GACtB,MAAOj4B,QAASs9B,EAAa,GAAE,QAAE9jE,GAAW9N,KAetC+vD,EAAmB+hB,EACnBj+C,EAAS7zB,KAAKoyE,mBAAmBr/D,EAAG6+D,EAAYrF,EAAaxc,GAC7Dyc,EAAU9kD,GAAc3U,GACxBu5D,EAAYD,GAAmBt5D,EAAG/S,KAAKitE,WAAYV,EAAaC,GAElED,IAGFvsE,KAAKitE,WAAa,KAGlBroD,GAAa9W,EAAQ6sB,QAAS,CAAC5nB,EAAG8gB,EAAQ7zB,MAAOA,MAE7CwsE,GACF5nD,GAAa9W,EAAQlP,QAAS,CAACmU,EAAG8gB,EAAQ7zB,MAAOA,OAIrD,MAAM0wB,GAAWvL,GAAe0O,EAAQ+9C,GAQxC,OAPIlhD,GAAWohD,KACb9xE,KAAKs0C,QAAUzgB,EACf7zB,KAAK6vE,mBAAmBh8C,EAAQ+9C,EAAYE,IAG9C9xE,KAAKitE,WAAaX,EAEX57C,CACT,CAUA0hD,kBAAAA,CAAmBr/D,EAAG6+D,EAAYrF,EAAaxc,GAC7C,GAAe,aAAXh9C,EAAEzT,KACJ,MAAO,GAGT,IAAKitE,EAEH,OAAOqF,EAGT,MAAMG,EAAe/xE,KAAK8N,QAAQksB,MAClC,OAAOh6B,KAAK4wE,0BAA0B79D,EAAGg/D,EAAax3C,KAAMw3C,EAAchiB,EAC5E,EAIF,SAAS2c,KACP,OAAO1nD,GAAKynD,GAAMR,UAAYt2C,GAAUA,EAAM03C,SAAS1F,aACzD,CC5uCA,SAAS0K,GAASn4C,EAA+BkR,EAAqB2d,GACpE,MAAM,WAACD,EAAA,EAAYpzC,EAAA,EAAGiR,EAAA,YAAGijC,EAAA,YAAaD,EAAA,QAAa77C,GAAWs9B,GACxD,YAACtM,EAAA,gBAAa+T,GAAmB/kC,EACjCwkE,EAAiBrjE,KAAK8C,IAAI+sB,EAAc8qB,EAAa5+B,GAAgB89B,EAAaC,IAIxF,GAHA7uB,EAAImE,YACJnE,EAAIqE,IAAI7oB,EAAGiR,EAAGijC,EAAc9qB,EAAc,EAAGgqB,EAAawpB,EAAiB,EAAGvpB,EAAWupB,EAAiB,GAEtG3oB,EAAc,EAAG,CACnB,MAAM4oB,EAAiBtjE,KAAK8C,IAAI+sB,EAAc6qB,EAAa3+B,GAAgB89B,EAAaC,IACxF7uB,EAAIqE,IAAI7oB,EAAGiR,EAAGgjC,EAAc7qB,EAAc,EAAGiqB,EAAWwpB,EAAiB,EAAGzpB,EAAaypB,EAAiB,GAAG,E,KACxG,CACL,MAAMC,EAAYvjE,KAAK8C,IAAI+sB,EAAc,EAAG8qB,EAAc5+B,GAAgB89B,EAAaC,IAEvF,GAAwB,UAApBlW,EACF3Y,EAAIqE,IAAI7oB,EAAGiR,EAAG6rD,EAAWzpB,EAAWphC,GAAK,EAAGmhC,EAAanhC,GAAK,GAAG,QAC5D,GAAwB,UAApBkrB,EAA6B,CACtC,MAAMv/B,EAAI,EAAIk/D,EAAYA,EACpBtpB,GAAQ51C,EAAIrE,KAAK6iB,IAAIi3B,EAAWphC,GAAK,GAAKjS,EAC1CyzC,GAAQ71C,EAAIrE,KAAK4hB,IAAIk4B,EAAWphC,GAAK,GAAKhB,EAC1CqiC,EAAS11C,EAAIrE,KAAK6iB,IAAIg3B,EAAanhC,GAAK,GAAKjS,EAC7CuzC,EAAS31C,EAAIrE,KAAK4hB,IAAIi4B,EAAanhC,GAAK,GAAKhB,EACnDuT,EAAIwE,OAAOwqB,EAAMC,GACjBjvB,EAAIwE,OAAOsqB,EAAQC,E,EAGvB/uB,EAAIsE,YAEJtE,EAAIuE,OAAO,EAAG,GACdvE,EAAI0E,KAAK,EAAG,EAAG1E,EAAIiD,OAAOl9B,MAAOi6B,EAAIiD,OAAOI,QAE5CrD,EAAIpD,KAAK,UACX,CAGA,SAAS27C,GAAQv4C,EAA+BkR,EAAqB2d,GACnE,MAAM,WAACD,EAAA,YAAY4pB,EAAA,EAAah9D,EAAA,EAAGiR,EAAA,YAAGijC,EAAA,YAAaD,GAAeve,EAClE,IAAIunC,EAAcD,EAAc9oB,EAIhC1vB,EAAImE,YACJnE,EAAIqE,IAAI7oB,EAAGiR,EAAGijC,EAAad,EAAa6pB,EAAa5pB,EAAW4pB,GAC5DhpB,EAAc+oB,GAChBC,EAAcD,EAAc/oB,EAC5BzvB,EAAIqE,IAAI7oB,EAAGiR,EAAGgjC,EAAaZ,EAAW4pB,EAAa7pB,EAAa6pB,GAAa,IAE7Ez4C,EAAIqE,IAAI7oB,EAAGiR,EAAG+rD,EAAa3pB,EAAW9gC,GAAS6gC,EAAa7gC,IAE9DiS,EAAIsE,YACJtE,EAAIpD,MACN,CAEA,SAAS87C,GAAgB9tE,GACvB,OAAOw9B,GAAkBx9B,EAAO,CAAC,aAAc,WAAY,aAAc,YAC3E,CAKA,SAAS+tE,GAAkBt0C,EAAiBorB,EAAqBC,EAAqBkpB,GACpF,MAAMpsD,EAAIksD,GAAgBr0C,EAAIzwB,QAAQ+9C,cAChCknB,GAAiBnpB,EAAcD,GAAe,EAC9CqpB,EAAa/jE,KAAK8C,IAAIghE,EAAeD,EAAanpB,EAAc,GAShEspB,EAAqB9vD,IACzB,MAAM+vD,GAAiBtpB,EAAc36C,KAAK8C,IAAIghE,EAAe5vD,IAAQ2vD,EAAa,EAClF,OAAOtnD,GAAYrI,EAAK,EAAGlU,KAAK8C,IAAIghE,EAAeG,KAGrD,MAAO,CACLC,WAAYF,EAAkBvsD,EAAEysD,YAChCC,SAAUH,EAAkBvsD,EAAE0sD,UAC9BC,WAAY7nD,GAAY9E,EAAE2sD,WAAY,EAAGL,GACzCM,SAAU9nD,GAAY9E,EAAE4sD,SAAU,EAAGN,GAEzC,CAKA,SAASO,GAAWjgE,EAAWkgE,EAAe99D,EAAWiR,GACvD,MAAO,CACLjR,EAAGA,EAAIpC,EAAIrE,KAAK6iB,IAAI0hD,GACpB7sD,EAAGA,EAAIrT,EAAIrE,KAAK4hB,IAAI2iD,GAExB,CAiBA,SAASC,GACPv5C,EACAkR,EACAzU,EACAwzB,EACAj/B,EACA4iC,GAEA,MAAM,EAACp4C,EAAA,EAAGiR,EAAGmiC,WAAYxiD,EAAK,YAAEosE,EAAa/oB,YAAa+pB,GAAUtoC,EAE9Dwe,EAAc36C,KAAK6C,IAAIs5B,EAAQwe,YAAcO,EAAUxzB,EAAS+7C,EAAa,GAC7E/oB,EAAc+pB,EAAS,EAAIA,EAASvpB,EAAUxzB,EAAS+7C,EAAc,EAE3E,IAAIiB,EAAgB,EACpB,MAAM//D,EAAQsX,EAAM5kB,EAEpB,GAAI6jD,EAAS,CAIX,MAAMypB,EAAuBF,EAAS,EAAIA,EAASvpB,EAAU,EACvD0pB,EAAuBjqB,EAAc,EAAIA,EAAcO,EAAU,EACjE2pB,GAAsBF,EAAuBC,GAAwB,EACrEE,EAAuC,IAAvBD,EAA2BlgE,EAASkgE,GAAuBA,EAAqB3pB,GAAWv2C,EACjH+/D,GAAiB//D,EAAQmgE,GAAiB,C,CAG5C,MAAMC,EAAO/kE,KAAK6C,IAAI,KAAO8B,EAAQg2C,EAAcjzB,EAAShP,IAAMiiC,EAC5DqqB,GAAergE,EAAQogE,GAAQ,EAC/BlrB,EAAaxiD,EAAQ2tE,EAAcN,EACnC5qB,EAAW79B,EAAM+oD,EAAcN,GAC/B,WAACR,EAAA,SAAYC,EAAA,WAAUC,EAAU,SAAEC,GAAYT,GAAkBznC,EAASue,EAAaC,EAAab,EAAWD,GAE/GorB,EAA2BtqB,EAAcupB,EACzCgB,EAAyBvqB,EAAcwpB,EACvCgB,EAA0BtrB,EAAaqqB,EAAae,EACpDG,EAAwBtrB,EAAWqqB,EAAWe,EAE9CG,EAA2B3qB,EAAc0pB,EACzCkB,EAAyB5qB,EAAc2pB,EACvCkB,EAA0B1rB,EAAauqB,EAAaiB,EACpDG,EAAwB1rB,EAAWuqB,EAAWiB,EAIpD,GAFAr6C,EAAImE,YAEAyvB,EAAU,CAEZ,MAAM4mB,GAAyBN,EAA0BC,GAAyB,EAKlF,GAJAn6C,EAAIqE,IAAI7oB,EAAGiR,EAAGijC,EAAawqB,EAAyBM,GACpDx6C,EAAIqE,IAAI7oB,EAAGiR,EAAGijC,EAAa8qB,EAAuBL,GAG9CjB,EAAW,EAAG,CAChB,MAAMuB,EAAUpB,GAAWY,EAAwBE,EAAuB3+D,EAAGiR,GAC7EuT,EAAIqE,IAAIo2C,EAAQj/D,EAAGi/D,EAAQhuD,EAAGysD,EAAUiB,EAAuBtrB,EAAW9gC,G,CAI5E,MAAM2sD,EAAKrB,GAAWgB,EAAwBxrB,EAAUrzC,EAAGiR,GAI3D,GAHAuT,EAAIwE,OAAOk2C,EAAGl/D,EAAGk/D,EAAGjuD,GAGhB2sD,EAAW,EAAG,CAChB,MAAMqB,EAAUpB,GAAWgB,EAAwBE,EAAuB/+D,EAAGiR,GAC7EuT,EAAIqE,IAAIo2C,EAAQj/D,EAAGi/D,EAAQhuD,EAAG2sD,EAAUvqB,EAAW9gC,GAASwsD,EAAwBxlE,KAAK0Y,G,CAI3F,MAAMktD,GAA0B9rB,EAAYuqB,EAAW3pB,GAAiBb,EAAcuqB,EAAa1pB,IAAiB,EAKpH,GAJAzvB,EAAIqE,IAAI7oB,EAAGiR,EAAGgjC,EAAaZ,EAAYuqB,EAAW3pB,EAAckrB,GAAuB,GACvF36C,EAAIqE,IAAI7oB,EAAGiR,EAAGgjC,EAAakrB,EAAuB/rB,EAAcuqB,EAAa1pB,GAAc,GAGvF0pB,EAAa,EAAG,CAClB,MAAMsB,EAAUpB,GAAWe,EAA0BE,EAAyB9+D,EAAGiR,GACjFuT,EAAIqE,IAAIo2C,EAAQj/D,EAAGi/D,EAAQhuD,EAAG0sD,EAAYmB,EAA0BvlE,KAAK0Y,GAAImhC,EAAa7gC,G,CAI5F,MAAM6sD,EAAKvB,GAAWW,EAA0BprB,EAAYpzC,EAAGiR,GAI/D,GAHAuT,EAAIwE,OAAOo2C,EAAGp/D,EAAGo/D,EAAGnuD,GAGhBwsD,EAAa,EAAG,CAClB,MAAMwB,EAAUpB,GAAWW,EAA0BE,EAAyB1+D,EAAGiR,GACjFuT,EAAIqE,IAAIo2C,EAAQj/D,EAAGi/D,EAAQhuD,EAAGwsD,EAAYrqB,EAAa7gC,GAASmsD,E,MAE7D,CACLl6C,EAAIuE,OAAO/oB,EAAGiR,GAEd,MAAMouD,EAAc9lE,KAAK6iB,IAAIsiD,GAA2BxqB,EAAcl0C,EAChEs/D,EAAc/lE,KAAK4hB,IAAIujD,GAA2BxqB,EAAcjjC,EACtEuT,EAAIwE,OAAOq2C,EAAaC,GAExB,MAAMC,EAAYhmE,KAAK6iB,IAAIuiD,GAAyBzqB,EAAcl0C,EAC5Dw/D,EAAYjmE,KAAK4hB,IAAIwjD,GAAyBzqB,EAAcjjC,EAClEuT,EAAIwE,OAAOu2C,EAAWC,E,CAGxBh7C,EAAIsE,WACN,CAEA,SAAS22C,GACPj7C,EACAkR,EACAzU,EACAwzB,EACA2D,GAEA,MAAM,YAACsnB,EAAW,WAAEtsB,EAAA,cAAYJ,GAAiBtd,EACjD,IAAI2d,EAAW3d,EAAQ2d,SACvB,GAAIqsB,EAAa,CACf3B,GAAQv5C,EAAKkR,EAASzU,EAAQwzB,EAASpB,EAAU+E,GACjD,IAAK,IAAIt5C,EAAI,EAAGA,EAAI4gE,IAAe5gE,EACjC0lB,EAAI2E,OAEDrV,MAAMk/B,KACTK,EAAWD,GAAcJ,EAAgB9gC,IAAOA,I,CAKpD,OAFA6rD,GAAQv5C,EAAKkR,EAASzU,EAAQwzB,EAASpB,EAAU+E,GACjD5zB,EAAI2E,OACGkqB,CACT,CAEA,SAASob,GACPjqC,EACAkR,EACAzU,EACAwzB,EACA2D,GAEA,MAAM,YAACsnB,EAAA,WAAatsB,EAAA,cAAYJ,EAAa,QAAE56C,GAAWs9B,GACpD,YAACtM,EAAW,gBAAE+T,EAAe,WAAEF,EAAU,iBAAEC,EAAgB,aAAEiZ,GAAgB/9C,EAC7EunE,EAAgC,UAAxBvnE,EAAQw9C,YAEtB,IAAKxsB,EACH,OAGF5E,EAAIgqC,YAAYvxB,GAAc,IAC9BzY,EAAI8xB,eAAiBpZ,EAEjByiC,GACFn7C,EAAIjD,UAA0B,EAAd6H,EAChB5E,EAAI+xB,SAAWpZ,GAAmB,UAElC3Y,EAAIjD,UAAY6H,EAChB5E,EAAI+xB,SAAWpZ,GAAmB,SAGpC,IAAIkW,EAAW3d,EAAQ2d,SACvB,GAAIqsB,EAAa,CACf3B,GAAQv5C,EAAKkR,EAASzU,EAAQwzB,EAASpB,EAAU+E,GACjD,IAAK,IAAIt5C,EAAI,EAAGA,EAAI4gE,IAAe5gE,EACjC0lB,EAAI6E,SAEDvV,MAAMk/B,KACTK,EAAWD,GAAcJ,EAAgB9gC,IAAOA,I,CAIhDytD,GACF5C,GAAQv4C,EAAKkR,EAAS2d,GAGpBj7C,EAAQwnE,UAAYvsB,EAAWD,GAAcnhC,IAAuB,IAAjBkkC,GAA0C,UAApBhZ,GAC3Ew/B,GAASn4C,EAAKkR,EAAS2d,GAGpBqsB,IACH3B,GAAQv5C,EAAKkR,EAASzU,EAAQwzB,EAASpB,EAAU+E,GACjD5zB,EAAI6E,SAER,ED48BA2mB,EAAAA,GAAAA,GAvoCM+mB,GAAA,WAEcp5C,KAASqyB,EAAAA,GAAAA,GAFvB+mB,GAAA,YAGeR,KAAUvmB,EAAAA,GAAAA,GAHzB+mB,GAAA,YAIe9zC,KAAU+sB,EAAAA,GAAAA,GAJzB+mB,GAAA,WAKcpe,KAAS3I,EAAAA,GAAAA,GALvB+mB,GAAA,UAMax/D,KAAQy4C,EAAAA,GAAAA,GANrB+mB,GAAA,WAOcP,IC8LL,MAAMqJ,WAAmBzc,GAoCtC12C,WAAAA,CAAYszB,GACVkQ,SAAKF,EAAAA,GAAAA,GAAC,KAAD,yBAAAA,EAAAA,GAAAA,GAAC,KAAD,oBAAAA,EAAAA,GAAAA,GAAC,KAAD,uBAAAA,EAAAA,GAAAA,GAAC,KAAD,uBAAAA,EAAAA,GAAAA,GAAC,KAAD,uBAAAA,EAAAA,GAAAA,GAAC,KAAD,uBAAAA,EAAAA,GAAAA,GAAC,KAAD,qBAEL1lD,KAAK8N,aAAUgG,EACf9T,KAAK0oD,mBAAgB50C,EACrB9T,KAAK8oD,gBAAah1C,EAClB9T,KAAK+oD,cAAWj1C,EAChB9T,KAAK2pD,iBAAc71C,EACnB9T,KAAK4pD,iBAAc91C,EACnB9T,KAAK0yE,YAAc,EACnB1yE,KAAKo1E,YAAc,EAEf1/B,GACF1nC,OAAO8T,OAAO9hB,KAAM01C,EAExB,CAEAwa,OAAAA,CAAQslB,EAAgBC,EAAgB1lB,GACtC,MAAMhgC,EAAQ/vB,KAAKowD,SAAS,CAAC,IAAK,KAAML,IAClC,MAACtlC,EAAK,SAAEE,GAAYR,GAAkB4F,EAAO,CAACra,EAAG8/D,EAAQ7uD,EAAG8uD,KAC5D,WAAC3sB,EAAA,SAAYC,EAAA,YAAUY,EAAW,YAAEC,EAAW,cAAElB,GAAiB1oD,KAAKowD,SAAS,CACpF,aACA,WACA,cACA,cACA,iBACCL,GACG2lB,GAAW11E,KAAK8N,QAAQq8C,QAAUnqD,KAAK8N,QAAQgxB,aAAe,EAC9DgsB,EAAiBxmC,GAAeokC,EAAeK,EAAWD,GAC1D6sB,EAAiB1qD,GAAcR,EAAOq+B,EAAYC,IAAaD,IAAeC,EAC9E6sB,EAAgB9qB,GAAkBljC,IAAO+tD,EACzCE,EAAenqD,GAAWf,EAAUg/B,EAAc+rB,EAAS9rB,EAAc8rB,GAE/E,OAAQE,GAAiBC,CAC3B,CAEArlB,cAAAA,CAAeT,GACb,MAAM,EAACr6C,EAAC,EAAEiR,EAAC,WAAEmiC,EAAA,SAAYC,EAAA,YAAUY,EAAA,YAAaC,GAAe5pD,KAAKowD,SAAS,CAC3E,IACA,IACA,aACA,WACA,cACA,eACCL,IACG,OAACp5B,EAAA,QAAQwzB,GAAWnqD,KAAK8N,QACzBgoE,GAAahtB,EAAaC,GAAY,EACtCgtB,GAAcpsB,EAAcC,EAAcO,EAAUxzB,GAAU,EACpE,MAAO,CACLjhB,EAAGA,EAAIzG,KAAK6iB,IAAIgkD,GAAaC,EAC7BpvD,EAAGA,EAAI1X,KAAK4hB,IAAIilD,GAAaC,EAEjC,CAEAhd,eAAAA,CAAgBhJ,GACd,OAAO/vD,KAAKwwD,eAAeT,EAC7B,CAEA1b,IAAAA,CAAKna,GACH,MAAM,QAACpsB,EAAO,cAAE46C,GAAiB1oD,KAC3B22B,GAAU7oB,EAAQ6oB,QAAU,GAAK,EACjCwzB,GAAWr8C,EAAQq8C,SAAW,GAAK,EACnC2D,EAAWhgD,EAAQggD,SAIzB,GAHA9tD,KAAK0yE,YAAuC,UAAxB5kE,EAAQw9C,YAA2B,IAAO,EAC9DtrD,KAAKo1E,YAAc1sB,EAAgB9gC,GAAM3Y,KAAK2Z,MAAM8/B,EAAgB9gC,IAAO,EAErD,IAAlB8gC,GAAuB1oD,KAAK2pD,YAAc,GAAK3pD,KAAK4pD,YAAc,EACpE,OAGF1vB,EAAIsC,OAEJ,MAAMs5C,GAAa91E,KAAK8oD,WAAa9oD,KAAK+oD,UAAY,EACtD7uB,EAAIiE,UAAUlvB,KAAK6iB,IAAIgkD,GAAan/C,EAAQ1nB,KAAK4hB,IAAIilD,GAAan/C,GAClE,MAAMq/C,EAAM,EAAI/mE,KAAK4hB,IAAI5hB,KAAK8C,IAAI4V,GAAI+gC,GAAiB,IACjDutB,EAAet/C,EAASq/C,EAE9B97C,EAAIgG,UAAYpyB,EAAQsrB,gBACxBc,EAAI6G,YAAcjzB,EAAQurB,YAE1B87C,GAAQj7C,EAAKl6B,KAAMi2E,EAAc9rB,EAAS2D,GAC1CqW,GAAWjqC,EAAKl6B,KAAMi2E,EAAc9rB,EAAS2D,GAE7C5zB,EAAI0C,SACN,ECxZF,SAASs5C,GAASh8C,EAAKpsB,EAASzP,EAAQyP,GACtCosB,EAAIi8C,QAAU7xD,GAAejmB,EAAMq0C,eAAgB5kC,EAAQ4kC,gBAC3DxY,EAAIgqC,YAAY5/C,GAAejmB,EAAMs0C,WAAY7kC,EAAQ6kC,aACzDzY,EAAI8xB,eAAiB1nC,GAAejmB,EAAMu0C,iBAAkB9kC,EAAQ8kC,kBACpE1Y,EAAI+xB,SAAW3nC,GAAejmB,EAAMw0C,gBAAiB/kC,EAAQ+kC,iBAC7D3Y,EAAIjD,UAAY3S,GAAejmB,EAAMygC,YAAahxB,EAAQgxB,aAC1D5E,EAAI6G,YAAczc,GAAejmB,EAAMg7B,YAAavrB,EAAQurB,YAC9D,CAEA,SAASqF,GAAOxE,EAAKoF,EAAU3Z,GAC7BuU,EAAIwE,OAAO/Y,EAAOjQ,EAAGiQ,EAAOgB,EAC9B,CAKA,SAASyvD,GAActoE,GACrB,OAAIA,EAAQuoE,QACHh3C,GAGLvxB,EAAQ08B,SAA8C,aAAnC18B,EAAQw8B,uBACtB7K,GAGFf,EACT,CAEA,SAAS43C,GAASvnD,EAAQqhB,EAAS0hB,EAAS,IAC1C,MAAMzjD,EAAQ0gB,EAAOroB,QACdJ,MAAOiwE,EAAc,EAAGrrD,IAAKsrD,EAAYnoE,EAAQ,GAAKyjD,GACtDxrD,MAAOmwE,EAAcvrD,IAAKwrD,GAActmC,EACzC9pC,EAAQ2I,KAAK6C,IAAIykE,EAAaE,GAC9BvrD,EAAMjc,KAAK8C,IAAIykE,EAAWE,GAC1BC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAElH,MAAO,CACLroE,QACA/H,QACA+K,KAAM++B,EAAQ/+B,KACdiU,KAAM4F,EAAM5kB,IAAUqwE,EAAUtoE,EAAQ6c,EAAM5kB,EAAQ4kB,EAAM5kB,EAEhE,CAiBA,SAASswE,GAAY18C,EAAKoG,EAAM8P,EAAS0hB,GACvC,MAAM,OAAC/iC,EAAA,QAAQjhB,GAAWwyB,GACpB,MAACjyB,EAAA,MAAO/H,EAAA,KAAO+K,EAAA,KAAMiU,GAAQgxD,GAASvnD,EAAQqhB,EAAS0hB,GACvD+kB,EAAaT,GAActoE,GAEjC,IACI0G,EAAGub,EAAOwa,GADV,KAACwX,GAAO,EAAI,QAAE78B,GAAW4sC,GAAU,CAAC,EAGxC,IAAKt9C,EAAI,EAAGA,GAAK8Q,IAAQ9Q,EACvBub,EAAQhB,GAAQzoB,GAAS4e,EAAUI,EAAO9Q,EAAIA,IAAMnG,GAEhD0hB,EAAMiY,OAGC+Z,GACT7nB,EAAIuE,OAAO1O,EAAMra,EAAGqa,EAAMpJ,GAC1Bo7B,GAAO,GAEP80B,EAAW38C,EAAKqQ,EAAMxa,EAAO7K,EAASpX,EAAQuoE,SAGhD9rC,EAAOxa,GAQT,OALI1e,IACF0e,EAAQhB,GAAQzoB,GAAS4e,EAAUI,EAAO,IAAMjX,GAChDwoE,EAAW38C,EAAKqQ,EAAMxa,EAAO7K,EAASpX,EAAQuoE,YAGvChlE,CACX,CAiBA,SAASylE,GAAgB58C,EAAKoG,EAAM8P,EAAS0hB,GAC3C,MAAM/iC,EAASuR,EAAKvR,QACd,MAAC1gB,EAAK,MAAE/H,EAAK,KAAEgf,GAAQgxD,GAASvnD,EAAQqhB,EAAS0hB,IACjD,KAAC/P,GAAO,EAAI,QAAE78B,GAAW4sC,GAAU,CAAC,EAC1C,IAEIt9C,EAAGub,EAAOgnD,EAAOttB,EAAMF,EAAMytB,EAF7BC,EAAO,EACPC,EAAS,EAGb,MAAMC,EAAcz4E,IAAW4H,GAAS4e,EAAUI,EAAO5mB,EAAQA,IAAU2P,EACrE+oE,EAAQA,KACR3tB,IAASF,IAEXrvB,EAAIwE,OAAOu4C,EAAM1tB,GACjBrvB,EAAIwE,OAAOu4C,EAAMxtB,GAGjBvvB,EAAIwE,OAAOu4C,EAAMD,KASrB,IALIj1B,IACFhyB,EAAQhB,EAAOooD,EAAW,IAC1Bj9C,EAAIuE,OAAO1O,EAAMra,EAAGqa,EAAMpJ,IAGvBnS,EAAI,EAAGA,GAAK8Q,IAAQ9Q,EAAG,CAG1B,GAFAub,EAAQhB,EAAOooD,EAAW3iE,IAEtBub,EAAMiY,KAER,SAGF,MAAMtyB,EAAIqa,EAAMra,EACViR,EAAIoJ,EAAMpJ,EACV0wD,EAAa,EAAJ3hE,EAEX2hE,IAAWN,GAETpwD,EAAI8iC,EACNA,EAAO9iC,EACEA,EAAI4iC,IACbA,EAAO5iC,GAGTswD,GAAQC,EAASD,EAAOvhE,KAAOwhE,IAE/BE,IAGAl9C,EAAIwE,OAAOhpB,EAAGiR,GAEdowD,EAAQM,EACRH,EAAS,EACTztB,EAAOF,EAAO5iC,GAGhBqwD,EAAQrwD,CACV,CACAywD,GACF,CAOA,SAASE,GAAkBh3C,GACzB,MAAMN,EAAOM,EAAKxyB,QACZ6kC,EAAa3S,EAAK2S,YAAc3S,EAAK2S,WAAWjsC,OAChD6wE,GAAej3C,EAAKgsB,aAAehsB,EAAKkR,QAAUxR,EAAKwK,SAA2C,aAAhCxK,EAAKsK,yBAA0CtK,EAAKq2C,UAAY1jC,EACxI,OAAO4kC,EAAcT,GAAkBF,EACzC,CAKA,SAASY,GAAwB1pE,GAC/B,OAAIA,EAAQuoE,QACH3nC,GAGL5gC,EAAQ08B,SAA8C,aAAnC18B,EAAQw8B,uBACtBqE,GAGFF,EACT,CAEA,SAASgpC,GAAoBv9C,EAAKoG,EAAMh6B,EAAO+H,GAC7C,IAAIqpE,EAAOp3C,EAAKq3C,MACXD,IACHA,EAAOp3C,EAAKq3C,MAAQ,IAAIC,OACpBt3C,EAAKo3C,KAAKA,EAAMpxE,EAAO+H,IACzBqpE,EAAKl5C,aAGT03C,GAASh8C,EAAKoG,EAAKxyB,SACnBosB,EAAI6E,OAAO24C,EACb,CAEA,SAASG,GAAiB39C,EAAKoG,EAAMh6B,EAAO+H,GAC1C,MAAM,SAAC2iC,EAAA,QAAUljC,GAAWwyB,EACtBw3C,EAAgBR,GAAkBh3C,GAExC,IAAK,MAAM8P,KAAWY,EACpBklC,GAASh8C,EAAKpsB,EAASsiC,EAAQ/xC,OAC/B67B,EAAImE,YACAy5C,EAAc59C,EAAKoG,EAAM8P,EAAS,CAAC9pC,QAAO4kB,IAAK5kB,EAAQ+H,EAAQ,KACjE6rB,EAAIsE,YAENtE,EAAI6E,QAER,ED8LA2mB,EAAAA,GAAAA,GAzHqB6vB,GAAmB,KAE1B,QAAM7vB,EAAAA,GAAAA,GAFC6vB,GAAmB,WAIpB,CAChBjqB,YAAa,SACbjyB,YAAa,OACbsZ,WAAY,GACZC,iBAAkB,EAClBC,qBAAiB/+B,EACjB+3C,aAAc,EACd/sB,YAAa,EACbnI,OAAQ,EACRwzB,QAAS,EACT1/B,WAAO3W,EACPg6C,UAAU,EACVwnB,UAAU,KACV5vB,EAAAA,GAAAA,GAjBiB6vB,GAAmB,gBAmBf,CACrBn8C,gBAAiB,qBACjBssB,EAAAA,GAAAA,GArBiB6vB,GAAmB,cAuBjB,CACnB5hD,aAAa,EACbD,WAAat0B,GAAkB,eAATA,IC5F1B,MAAM24E,GAA8B,oBAAXH,OAEzB,SAASvjC,GAAKna,EAAKoG,EAAMh6B,EAAO+H,GAC1B0pE,KAAcz3C,EAAKxyB,QAAQsiC,QAC7BqnC,GAAoBv9C,EAAKoG,EAAMh6B,EAAO+H,GAEtCwpE,GAAiB39C,EAAKoG,EAAMh6B,EAAO+H,EAEvC,CAEe,MAAM2pE,WAAoBlf,GAoCvC12C,WAAAA,CAAYszB,GACVkQ,QAEA5lD,KAAKusD,UAAW,EAChBvsD,KAAK8N,aAAUgG,EACf9T,KAAK8xC,YAASh+B,EACd9T,KAAKwxC,WAAQ19B,EACb9T,KAAK2xC,eAAY79B,EACjB9T,KAAK23E,WAAQ7jE,EACb9T,KAAKi4E,aAAUnkE,EACf9T,KAAKk4E,eAAYpkE,EACjB9T,KAAKssD,YAAa,EAClBtsD,KAAKm4E,gBAAiB,EACtBn4E,KAAKiyC,mBAAgBn+B,EAEjB4hC,GACF1nC,OAAO8T,OAAO9hB,KAAM01C,EAExB,CAEAoX,mBAAAA,CAAoB9Z,EAAW3Y,GAC7B,MAAMvsB,EAAU9N,KAAK8N,QACrB,IAAKA,EAAQ08B,SAA8C,aAAnC18B,EAAQw8B,0BAA2Cx8B,EAAQuoE,UAAYr2E,KAAKm4E,eAAgB,CAClH,MAAM9mE,EAAOvD,EAAQwhB,SAAWtvB,KAAKwxC,MAAQxxC,KAAK2xC,UAClDvH,GAA2BpqC,KAAKi4E,QAASnqE,EAASklC,EAAW3hC,EAAMgpB,GACnEr6B,KAAKm4E,gBAAiB,C,CAE1B,CAEA,UAAIppD,CAAOA,GACT/uB,KAAKi4E,QAAUlpD,SACR/uB,KAAKk4E,iBACLl4E,KAAK23E,MACZ33E,KAAKm4E,gBAAiB,CACxB,CAEA,UAAIppD,GACF,OAAO/uB,KAAKi4E,OACd,CAEA,YAAIjnC,GACF,OAAOhxC,KAAKk4E,YAAcl4E,KAAKk4E,UAAY5mC,GAAiBtxC,KAAMA,KAAK8N,QAAQsiC,SACjF,CAMAupB,KAAAA,GACE,MAAM3oB,EAAWhxC,KAAKgxC,SAChBjiB,EAAS/uB,KAAK+uB,OACpB,OAAOiiB,EAAStqC,QAAUqoB,EAAOiiB,EAAS,GAAG1qC,MAC/C,CAMA4lB,IAAAA,GACE,MAAM8kB,EAAWhxC,KAAKgxC,SAChBjiB,EAAS/uB,KAAK+uB,OACd1gB,EAAQ2iC,EAAStqC,OACvB,OAAO2H,GAAS0gB,EAAOiiB,EAAS3iC,EAAQ,GAAG6c,IAC7C,CASA7J,WAAAA,CAAY0O,EAAOlG,GACjB,MAAM/b,EAAU9N,KAAK8N,QACfhJ,EAAQirB,EAAMlG,GACdkF,EAAS/uB,KAAK+uB,OACdiiB,EAAWD,GAAe/wC,KAAM,CAAC6pB,WAAUvjB,MAAOxB,EAAOomB,IAAKpmB,IAEpE,IAAKksC,EAAStqC,OACZ,OAGF,MAAMsiB,EAAS,GACTovD,EAAeZ,GAAwB1pE,GAC7C,IAAI0G,EAAG8Q,EACP,IAAK9Q,EAAI,EAAG8Q,EAAO0rB,EAAStqC,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CACjD,MAAM,MAAClO,EAAA,IAAO4kB,GAAO8lB,EAASx8B,GACxBa,EAAK0Z,EAAOzoB,GACZgP,EAAKyZ,EAAO7D,GAClB,GAAI7V,IAAOC,EAAI,CACb0T,EAAOhC,KAAK3R,GACZ,Q,CAEF,MAAMmM,EAAIvS,KAAKuZ,KAAK1jB,EAAQuQ,EAAGwU,KAAcvU,EAAGuU,GAAYxU,EAAGwU,KACzDwuD,EAAeD,EAAa/iE,EAAIC,EAAIkM,EAAG1T,EAAQuoE,SACrDgC,EAAaxuD,GAAYkG,EAAMlG,GAC/Bb,EAAOhC,KAAKqxD,EACd,CACA,OAAyB,IAAlBrvD,EAAOtiB,OAAesiB,EAAO,GAAKA,CAC3C,CAgBA4tD,WAAAA,CAAY18C,EAAKkW,EAAS0hB,GACxB,MAAMgmB,EAAgBR,GAAkBt3E,MACxC,OAAO83E,EAAc59C,EAAKl6B,KAAMowC,EAAS0hB,EAC3C,CASA4lB,IAAAA,CAAKx9C,EAAK5zB,EAAO+H,GACf,MAAM2iC,EAAWhxC,KAAKgxC,SAChB8mC,EAAgBR,GAAkBt3E,MACxC,IAAIqR,EAAOrR,KAAKwxC,MAEhBlrC,EAAQA,GAAS,EACjB+H,EAAQA,GAAUrO,KAAK+uB,OAAOroB,OAASJ,EAEvC,IAAK,MAAM8pC,KAAWY,EACpB3/B,GAAQymE,EAAc59C,EAAKl6B,KAAMowC,EAAS,CAAC9pC,QAAO4kB,IAAK5kB,EAAQ+H,EAAQ,IAEzE,QAASgD,CACX,CASAgjC,IAAAA,CAAKna,EAAK8Y,EAAW1sC,EAAO+H,GAC1B,MAAMP,EAAU9N,KAAK8N,SAAW,CAAC,EAC3BihB,EAAS/uB,KAAK+uB,QAAU,GAE1BA,EAAOroB,QAAUoH,EAAQgxB,cAC3B5E,EAAIsC,OAEJ6X,GAAKna,EAAKl6B,KAAMsG,EAAO+H,GAEvB6rB,EAAI0C,WAGF58B,KAAKusD,WAEPvsD,KAAKm4E,gBAAiB,EACtBn4E,KAAK23E,WAAQ7jE,EAEjB,ECjbF,SAASwkE,GAAQ73E,EAAkBorC,EAAarc,EAAiBugC,GAC/D,MAAMjiD,EAAUrN,EAAGqN,SACZ,CAAC0hB,GAAO1qB,GAASrE,EAAG2vD,SAAS,CAAC5gC,GAAOugC,GAE5C,OAAQ9gD,KAAKuZ,IAAIqjB,EAAM/mC,GAASgJ,EAAQmwB,OAASnwB,EAAQyqE,SAC3D,ED6aA7yB,EAAAA,GAAAA,GA1MqBsyB,GAAoB,KAE3B,SAAOtyB,EAAAA,GAAAA,GAFAsyB,GAAoB,WAOrB,CAChBtlC,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjB/T,YAAa,EACbkL,iBAAiB,EACjBM,uBAAwB,UACxBzL,MAAM,EACNvP,UAAU,EACV+mD,SAAS,EACT7rC,QAAS,KACTkb,EAAAA,GAAAA,GAnBiBsyB,GAAoB,gBAwBhB,CACrB5+C,gBAAiB,kBACjBC,YAAa,iBACbqsB,EAAAA,GAAAA,GA3BiBsyB,GAAoB,cA8BlB,CACnBrkD,aAAa,EACbD,WAAat0B,GAAkB,eAATA,GAAkC,SAATA,IC/PpC,MAAMo5E,WAAqB1f,GA6BxC12C,WAAAA,CAAYszB,GACVkQ,SAAKF,EAAAA,GAAAA,GAAC,KAAD,kBAAAA,EAAAA,GAAAA,GAAC,KAAD,gBAAAA,EAAAA,GAAAA,GAAC,KAAD,eAEL1lD,KAAK8N,aAAUgG,EACf9T,KAAK4nC,YAAS9zB,EACd9T,KAAKgoC,UAAOl0B,EACZ9T,KAAKqxC,UAAOv9B,EAER4hC,GACF1nC,OAAO8T,OAAO9hB,KAAM01C,EAExB,CAEAwa,OAAAA,CAAQuoB,EAAgBC,EAAgB3oB,GACtC,MAAMjiD,EAAU9N,KAAK8N,SACf,EAAC4H,EAAA,EAAGiR,GAAK3mB,KAAKowD,SAAS,CAAC,IAAK,KAAML,GACzC,OAAS9gD,KAAKmS,IAAIq3D,EAAS/iE,EAAG,GAAKzG,KAAKmS,IAAIs3D,EAAS/xD,EAAG,GAAM1X,KAAKmS,IAAItT,EAAQyqE,UAAYzqE,EAAQmwB,OAAQ,EAC7G,CAEA06C,QAAAA,CAASF,EAAgB1oB,GACvB,OAAOuoB,GAAQt4E,KAAMy4E,EAAQ,IAAK1oB,EACpC,CAEA6oB,QAAAA,CAASF,EAAgB3oB,GACvB,OAAOuoB,GAAQt4E,KAAM04E,EAAQ,IAAK3oB,EACpC,CAEAS,cAAAA,CAAeT,GACb,MAAM,EAACr6C,EAAA,EAAGiR,GAAK3mB,KAAKowD,SAAS,CAAC,IAAK,KAAML,GACzC,MAAO,CAACr6C,IAAGiR,IACb,CAEAtZ,IAAAA,CAAKS,GACHA,EAAUA,GAAW9N,KAAK8N,SAAW,CAAC,EACtC,IAAImwB,EAASnwB,EAAQmwB,QAAU,EAC/BA,EAAShvB,KAAK6C,IAAImsB,EAAQA,GAAUnwB,EAAQ+qE,aAAe,GAC3D,MAAM/5C,EAAcb,GAAUnwB,EAAQgxB,aAAe,EACrD,OAAgC,GAAxBb,EAASa,EACnB,CAEAuV,IAAAA,CAAKna,EAA+B+E,GAClC,MAAMnxB,EAAU9N,KAAK8N,QAEjB9N,KAAKgoC,MAAQl6B,EAAQmwB,OAAS,KAAQe,GAAeh/B,KAAMi/B,EAAMj/B,KAAKqN,KAAKS,GAAW,KAI1FosB,EAAI6G,YAAcjzB,EAAQurB,YAC1Ba,EAAIjD,UAAYnpB,EAAQgxB,YACxB5E,EAAIgG,UAAYpyB,EAAQsrB,gBACxBoE,GAAUtD,EAAKpsB,EAAS9N,KAAK0V,EAAG1V,KAAK2mB,GACvC,CAEA0oC,QAAAA,GACE,MAAMvhD,EAAU9N,KAAK8N,SAAW,CAAC,EAEjC,OAAOA,EAAQmwB,OAASnwB,EAAQyqE,SAClC,EC3FF,SAASO,GAAaC,EAAKhpB,GACzB,MAAM,EAACr6C,EAAC,EAAEiR,EAAC,KAAEsG,EAAA,MAAMhtB,EAAA,OAAOs9B,GAAmCw7C,EAAI3oB,SAAS,CAAC,IAAK,IAAK,OAAQ,QAAS,UAAWL,GAEjH,IAAIthC,EAAMC,EAAO6F,EAAKC,EAAQwkD,EAgB9B,OAdID,EAAIj0B,YACNk0B,EAAOz7C,EAAS,EAChB9O,EAAOxf,KAAK8C,IAAI2D,EAAGuX,GACnByB,EAAQzf,KAAK6C,IAAI4D,EAAGuX,GACpBsH,EAAM5N,EAAIqyD,EACVxkD,EAAS7N,EAAIqyD,IAEbA,EAAO/4E,EAAQ,EACfwuB,EAAO/Y,EAAIsjE,EACXtqD,EAAQhZ,EAAIsjE,EACZzkD,EAAMtlB,KAAK8C,IAAI4U,EAAGsG,GAClBuH,EAASvlB,KAAK6C,IAAI6U,EAAGsG,IAGhB,CAACwB,OAAM8F,MAAK7F,QAAO8F,SAC5B,CAEA,SAASykD,GAAYjxC,EAAMljC,EAAOiN,EAAKD,GACrC,OAAOk2B,EAAO,EAAIxc,GAAY1mB,EAAOiN,EAAKD,EAC5C,CAEA,SAASonE,GAAiBH,EAAKI,EAAMC,GACnC,MAAMt0E,EAAQi0E,EAAIjrE,QAAQgxB,YACpBkJ,EAAO+wC,EAAI9zB,cACXv+B,EAAIgc,GAAO59B,GAEjB,MAAO,CACL0c,EAAGy3D,GAAYjxC,EAAKzT,IAAK7N,EAAE6N,IAAK,EAAG6kD,GACnC9lE,EAAG2lE,GAAYjxC,EAAKtZ,MAAOhI,EAAEgI,MAAO,EAAGyqD,GACvCvmE,EAAGqmE,GAAYjxC,EAAKxT,OAAQ9N,EAAE8N,OAAQ,EAAG4kD,GACzCxnE,EAAGqnE,GAAYjxC,EAAKvZ,KAAM/H,EAAE+H,KAAM,EAAG0qD,GAEzC,CAEA,SAASE,GAAkBN,EAAKI,EAAMC,GACpC,MAAM,mBAACl0B,GAAsB6zB,EAAI3oB,SAAS,CAAC,uBACrCtrD,EAAQi0E,EAAIjrE,QAAQ+9C,aACpBnlC,EAAIic,GAAc79B,GAClBw0E,EAAOrqE,KAAK8C,IAAIonE,EAAMC,GACtBpxC,EAAO+wC,EAAI9zB,cAIXs0B,EAAer0B,GAAsBjhC,GAASnf,GAEpD,MAAO,CACL+8B,QAASo3C,IAAaM,GAAgBvxC,EAAKzT,KAAOyT,EAAKvZ,KAAM/H,EAAEmb,QAAS,EAAGy3C,GAC3Et3C,SAAUi3C,IAAaM,GAAgBvxC,EAAKzT,KAAOyT,EAAKtZ,MAAOhI,EAAEsb,SAAU,EAAGs3C,GAC9Ex3C,WAAYm3C,IAAaM,GAAgBvxC,EAAKxT,QAAUwT,EAAKvZ,KAAM/H,EAAEob,WAAY,EAAGw3C,GACpFv3C,YAAak3C,IAAaM,GAAgBvxC,EAAKxT,QAAUwT,EAAKtZ,MAAOhI,EAAEqb,YAAa,EAAGu3C,GAE3F,CAEA,SAASE,GAAcT,GACrB,MAAMliD,EAASiiD,GAAaC,GACtB94E,EAAQ42B,EAAOnI,MAAQmI,EAAOpI,KAC9B8O,EAAS1G,EAAOrC,OAASqC,EAAOtC,IAChCgD,EAAS2hD,GAAiBH,EAAK94E,EAAQ,EAAGs9B,EAAS,GACnDU,EAASo7C,GAAkBN,EAAK94E,EAAQ,EAAGs9B,EAAS,GAE1D,MAAO,CACLk8C,MAAO,CACL/jE,EAAGmhB,EAAOpI,KACV9H,EAAGkQ,EAAOtC,IACVjgB,EAAGrU,EACH4R,EAAG0rB,EACHU,UAEFo3C,MAAO,CACL3/D,EAAGmhB,EAAOpI,KAAO8I,EAAO3lB,EACxB+U,EAAGkQ,EAAOtC,IAAMgD,EAAO/V,EACvBlN,EAAGrU,EAAQs3B,EAAO3lB,EAAI2lB,EAAOjkB,EAC7BzB,EAAG0rB,EAAShG,EAAO/V,EAAI+V,EAAO3kB,EAC9BqrB,OAAQ,CACN4D,QAAS5yB,KAAK6C,IAAI,EAAGmsB,EAAO4D,QAAU5yB,KAAK6C,IAAIylB,EAAO/V,EAAG+V,EAAO3lB,IAChEowB,SAAU/yB,KAAK6C,IAAI,EAAGmsB,EAAO+D,SAAW/yB,KAAK6C,IAAIylB,EAAO/V,EAAG+V,EAAOjkB,IAClEwuB,WAAY7yB,KAAK6C,IAAI,EAAGmsB,EAAO6D,WAAa7yB,KAAK6C,IAAIylB,EAAO3kB,EAAG2kB,EAAO3lB,IACtEmwB,YAAa9yB,KAAK6C,IAAI,EAAGmsB,EAAO8D,YAAc9yB,KAAK6C,IAAIylB,EAAO3kB,EAAG2kB,EAAOjkB,MAIhF,CAEA,SAAS48C,GAAQ6oB,EAAKrjE,EAAGiR,EAAGopC,GAC1B,MAAM2pB,EAAc,OAANhkE,EACRikE,EAAc,OAANhzD,EACRizD,EAAWF,GAASC,EACpB9iD,EAASkiD,IAAQa,GAAYd,GAAaC,EAAKhpB,GAErD,OAAOl5B,IACH6iD,GAAShuD,GAAWhW,EAAGmhB,EAAOpI,KAAMoI,EAAOnI,UAC3CirD,GAASjuD,GAAW/E,EAAGkQ,EAAOtC,IAAKsC,EAAOrC,QAChD,CAEA,SAASqlD,GAAU57C,GACjB,OAAOA,EAAO4D,SAAW5D,EAAO+D,UAAY/D,EAAO6D,YAAc7D,EAAO8D,WAC1E,CAOA,SAAS+3C,GAAkB5/C,EAAK0E,GAC9B1E,EAAI0E,KAAKA,EAAKlpB,EAAGkpB,EAAKjY,EAAGiY,EAAKtqB,EAAGsqB,EAAK/sB,EACxC,CAEA,SAASkoE,GAAYn7C,EAAM/4B,EAAQm0E,EAAU,IAC3C,MAAMtkE,EAAIkpB,EAAKlpB,IAAMskE,EAAQtkE,GAAK7P,EAAS,EACrC8gB,EAAIiY,EAAKjY,IAAMqzD,EAAQrzD,GAAK9gB,EAAS,EACrCyO,GAAKsqB,EAAKlpB,EAAIkpB,EAAKtqB,IAAM0lE,EAAQtkE,EAAIskE,EAAQ1lE,EAAIzO,EAAS,GAAK6P,EAC/D7D,GAAK+sB,EAAKjY,EAAIiY,EAAK/sB,IAAMmoE,EAAQrzD,EAAIqzD,EAAQnoE,EAAIhM,EAAS,GAAK8gB,EACrE,MAAO,CACLjR,EAAGkpB,EAAKlpB,EAAIA,EACZiR,EAAGiY,EAAKjY,EAAIA,EACZrS,EAAGsqB,EAAKtqB,EAAIA,EACZzC,EAAG+sB,EAAK/sB,EAAIA,EACZosB,OAAQW,EAAKX,OAEjB,EDhCAynB,EAAAA,GAAAA,GAvFqB8yB,GAAqB,KAE5B,UAMZ9yB,EAAAA,GAAAA,GARmB8yB,GAAqB,WAWtB,CAChB15C,YAAa,EACby5C,UAAW,EACXhtB,iBAAkB,EAClBstB,YAAa,EACb96C,WAAY,SACZE,OAAQ,EACRD,SAAU,KAGZ0nB,EAAAA,GAAAA,GArBmB8yB,GAAqB,gBAwBjB,CACrBp/C,gBAAiB,kBACjBC,YAAa,gBC+FF,MAAM4gD,WAAmBnhB,GAuBtC12C,WAAAA,CAAYszB,GACVkQ,QAEA5lD,KAAK8N,aAAUgG,EACf9T,KAAK8kD,gBAAahxC,EAClB9T,KAAKitB,UAAOnZ,EACZ9T,KAAKC,WAAQ6T,EACb9T,KAAKu9B,YAASzpB,EACd9T,KAAKylD,mBAAgB3xC,EAEjB4hC,GACF1nC,OAAO8T,OAAO9hB,KAAM01C,EAExB,CAEArB,IAAAA,CAAKna,GACH,MAAM,cAACurB,EAAe33C,SAAS,YAACurB,EAAA,gBAAaD,IAAoBp5B,MAC3D,MAACq1E,EAAK,MAAEoE,GAASD,GAAcx5E,MAC/Bk6E,EAAcL,GAAUJ,EAAMx7C,QAAU2D,GAAqBk4C,GAEnE5/C,EAAIsC,OAEAi9C,EAAMnlE,IAAM+gE,EAAM/gE,GAAKmlE,EAAM5nE,IAAMwjE,EAAMxjE,IAC3CqoB,EAAImE,YACJ67C,EAAYhgD,EAAK6/C,GAAYN,EAAOh0B,EAAe4vB,IACnDn7C,EAAIpD,OACJojD,EAAYhgD,EAAK6/C,GAAY1E,GAAQ5vB,EAAeg0B,IACpDv/C,EAAIgG,UAAY7G,EAChBa,EAAI2E,KAAK,YAGX3E,EAAImE,YACJ67C,EAAYhgD,EAAK6/C,GAAY1E,EAAO5vB,IACpCvrB,EAAIgG,UAAY9G,EAChBc,EAAI2E,OAEJ3E,EAAI0C,SACN,CAEAszB,OAAAA,CAAQuoB,EAAQC,EAAQ3oB,GACtB,OAAOG,GAAQlwD,KAAMy4E,EAAQC,EAAQ3oB,EACvC,CAEA4oB,QAAAA,CAASF,EAAQ1oB,GACf,OAAOG,GAAQlwD,KAAMy4E,EAAQ,KAAM1oB,EACrC,CAEA6oB,QAAAA,CAASF,EAAQ3oB,GACf,OAAOG,GAAQlwD,KAAM,KAAM04E,EAAQ3oB,EACrC,CAEAS,cAAAA,CAAeT,GACb,MAAM,EAACr6C,EAAA,EAAGiR,EAAA,KAAGsG,EAAI,WAAE63B,GAAuC9kD,KAAKowD,SAAS,CAAC,IAAK,IAAK,OAAQ,cAAeL,GAC1G,MAAO,CACLr6C,EAAGovC,GAAcpvC,EAAIuX,GAAQ,EAAIvX,EACjCiR,EAAGm+B,EAAan+B,GAAKA,EAAIsG,GAAQ,EAErC,CAEAoiC,QAAAA,CAAS7/B,GACP,MAAgB,MAATA,EAAexvB,KAAKC,MAAQ,EAAID,KAAKu9B,OAAS,CACvD,GACFmoB,EAAAA,GAAAA,GArFqBu0B,GAAmB,KAE1B,QAAMv0B,EAAAA,GAAAA,GAFCu0B,GAAmB,WAOpB,CAChBh1B,cAAe,QACfnmB,YAAa,EACb+sB,aAAc,EACdpG,cAAe,OACf1nB,gBAAYjqB,KACZ4xC,EAAAA,GAAAA,GAbiBu0B,GAAmB,gBAkBf,CACrB7gD,gBAAiB,kBACjBC,YAAa,gBC9JV,SAAS6+C,GAAU53C,EAAM3a,EAAQkE,GACtC,MAAMmnB,EAAW1Q,EAAK0Q,SAChBjiB,EAASuR,EAAKvR,OACdorD,EAAUx0D,EAAOoJ,OACjBlI,EAAQ,GAEd,IAAK,MAAMupB,KAAWY,EAAU,CAC9B,IAAI,MAAC1qC,EAAA,IAAO4kB,GAAOklB,EACnBllB,EAAMkvD,GAAgB9zE,EAAO4kB,EAAK6D,GAElC,MAAM8H,EAASwjD,GAAWxwD,EAAUkF,EAAOzoB,GAAQyoB,EAAO7D,GAAMklB,EAAQ/+B,MAExE,IAAKsU,EAAOqrB,SAAU,CAGpBnqB,EAAMG,KAAK,CACTtB,OAAQ0qB,EACRzqB,OAAQkR,EACRvwB,MAAOyoB,EAAOzoB,GACd4kB,IAAK6D,EAAO7D,KAEd,Q,CAIF,MAAMovD,EAAiBvpC,GAAeprB,EAAQkR,GAE9C,IAAK,MAAM0jD,KAAOD,EAAgB,CAChC,MAAME,EAAYH,GAAWxwD,EAAUswD,EAAQI,EAAIj0E,OAAQ6zE,EAAQI,EAAIrvD,KAAMqvD,EAAIlpE,MAC3EopE,EAAclqC,GAAcH,EAASrhB,EAAQyrD,GAEnD,IAAK,MAAME,KAAcD,EACvB5zD,EAAMG,KAAK,CACTtB,OAAQg1D,EACR/0D,OAAQ40D,EACRj0E,MAAO,CACL,CAACujB,GAAW8wD,GAAS9jD,EAAQ2jD,EAAW,QAASvrE,KAAK6C,MAExDoZ,IAAK,CACH,CAACrB,GAAW8wD,GAAS9jD,EAAQ2jD,EAAW,MAAOvrE,KAAK8C,OAI5D,CACF,CACA,OAAO8U,CACT,CAEO,SAASwzD,GAAWxwD,EAAU8vC,EAAOztC,EAAM7a,GAChD,GAAIA,EACF,OAEF,IAAI/K,EAAQqzD,EAAM9vC,GACdqB,EAAMgB,EAAKrC,GAMf,MAJiB,UAAbA,IACFvjB,EAAQ0kB,GAAgB1kB,GACxB4kB,EAAMF,GAAgBE,IAEjB,CAACrB,WAAUvjB,QAAO4kB,MAC3B,CAEO,SAAS0vD,GAAoBC,EAAUv6C,GAC5C,MAAM,EAAC5qB,EAAI,KAAI,EAAEiR,EAAI,MAAQk0D,GAAY,CAAC,EACpCC,EAAax6C,EAAKvR,OAClBA,EAAS,GAaf,OAZAuR,EAAK0Q,SAASjkB,QAAQ,EAAEzmB,QAAO4kB,UAC7BA,EAAMkvD,GAAgB9zE,EAAO4kB,EAAK4vD,GAClC,MAAMnhB,EAAQmhB,EAAWx0E,GACnB4lB,EAAO4uD,EAAW5vD,GACd,OAANvE,GACFoI,EAAO/H,KAAK,CAACtR,EAAGikD,EAAMjkD,EAAGiR,MACzBoI,EAAO/H,KAAK,CAACtR,EAAGwW,EAAKxW,EAAGiR,OACT,OAANjR,IACTqZ,EAAO/H,KAAK,CAACtR,IAAGiR,EAAGgzC,EAAMhzC,IACzBoI,EAAO/H,KAAK,CAACtR,IAAGiR,EAAGuF,EAAKvF,OAGrBoI,CACT,CAEO,SAASqrD,GAAgB9zE,EAAO4kB,EAAK6D,GAC1C,KAAM7D,EAAM5kB,EAAO4kB,IAAO,CACxB,MAAM6E,EAAQhB,EAAO7D,GACrB,IAAK1B,MAAMuG,EAAMra,KAAO8T,MAAMuG,EAAMpJ,GAClC,KAEJ,CACA,OAAOuE,CACT,CAEA,SAASyvD,GAAShoE,EAAGC,EAAG6vB,EAAM5d,GAC5B,OAAIlS,GAAKC,EACAiS,EAAGlS,EAAE8vB,GAAO7vB,EAAE6vB,IAEhB9vB,EAAIA,EAAE8vB,GAAQ7vB,EAAIA,EAAE6vB,GAAQ,CACrC,CCnFO,SAASs4C,GAAoBF,EAAUv6C,GAC5C,IAAIvR,EAAS,GACTyiB,GAAQ,EAUZ,OARI58B,GAAQimE,IACVrpC,GAAQ,EAERziB,EAAS8rD,GAET9rD,EAAS6rD,GAAoBC,EAAUv6C,GAGlCvR,EAAOroB,OAAS,IAAIsxE,GAAY,CACrCjpD,SACAjhB,QAAS,CAAC08B,QAAS,GACnBgH,QACAG,UAAWH,IACR,IACP,CAEO,SAASwpC,GAAiBt1D,GAC/B,OAAOA,IAA0B,IAAhBA,EAAOmZ,IAC1B,CC5BO,SAASo8C,GAAe70D,EAAS1nB,EAAOw8E,GAC7C,MAAMx1D,EAASU,EAAQ1nB,GACvB,IAAImgC,EAAOnZ,EAAOmZ,KAClB,MAAMs8C,EAAU,CAACz8E,GACjB,IAAIinB,EAEJ,IAAKu1D,EACH,OAAOr8C,EAGT,OAAgB,IAATA,IAA6C,IAA3Bs8C,EAAQp1D,QAAQ8Y,GAAc,CACrD,IAAK3a,GAAS2a,GACZ,OAAOA,EAIT,GADAlZ,EAASS,EAAQyY,IACZlZ,EACH,OAAO,EAGT,GAAIA,EAAOuO,QACT,OAAO2K,EAGTs8C,EAAQn0D,KAAK6X,GACbA,EAAOlZ,EAAOkZ,IAChB,CAEA,OAAO,CACT,CAOO,SAASu8C,GAAY96C,EAAM5hC,EAAO2P,GAEvC,MAAMwwB,EAAOw8C,GAAgB/6C,GAE7B,GAAIrc,GAAS4a,GACX,OAAOrV,MAAMqV,EAAK/5B,QAAiB+5B,EAGrC,IAAIlZ,EAASjB,WAAWma,GAExB,OAAI3a,GAASyB,IAAW1W,KAAK2Z,MAAMjD,KAAYA,EACtC21D,GAAkBz8C,EAAK,GAAIngC,EAAOinB,EAAQtX,GAG5C,CAAC,SAAU,QAAS,MAAO,QAAS,SAAS0X,QAAQ8Y,IAAS,GAAKA,CAC5E,CAEA,SAASy8C,GAAkBC,EAAS78E,EAAOinB,EAAQtX,GAKjD,MAJgB,MAAZktE,GAA+B,MAAZA,IACrB51D,EAASjnB,EAAQinB,KAGfA,IAAWjnB,GAASinB,EAAS,GAAKA,GAAUtX,IAIzCsX,CACT,CAOO,SAAS61D,GAAgB38C,EAAM9D,GACpC,IAAIgC,EAAQ,KAWZ,MAVa,UAAT8B,EACF9B,EAAQhC,EAAMvG,OACI,QAATqK,EACT9B,EAAQhC,EAAMxG,IACLtQ,GAAS4a,GAElB9B,EAAQhC,EAAMnL,iBAAiBiP,EAAK/5B,OAC3Bi2B,EAAM+qB,eACf/oB,EAAQhC,EAAM+qB,gBAET/oB,CACT,CAQO,SAAS0+C,GAAgB58C,EAAM9D,EAAOkpB,GAC3C,IAAIn/C,EAYJ,OATEA,EADW,UAAT+5B,EACMolB,EACU,QAATplB,EACD9D,EAAMjtB,QAAQoX,QAAU6V,EAAMhpB,IAAMgpB,EAAMjpB,IACzCmS,GAAS4a,GAEVA,EAAK/5B,MAELi2B,EAAM4mC,eAET78D,CACT,CAKA,SAASu2E,GAAgB/6C,GACvB,MAAMxyB,EAAUwyB,EAAKxyB,QACf4tE,EAAa5tE,EAAQ+wB,KAC3B,IAAIA,EAAOva,GAAeo3D,GAAcA,EAAW/1D,OAAQ+1D,GAM3D,YAJa5nE,IAAT+qB,IACFA,IAAS/wB,EAAQsrB,kBAGN,IAATyF,GAA2B,OAATA,KAIT,IAATA,EACK,SAEFA,EACT,CC1HO,SAAS88C,GAAgBj2D,GAC9B,MAAM,MAACqV,EAAK,MAAEr8B,EAAA,KAAO4hC,GAAQ5a,EACvBqJ,EAAS,GACTiiB,EAAW1Q,EAAK0Q,SAChB4qC,EAAet7C,EAAKvR,OACpB8sD,EAAaC,GAAc/gD,EAAOr8B,GACxCm9E,EAAW70D,KAAK+zD,GAAoB,CAACrlE,EAAG,KAAMiR,EAAGoU,EAAMvG,QAAS8L,IAEhE,IAAK,IAAI9rB,EAAI,EAAGA,EAAIw8B,EAAStqC,OAAQ8N,IAAK,CACxC,MAAM47B,EAAUY,EAASx8B,GACzB,IAAK,IAAI+L,EAAI6vB,EAAQ9pC,MAAOia,GAAK6vB,EAAQllB,IAAK3K,IAC5Cw7D,GAAehtD,EAAQ6sD,EAAar7D,GAAIs7D,EAE5C,CACA,OAAO,IAAI7D,GAAY,CAACjpD,SAAQjhB,QAAS,CAAC,GAC5C,CAOA,SAASguE,GAAc/gD,EAAOr8B,GAC5B,MAAMs9E,EAAQ,GACR5e,EAAQriC,EAAM6e,wBAAwB,QAE5C,IAAK,IAAIplC,EAAI,EAAGA,EAAI4oD,EAAM12D,OAAQ8N,IAAK,CACrC,MAAMsa,EAAOsuC,EAAM5oD,GACnB,GAAIsa,EAAKpwB,QAAUA,EACjB,MAEGowB,EAAKusB,QACR2gC,EAAMC,QAAQntD,EAAKS,QAEvB,CACA,OAAOysD,CACT,CAOA,SAASD,GAAehtD,EAAQmtD,EAAaL,GAC3C,MAAMM,EAAY,GAClB,IAAK,IAAI57D,EAAI,EAAGA,EAAIs7D,EAAWn1E,OAAQ6Z,IAAK,CAC1C,MAAM+f,EAAOu7C,EAAWt7D,IAClB,MAACo5C,EAAK,KAAEztC,EAAI,MAAE6D,GAASqsD,GAAU97C,EAAM47C,EAAa,KAE1D,MAAKnsD,GAAU4pC,GAASztC,GAGxB,GAAIytC,EAEFwiB,EAAUF,QAAQlsD,QAGlB,GADAhB,EAAO/H,KAAK+I,IACP7D,EAEH,KAGN,CACA6C,EAAO/H,QAAQm1D,EACjB,CAQA,SAASC,GAAU97C,EAAM47C,EAAaryD,GACpC,MAAMkG,EAAQuQ,EAAKjf,YAAY66D,EAAaryD,GAC5C,IAAKkG,EACH,MAAO,CAAC,EAGV,MAAMssD,EAAatsD,EAAMlG,GACnBmnB,EAAW1Q,EAAK0Q,SAChB8pC,EAAax6C,EAAKvR,OACxB,IAAI4qC,GAAQ,EACRztC,GAAO,EACX,IAAK,IAAI1X,EAAI,EAAGA,EAAIw8B,EAAStqC,OAAQ8N,IAAK,CACxC,MAAM47B,EAAUY,EAASx8B,GACnB8nE,EAAaxB,EAAW1qC,EAAQ9pC,OAAOujB,GACvC0yD,EAAYzB,EAAW1qC,EAAQllB,KAAKrB,GAC1C,GAAI6B,GAAW2wD,EAAYC,EAAYC,GAAY,CACjD5iB,EAAQ0iB,IAAeC,EACvBpwD,EAAOmwD,IAAeE,EACtB,K,CAEJ,CACA,MAAO,CAAC5iB,QAAOztC,OAAM6D,QACvB,CCzGO,MAAMysD,GACXp6D,WAAAA,CAAY4d,GACVhgC,KAAK0V,EAAIsqB,EAAKtqB,EACd1V,KAAK2mB,EAAIqZ,EAAKrZ,EACd3mB,KAAKi+B,OAAS+B,EAAK/B,MACrB,CAEA24C,WAAAA,CAAY18C,EAAKrD,EAAQmJ,GACvB,MAAM,EAACtqB,EAAA,EAAGiR,EAAA,OAAGsX,GAAUj+B,KAGvB,OAFA62B,EAASA,GAAU,CAACvwB,MAAO,EAAG4kB,IAAKtD,IACnCsS,EAAIqE,IAAI7oB,EAAGiR,EAAGsX,EAAQpH,EAAO3L,IAAK2L,EAAOvwB,OAAO,IACxC05B,EAAKnJ,MACf,CAEAxV,WAAAA,CAAY0O,GACV,MAAM,EAACra,EAAA,EAAGiR,EAAA,OAAGsX,GAAUj+B,KACjByqB,EAAQsF,EAAMtF,MACpB,MAAO,CACL/U,EAAGA,EAAIzG,KAAK6iB,IAAIrH,GAASwT,EACzBtX,EAAGA,EAAI1X,KAAK4hB,IAAIpG,GAASwT,EACzBxT,QAEJ,ECbK,SAAS6Z,GAAW5e,GACzB,MAAM,MAACiQ,EAAK,KAAEkJ,EAAA,KAAMyB,GAAQ5a,EAE5B,GAAIxB,GAAS2a,GACX,OAAO49C,GAAe9mD,EAAOkJ,GAG/B,GAAa,UAATA,EACF,OAAO88C,GAAgBj2D,GAGzB,GAAa,UAATmZ,EACF,OAAO,EAGT,MAAMg8C,EAAW6B,GAAgBh3D,GAEjC,OAAIm1D,aAAoB2B,GACf3B,EAGFE,GAAoBF,EAAUv6C,EACvC,CAMA,SAASm8C,GAAe9mD,EAAOj3B,GAC7B,MAAMowB,EAAO6G,EAAM8nB,eAAe/+C,GAC5Bw1B,EAAUpF,GAAQ6G,EAAMs0B,iBAAiBvrD,GAC/C,OAAOw1B,EAAUpF,EAAKS,QAAU,IAClC,CAEA,SAASmtD,GAAgBh3D,GACvB,MAAMqV,EAAQrV,EAAOqV,OAAS,CAAC,EAE/B,OAAIA,EAAMozB,yBACDwuB,GAAwBj3D,GAE1Bk3D,GAAsBl3D,EAC/B,CAGA,SAASk3D,GAAsBl3D,GAC7B,MAAM,MAACqV,EAAQ,QAAI8D,GAAQnZ,EACrBqX,EAAQy+C,GAAgB38C,EAAM9D,GAEpC,GAAI7W,GAAS6Y,GAAQ,CACnB,MAAM+nB,EAAa/pB,EAAM6pB,eAEzB,MAAO,CACLlvC,EAAGovC,EAAa/nB,EAAQ,KACxBpW,EAAGm+B,EAAa,KAAO/nB,E,CAI3B,OAAO,IACT,CAEA,SAAS4/C,GAAwBj3D,GAC/B,MAAM,MAACqV,EAAA,KAAO8D,GAAQnZ,EAChB5X,EAAUitB,EAAMjtB,QAChBpH,EAASq0B,EAAMgkB,YAAYr4C,OAC3BJ,EAAQwH,EAAQoX,QAAU6V,EAAMjpB,IAAMipB,EAAMhpB,IAC5CjN,EAAQ22E,GAAgB58C,EAAM9D,EAAOz0B,GACrCqf,EAAS,GAEf,GAAI7X,EAAQkpB,KAAK82B,SAAU,CACzB,MAAMzH,EAAStrB,EAAMozB,yBAAyB,EAAG7nD,GACjD,OAAO,IAAIk2E,GAAU,CACnB9mE,EAAG2wC,EAAO3wC,EACViR,EAAG0/B,EAAO1/B,EACVsX,OAAQlD,EAAM6yB,8BAA8B9oD,I,CAIhD,IAAK,IAAI0P,EAAI,EAAGA,EAAI9N,IAAU8N,EAC5BmR,EAAOqB,KAAK+T,EAAMozB,yBAAyB35C,EAAG1P,IAEhD,OAAO6gB,CACT,CCzFO,SAASk3D,GAAU3iD,EAAKxU,EAAQuZ,GACrC,MAAMtZ,EAAS2e,GAAW5e,IACpB,MAACiQ,EAAK,MAAEj3B,EAAK,KAAE4hC,EAAI,MAAEvF,EAAK,KAAEvL,GAAQ9J,EACpCo3D,EAAWx8C,EAAKxyB,QAChB4tE,EAAaoB,EAASj+C,KACtBnc,EAAQo6D,EAAS1jD,iBACjB,MAAC2jD,EAAQr6D,EAAK,MAAEs5D,EAAQt5D,GAASg5D,GAAc,CAAC,EAChD5sD,EAAO6G,EAAM8nB,eAAe/+C,GAC5Bo4B,EAAOqc,GAAmBxd,EAAO7G,GACnCnJ,GAAU2a,EAAKvR,OAAOroB,SACxBy4B,GAASjF,EAAK+E,GACd+9C,GAAO9iD,EAAK,CAACoG,OAAM3a,SAAQo3D,QAAOf,QAAO/8C,OAAMlE,QAAOvL,OAAMsH,SAC5DsI,GAAWlF,GAEf,CAEA,SAAS8iD,GAAO9iD,EAAKwb,GACnB,MAAM,KAACpV,EAAA,OAAM3a,EAAA,MAAQo3D,EAAK,MAAEf,EAAK,KAAE/8C,EAAA,MAAMlE,EAAA,KAAOjE,GAAQ4e,EAClD7rB,EAAWyW,EAAKkR,MAAQ,QAAUkE,EAAIlmB,KAE5C0K,EAAIsC,OAEJ,IAAIygD,EAAYjB,EACZA,IAAUe,IACK,MAAblzD,GACFqzD,GAAahjD,EAAKvU,EAAQsZ,EAAK1K,KAC/BsK,GAAK3E,EAAK,CAACoG,OAAM3a,SAAQjD,MAAOq6D,EAAOhiD,QAAOlR,WAAUiN,SACxDoD,EAAI0C,UACJ1C,EAAIsC,OACJ0gD,GAAahjD,EAAKvU,EAAQsZ,EAAKzK,SACT,MAAb3K,IACTszD,GAAejjD,EAAKvU,EAAQsZ,EAAKxQ,MACjCoQ,GAAK3E,EAAK,CAACoG,OAAM3a,SAAQjD,MAAOs5D,EAAOjhD,QAAOlR,WAAUiN,SACxDoD,EAAI0C,UACJ1C,EAAIsC,OACJ2gD,GAAejjD,EAAKvU,EAAQsZ,EAAKvQ,OACjCuuD,EAAYF,IAGhBl+C,GAAK3E,EAAK,CAACoG,OAAM3a,SAAQjD,MAAOu6D,EAAWliD,QAAOlR,WAAUiN,SAE5DoD,EAAI0C,SACN,CAEA,SAASsgD,GAAahjD,EAAKvU,EAAQy3D,GACjC,MAAM,SAACpsC,EAAA,OAAUjiB,GAAUpJ,EAC3B,IAAIg0C,GAAQ,EACR0jB,GAAW,EAEfnjD,EAAImE,YACJ,IAAK,MAAM+R,KAAWY,EAAU,CAC9B,MAAM,MAAC1qC,EAAA,IAAO4kB,GAAOklB,EACfjI,EAAapZ,EAAOzoB,GACpBumD,EAAY99B,EAAOqrD,GAAgB9zE,EAAO4kB,EAAK6D,IACjD4qC,GACFz/B,EAAIuE,OAAO0J,EAAWzyB,EAAGyyB,EAAWxhB,GACpCgzC,GAAQ,IAERz/B,EAAIwE,OAAOyJ,EAAWzyB,EAAG0nE,GACzBljD,EAAIwE,OAAOyJ,EAAWzyB,EAAGyyB,EAAWxhB,IAEtC02D,IAAa13D,EAAOixD,YAAY18C,EAAKkW,EAAS,CAAC2R,KAAMs7B,IACjDA,EACFnjD,EAAIsE,YAEJtE,EAAIwE,OAAOmuB,EAAUn3C,EAAG0nE,EAE5B,CAEAljD,EAAIwE,OAAO/Y,EAAOg0C,QAAQjkD,EAAG0nE,GAC7BljD,EAAIsE,YACJtE,EAAIpD,MACN,CAEA,SAASqmD,GAAejjD,EAAKvU,EAAQ23D,GACnC,MAAM,SAACtsC,EAAA,OAAUjiB,GAAUpJ,EAC3B,IAAIg0C,GAAQ,EACR0jB,GAAW,EAEfnjD,EAAImE,YACJ,IAAK,MAAM+R,KAAWY,EAAU,CAC9B,MAAM,MAAC1qC,EAAA,IAAO4kB,GAAOklB,EACfjI,EAAapZ,EAAOzoB,GACpBumD,EAAY99B,EAAOqrD,GAAgB9zE,EAAO4kB,EAAK6D,IACjD4qC,GACFz/B,EAAIuE,OAAO0J,EAAWzyB,EAAGyyB,EAAWxhB,GACpCgzC,GAAQ,IAERz/B,EAAIwE,OAAO4+C,EAAOn1C,EAAWxhB,GAC7BuT,EAAIwE,OAAOyJ,EAAWzyB,EAAGyyB,EAAWxhB,IAEtC02D,IAAa13D,EAAOixD,YAAY18C,EAAKkW,EAAS,CAAC2R,KAAMs7B,IACjDA,EACFnjD,EAAIsE,YAEJtE,EAAIwE,OAAO4+C,EAAOzwB,EAAUlmC,EAEhC,CAEAuT,EAAIwE,OAAO4+C,EAAO33D,EAAOg0C,QAAQhzC,GACjCuT,EAAIsE,YACJtE,EAAIpD,MACN,CAEA,SAAS+H,GAAK3E,EAAKwb,GACjB,MAAM,KAACpV,EAAA,OAAM3a,EAAA,SAAQkE,EAAA,MAAUnH,EAAA,MAAOqY,EAAA,KAAOjE,GAAQ4e,EAC/C1E,EAAWknC,GAAU53C,EAAM3a,EAAQkE,GAEzC,IAAK,MAAOnE,OAAQ5U,EAAK6U,OAAQ40D,EAAG,MAAEj0E,EAAK,IAAE4kB,KAAQ8lB,EAAU,CAC7D,MAAO3yC,OAAO,gBAAC+6B,EAAkB1W,GAAS,CAAC,GAAK5R,EAC1CysE,GAAsB,IAAX53D,EAEjBuU,EAAIsC,OACJtC,EAAIgG,UAAY9G,EAEhBokD,GAAWtjD,EAAKa,EAAOjE,EAAMymD,GAAYlD,GAAWxwD,EAAUvjB,EAAO4kB,IAErEgP,EAAImE,YAEJ,MAAMg/C,IAAa/8C,EAAKs2C,YAAY18C,EAAKppB,GAEzC,IAAIO,EACJ,GAAIksE,EAAU,CACRF,EACFnjD,EAAIsE,YAEJi/C,GAAmBvjD,EAAKvU,EAAQuF,EAAKrB,GAGvC,MAAM6zD,IAAe/3D,EAAOixD,YAAY18C,EAAKqgD,EAAK,CAACx4B,KAAMs7B,EAAUn4D,SAAS,IAC5E7T,EAAOgsE,GAAYK,EACdrsE,GACHosE,GAAmBvjD,EAAKvU,EAAQrf,EAAOujB,E,CAI3CqQ,EAAIsE,YACJtE,EAAI2E,KAAKxtB,EAAO,UAAY,WAE5B6oB,EAAI0C,SACN,CACF,CAEA,SAAS4gD,GAAWtjD,EAAKa,EAAOjE,EAAMD,GACpC,MAAMmc,EAAYjY,EAAMpF,MAAMqd,WACxB,SAACnpB,EAAA,MAAUvjB,EAAA,IAAO4kB,GAAO2L,GAAU,CAAC,EAE1C,GAAiB,MAAbhN,GAAiC,MAAbA,EAAkB,CACxC,IAAI4E,EAAM8F,EAAK7F,EAAO8F,EAEL,MAAb3K,GACF4E,EAAOnoB,EACPiuB,EAAMye,EAAUze,IAChB7F,EAAQxD,EACRsJ,EAASwe,EAAUxe,SAEnB/F,EAAOukB,EAAUvkB,KACjB8F,EAAMjuB,EACNooB,EAAQskB,EAAUtkB,MAClB8F,EAAStJ,GAGXgP,EAAImE,YAEAvH,IACFrI,EAAOxf,KAAK6C,IAAI2c,EAAMqI,EAAKrI,MAC3BC,EAAQzf,KAAK8C,IAAI2c,EAAOoI,EAAKpI,OAC7B6F,EAAMtlB,KAAK6C,IAAIyiB,EAAKuC,EAAKvC,KACzBC,EAASvlB,KAAK8C,IAAIyiB,EAAQsC,EAAKtC,SAGjC0F,EAAI0E,KAAKnQ,EAAM8F,EAAK7F,EAAQD,EAAM+F,EAASD,GAC3C2F,EAAIpD,M,CAER,CAEA,SAAS2mD,GAAmBvjD,EAAKvU,EAAQoK,EAAOlG,GAC9C,MAAM8zD,EAAoBh4D,EAAOtE,YAAY0O,EAAOlG,GAChD8zD,GACFzjD,EAAIwE,OAAOi/C,EAAkBjoE,EAAGioE,EAAkBh3D,EAEtD,CC9KA,IAAAjoB,GAAe,CACbqS,GAAI,SAEJ6sE,mBAAAA,CAAoBjoD,EAAOkoD,EAAO/vE,GAChC,MAAMO,GAASsnB,EAAMj2B,KAAK45B,UAAY,IAAI5yB,OACpC0f,EAAU,GAChB,IAAI0I,EAAMta,EAAG8rB,EAAM5a,EAEnB,IAAKlR,EAAI,EAAGA,EAAInG,IAASmG,EACvBsa,EAAO6G,EAAM8nB,eAAejpC,GAC5B8rB,EAAOxR,EAAKS,QACZ7J,EAAS,KAEL4a,GAAQA,EAAKxyB,SAAWwyB,aAAgB03C,KAC1CtyD,EAAS,CACPwO,QAASyB,EAAMs0B,iBAAiBz1C,GAChC9V,MAAO8V,EACPqqB,KAAMu8C,GAAY96C,EAAM9rB,EAAGnG,GAC3BsnB,QACAnG,KAAMV,EAAKgrB,WAAWhsC,QAAQusB,UAC9BU,MAAOjM,EAAKM,OACZkR,SAIJxR,EAAKgvD,QAAUp4D,EACfU,EAAQY,KAAKtB,GAGf,IAAKlR,EAAI,EAAGA,EAAInG,IAASmG,EACvBkR,EAASU,EAAQ5R,GACZkR,IAA0B,IAAhBA,EAAOmZ,OAItBnZ,EAAOmZ,KAAOo8C,GAAe70D,EAAS5R,EAAG1G,EAAQotE,WAErD,EAEA6C,UAAAA,CAAWpoD,EAAOkoD,EAAO/vE,GACvB,MAAMumC,EAA4B,eAArBvmC,EAAQkwE,SACf7lC,EAAWxiB,EAAM65B,+BACjBvwB,EAAOtJ,EAAMqd,UACnB,IAAK,IAAIx+B,EAAI2jC,EAASzxC,OAAS,EAAG8N,GAAK,IAAKA,EAAG,CAC7C,MAAMkR,EAASyyB,EAAS3jC,GAAGspE,QACtBp4D,IAILA,EAAO4a,KAAKwsB,oBAAoB7tB,EAAMvZ,EAAO8J,MACzC6kB,GAAQ3uB,EAAOmZ,MACjBg+C,GAAUlnD,EAAMuE,IAAKxU,EAAQuZ,GAEjC,CACF,EAEAg/C,kBAAAA,CAAmBtoD,EAAOkoD,EAAO/vE,GAC/B,GAAyB,uBAArBA,EAAQkwE,SACV,OAGF,MAAM7lC,EAAWxiB,EAAM65B,+BACvB,IAAK,IAAIh7C,EAAI2jC,EAASzxC,OAAS,EAAG8N,GAAK,IAAKA,EAAG,CAC7C,MAAMkR,EAASyyB,EAAS3jC,GAAGspE,QAEvB9C,GAAiBt1D,IACnBm3D,GAAUlnD,EAAMuE,IAAKxU,EAAQiQ,EAAMqd,UAEvC,CACF,EAEAkrC,iBAAAA,CAAkBvoD,EAAOz2B,EAAM4O,GAC7B,MAAM4X,EAASxmB,EAAK4vB,KAAKgvD,QAEpB9C,GAAiBt1D,IAAgC,sBAArB5X,EAAQkwE,UAIzCnB,GAAUlnD,EAAMuE,IAAKxU,EAAQiQ,EAAMqd,UACrC,EAEA3f,SAAU,CACR6nD,WAAW,EACX8C,SAAU,sBCvEd,MAAMG,GAAaA,CAACC,EAAWxZ,KAC7B,IAAI,UAACyZ,EAAYzZ,EAAA,SAAU0Z,EAAW1Z,GAAYwZ,EAOlD,OALIA,EAAUG,gBACZF,EAAYpvE,KAAK8C,IAAIssE,EAAWzZ,GAChC0Z,EAAWF,EAAUI,iBAAmBvvE,KAAK8C,IAAIusE,EAAU1Z,IAGtD,CACL0Z,WACAD,YACAI,WAAYxvE,KAAK6C,IAAI8yD,EAAUyZ,KAI7BK,GAAaA,CAAC/rE,EAAGC,IAAY,OAAND,GAAoB,OAANC,GAAcD,EAAE8S,eAAiB7S,EAAE6S,cAAgB9S,EAAEjU,QAAUkU,EAAElU,MAErG,MAAMigF,WAAe7lB,GAK1B12C,WAAAA,CAAYw0B,GACVgP,QAEA5lD,KAAK4+E,QAAS,EAGd5+E,KAAK6+E,eAAiB,GAKtB7+E,KAAK8+E,aAAe,KAGpB9+E,KAAK++E,cAAe,EAEpB/+E,KAAK21B,MAAQihB,EAAOjhB,MACpB31B,KAAK8N,QAAU8oC,EAAO9oC,QACtB9N,KAAKk6B,IAAM0c,EAAO1c,IAClBl6B,KAAKg/E,iBAAclrE,EACnB9T,KAAKi/E,iBAAcnrE,EACnB9T,KAAKk/E,gBAAaprE,EAClB9T,KAAK+sC,eAAYj5B,EACjB9T,KAAK0hC,cAAW5tB,EAChB9T,KAAKu0B,SAAMzgB,EACX9T,KAAKw0B,YAAS1gB,EACd9T,KAAKyuB,UAAO3a,EACZ9T,KAAK0uB,WAAQ5a,EACb9T,KAAKu9B,YAASzpB,EACd9T,KAAKC,WAAQ6T,EACb9T,KAAKg8D,cAAWloD,EAChB9T,KAAKuvD,cAAWz7C,EAChB9T,KAAK2iB,YAAS7O,EACd9T,KAAKkyD,cAAWp+C,CAClB,CAEAsiC,MAAAA,CAAO1U,EAAUqL,EAAWY,GAC1B3tC,KAAK0hC,SAAWA,EAChB1hC,KAAK+sC,UAAYA,EACjB/sC,KAAKg8D,SAAWruB,EAEhB3tC,KAAK69D,gBACL79D,KAAKm/E,cACLn/E,KAAKgR,KACP,CAEA6sD,aAAAA,GACM79D,KAAK4kD,gBACP5kD,KAAKC,MAAQD,KAAK0hC,SAClB1hC,KAAKyuB,KAAOzuB,KAAKg8D,SAASvtC,KAC1BzuB,KAAK0uB,MAAQ1uB,KAAKC,QAElBD,KAAKu9B,OAASv9B,KAAK+sC,UACnB/sC,KAAKu0B,IAAMv0B,KAAKg8D,SAASznC,IACzBv0B,KAAKw0B,OAASx0B,KAAKu9B,OAEvB,CAEA4hD,WAAAA,GACE,MAAMf,EAAYp+E,KAAK8N,QAAQgxC,QAAU,CAAC,EAC1C,IAAIkgC,EAAcp6D,GAAKw5D,EAAUzyB,eAAgB,CAAC3rD,KAAK21B,OAAQ31B,OAAS,GAEpEo+E,EAAUr3C,SACZi4C,EAAcA,EAAYj4C,OAAQvoC,GAAS4/E,EAAUr3C,OAAOvoC,EAAMwB,KAAK21B,MAAMj2B,QAG3E0+E,EAAUl1D,OACZ81D,EAAcA,EAAY91D,KAAK,CAACvW,EAAGC,IAAMwrE,EAAUl1D,KAAKvW,EAAGC,EAAG5S,KAAK21B,MAAMj2B,QAGvEM,KAAK8N,QAAQoX,SACf85D,EAAY95D,UAGdllB,KAAKg/E,YAAcA,CACrB,CAEAhuE,GAAAA,GACE,MAAM,QAAClD,EAAO,IAAEosB,GAAOl6B,KAMvB,IAAK8N,EAAQ4oB,QAEX,YADA12B,KAAKC,MAAQD,KAAKu9B,OAAS,GAI7B,MAAM6gD,EAAYtwE,EAAQgxC,OACpBsgC,EAAYv8C,GAAOu7C,EAAUvkD,MAC7B+qC,EAAWwa,EAAU/xE,KACrB6yD,EAAclgE,KAAKq/E,uBACnB,SAACf,EAAQ,WAAEG,GAAcN,GAAWC,EAAWxZ,GAErD,IAAI3kE,EAAOs9B,EAEXrD,EAAIL,KAAOulD,EAAUnjD,OAEjBj8B,KAAK4kD,gBACP3kD,EAAQD,KAAK0hC,SACbnE,EAASv9B,KAAKs/E,SAASpf,EAAa0E,EAAU0Z,EAAUG,GAAc,KAEtElhD,EAASv9B,KAAK+sC,UACd9sC,EAAQD,KAAKu/E,SAASrf,EAAakf,EAAWd,EAAUG,GAAc,IAGxEz+E,KAAKC,MAAQgP,KAAK8C,IAAI9R,EAAO6N,EAAQ4zB,UAAY1hC,KAAK0hC,UACtD1hC,KAAKu9B,OAAStuB,KAAK8C,IAAIwrB,EAAQzvB,EAAQi/B,WAAa/sC,KAAK+sC,UAC3D,CAKAuyC,QAAAA,CAASpf,EAAa0E,EAAU0Z,EAAUG,GACxC,MAAM,IAACvkD,EAAG,SAAEwH,EAAU5zB,SAAUgxC,QAAQ,QAACxqB,KAAat0B,KAChDw/E,EAAWx/E,KAAK6+E,eAAiB,GAEjCK,EAAal/E,KAAKk/E,WAAa,CAAC,GAChCnlD,EAAa0kD,EAAanqD,EAChC,IAAImrD,EAAcvf,EAElBhmC,EAAIiG,UAAY,OAChBjG,EAAIkG,aAAe,SAEnB,IAAIs/C,GAAO,EACPnrD,GAAOwF,EAgBX,OAfA/5B,KAAKg/E,YAAYjyD,QAAQ,CAACm/B,EAAY13C,KACpC,MAAM26B,EAAYmvC,EAAY1Z,EAAW,EAAK1qC,EAAIiC,YAAY+vB,EAAWx0B,MAAMz3B,OAErE,IAANuU,GAAW0qE,EAAWA,EAAWx4E,OAAS,GAAKyoC,EAAY,EAAI7a,EAAUoN,KAC3E+9C,GAAe1lD,EACfmlD,EAAWA,EAAWx4E,QAAU8N,EAAI,EAAI,EAAI,IAAM,EAClD+f,GAAOwF,EACP2lD,KAGFF,EAAShrE,GAAK,CAACia,KAAM,EAAG8F,MAAKmrD,MAAKz/E,MAAOkvC,EAAW5R,OAAQkhD,GAE5DS,EAAWA,EAAWx4E,OAAS,IAAMyoC,EAAY7a,IAG5CmrD,CACT,CAEAF,QAAAA,CAASrf,EAAakf,EAAWd,EAAUqB,GACzC,MAAM,IAACzlD,EAAG,UAAE6S,EAAWj/B,SAAUgxC,QAAQ,QAACxqB,KAAat0B,KACjDw/E,EAAWx/E,KAAK6+E,eAAiB,GACjCI,EAAcj/E,KAAKi/E,YAAc,GACjCW,EAAc7yC,EAAYmzB,EAEhC,IAAI2f,EAAavrD,EACbwrD,EAAkB,EAClBC,EAAmB,EAEnBtxD,EAAO,EACPuxD,EAAM,EAyBV,OAvBAhgF,KAAKg/E,YAAYjyD,QAAQ,CAACm/B,EAAY13C,KACpC,MAAM,UAAC26B,EAAS,WAAEsvC,GAAcwB,GAAkB3B,EAAUc,EAAWllD,EAAKgyB,EAAYyzB,GAGpFnrE,EAAI,GAAKurE,EAAmBtB,EAAa,EAAInqD,EAAUsrD,IACzDC,GAAcC,EAAkBxrD,EAChC2qD,EAAYj4D,KAAK,CAAC/mB,MAAO6/E,EAAiBviD,OAAQwiD,IAClDtxD,GAAQqxD,EAAkBxrD,EAC1B0rD,IACAF,EAAkBC,EAAmB,GAIvCP,EAAShrE,GAAK,CAACia,OAAM8F,IAAKwrD,EAAkBC,MAAK//E,MAAOkvC,EAAW5R,OAAQkhD,GAG3EqB,EAAkB7wE,KAAK6C,IAAIguE,EAAiB3wC,GAC5C4wC,GAAoBtB,EAAanqD,IAGnCurD,GAAcC,EACdb,EAAYj4D,KAAK,CAAC/mB,MAAO6/E,EAAiBviD,OAAQwiD,IAE3CF,CACT,CAEAK,cAAAA,GACE,IAAKlgF,KAAK8N,QAAQ4oB,QAChB,OAEF,MAAMwpC,EAAclgE,KAAKq/E,uBAClBR,eAAgBW,EAAU1xE,SAAS,MAACwgB,EAAOwwB,QAAQ,QAACxqB,GAAQ,IAAE3F,IAAQ3uB,KACvEmgF,EAAY7wC,GAAc3gB,EAAK3uB,KAAKyuB,KAAMzuB,KAAKC,OACrD,GAAID,KAAK4kD,eAAgB,CACvB,IAAI86B,EAAM,EACNjxD,EAAOF,GAAeD,EAAOtuB,KAAKyuB,KAAO6F,EAASt0B,KAAK0uB,MAAQ1uB,KAAKk/E,WAAWQ,IACnF,IAAK,MAAMU,KAAUZ,EACfE,IAAQU,EAAOV,MACjBA,EAAMU,EAAOV,IACbjxD,EAAOF,GAAeD,EAAOtuB,KAAKyuB,KAAO6F,EAASt0B,KAAK0uB,MAAQ1uB,KAAKk/E,WAAWQ,KAEjFU,EAAO7rD,KAAOv0B,KAAKu0B,IAAM2rC,EAAc5rC,EACvC8rD,EAAO3xD,KAAO0xD,EAAUjxC,WAAWixC,EAAUzqE,EAAE+Y,GAAO2xD,EAAOngF,OAC7DwuB,GAAQ2xD,EAAOngF,MAAQq0B,C,KAEpB,CACL,IAAI0rD,EAAM,EACNzrD,EAAMhG,GAAeD,EAAOtuB,KAAKu0B,IAAM2rC,EAAc5rC,EAASt0B,KAAKw0B,OAASx0B,KAAKi/E,YAAYe,GAAKziD,QACtG,IAAK,MAAM6iD,KAAUZ,EACfY,EAAOJ,MAAQA,IACjBA,EAAMI,EAAOJ,IACbzrD,EAAMhG,GAAeD,EAAOtuB,KAAKu0B,IAAM2rC,EAAc5rC,EAASt0B,KAAKw0B,OAASx0B,KAAKi/E,YAAYe,GAAKziD,SAEpG6iD,EAAO7rD,IAAMA,EACb6rD,EAAO3xD,MAAQzuB,KAAKyuB,KAAO6F,EAC3B8rD,EAAO3xD,KAAO0xD,EAAUjxC,WAAWixC,EAAUzqE,EAAE0qE,EAAO3xD,MAAO2xD,EAAOngF,OACpEs0B,GAAO6rD,EAAO7iD,OAASjJ,C,CAG7B,CAEAswB,YAAAA,GACE,MAAiC,QAA1B5kD,KAAK8N,QAAQyhD,UAAgD,WAA1BvvD,KAAK8N,QAAQyhD,QACzD,CAEAlb,IAAAA,GACE,GAAIr0C,KAAK8N,QAAQ4oB,QAAS,CACxB,MAAMwD,EAAMl6B,KAAKk6B,IACjBiF,GAASjF,EAAKl6B,MAEdA,KAAKqgF,QAELjhD,GAAWlF,E,CAEf,CAKAmmD,KAAAA,GACE,MAAOvyE,QAASkyB,EAAA,YAAMi/C,EAAA,WAAaC,EAAA,IAAYhlD,GAAOl6B,MAChD,MAACsuB,EAAOwwB,OAAQs/B,GAAap+C,EAC7BsgD,EAAejtD,GAAS3Q,MACxBy9D,EAAY7wC,GAActP,EAAKrR,IAAK3uB,KAAKyuB,KAAMzuB,KAAKC,OACpDm/E,EAAYv8C,GAAOu7C,EAAUvkD,OAC7B,QAACvF,GAAW8pD,EACZxZ,EAAWwa,EAAU/xE,KACrBkzE,EAAe3b,EAAW,EAChC,IAAI4b,EAEJxgF,KAAKukE,YAGLrqC,EAAIiG,UAAYggD,EAAUhgD,UAAU,QACpCjG,EAAIkG,aAAe,SACnBlG,EAAIjD,UAAY,GAChBiD,EAAIL,KAAOulD,EAAUnjD,OAErB,MAAM,SAACqiD,EAAA,UAAUD,EAAA,WAAWI,GAAcN,GAAWC,EAAWxZ,GAG1D6b,EAAgB,SAAS/qE,EAAGiR,EAAGulC,GACnC,GAAI1iC,MAAM80D,IAAaA,GAAY,GAAK90D,MAAM60D,IAAcA,EAAY,EACtE,OAIFnkD,EAAIsC,OAEJ,MAAMvF,EAAY3S,GAAe4nC,EAAWj1B,UAAW,GAUvD,GATAiD,EAAIgG,UAAY5b,GAAe4nC,EAAWhsB,UAAWogD,GACrDpmD,EAAIi8C,QAAU7xD,GAAe4nC,EAAWiqB,QAAS,QACjDj8C,EAAI8xB,eAAiB1nC,GAAe4nC,EAAWF,eAAgB,GAC/D9xB,EAAI+xB,SAAW3nC,GAAe4nC,EAAWD,SAAU,SACnD/xB,EAAIjD,UAAYA,EAChBiD,EAAI6G,YAAczc,GAAe4nC,EAAWnrB,YAAau/C,GAEzDpmD,EAAIgqC,YAAY5/C,GAAe4nC,EAAWH,SAAU,KAEhDqyB,EAAUG,cAAe,CAG3B,MAAMmC,EAAc,CAClBziD,OAAQogD,EAAYpvE,KAAK0xE,MAAQ,EACjC5iD,WAAYmuB,EAAWnuB,WACvBC,SAAUkuB,EAAWluB,SACrBc,YAAa7H,GAETi0B,EAAUi1B,EAAUlxC,MAAMv5B,EAAG4oE,EAAW,GACxCnzB,EAAUxkC,EAAI45D,EAGpB9iD,GAAgBvD,EAAKwmD,EAAax1B,EAASC,EAASizB,EAAUI,iBAAmBF,E,KAC5E,CAGL,MAAMsC,EAAUj6D,EAAI1X,KAAK6C,KAAK8yD,EAAWyZ,GAAa,EAAG,GACnDwC,EAAWV,EAAUjxC,WAAWx5B,EAAG4oE,GACnCzyB,EAAelpB,GAAcupB,EAAWL,cAE9C3xB,EAAImE,YAEArwB,OAAOse,OAAOu/B,GAAcoc,KAAKv2D,GAAW,IAANA,GACxCkwB,GAAmB1H,EAAK,CACtBxkB,EAAGmrE,EACHl6D,EAAGi6D,EACHtsE,EAAGgqE,EACHzsE,EAAGwsE,EACHpgD,OAAQ4tB,IAGV3xB,EAAI0E,KAAKiiD,EAAUD,EAAStC,EAAUD,GAGxCnkD,EAAI2E,OACc,IAAd5H,GACFiD,EAAI6E,Q,CAIR7E,EAAI0C,SACN,EAEM+E,EAAW,SAASjsB,EAAGiR,EAAGulC,GAC9B9qB,GAAWlH,EAAKgyB,EAAWx0B,KAAMhiB,EAAGiR,EAAK83D,EAAa,EAAIW,EAAW,CACnE7+C,cAAe2rB,EAAW7Q,OAC1Blb,UAAWggD,EAAUhgD,UAAU+rB,EAAW/rB,YAE9C,EAGMykB,EAAe5kD,KAAK4kD,eACpBsb,EAAclgE,KAAKq/E,sBAEvBmB,EADE57B,EACO,CACPlvC,EAAG6Y,GAAeD,EAAOtuB,KAAKyuB,KAAO6F,EAASt0B,KAAK0uB,MAAQwwD,EAAW,IACtEv4D,EAAG3mB,KAAKu0B,IAAMD,EAAU4rC,EACxB5/B,KAAM,GAGC,CACP5qB,EAAG1V,KAAKyuB,KAAO6F,EACf3N,EAAG4H,GAAeD,EAAOtuB,KAAKu0B,IAAM2rC,EAAc5rC,EAASt0B,KAAKw0B,OAASyqD,EAAY,GAAG1hD,QACxF+C,KAAM,GAIViP,GAAsBvvC,KAAKk6B,IAAK8F,EAAK8gD,eAErC,MAAM/mD,EAAa0kD,EAAanqD,EAChCt0B,KAAKg/E,YAAYjyD,QAAQ,CAACm/B,EAAY13C,KACpC0lB,EAAI6G,YAAcmrB,EAAWJ,UAC7B5xB,EAAIgG,UAAYgsB,EAAWJ,UAE3B,MAAM5vB,EAAYhC,EAAIiC,YAAY+vB,EAAWx0B,MAAMz3B,MAC7CkgC,EAAYggD,EAAUhgD,UAAU+rB,EAAW/rB,YAAc+rB,EAAW/rB,UAAYi+C,EAAUj+C,YAC1FlgC,EAAQq+E,EAAWiC,EAAerkD,EACxC,IAAIxmB,EAAI8qE,EAAO9qE,EACXiR,EAAI65D,EAAO75D,EAEfw5D,EAAUnxC,SAAShvC,KAAKC,OAEpB2kD,EACEpwC,EAAI,GAAKkB,EAAIzV,EAAQq0B,EAAUt0B,KAAK0uB,QACtC/H,EAAI65D,EAAO75D,GAAKoT,EAChBymD,EAAOlgD,OACP5qB,EAAI8qE,EAAO9qE,EAAI6Y,GAAeD,EAAOtuB,KAAKyuB,KAAO6F,EAASt0B,KAAK0uB,MAAQwwD,EAAWsB,EAAOlgD,QAElF9rB,EAAI,GAAKmS,EAAIoT,EAAa/5B,KAAKw0B,SACxC9e,EAAI8qE,EAAO9qE,EAAIA,EAAIupE,EAAYuB,EAAOlgD,MAAMrgC,MAAQq0B,EACpDksD,EAAOlgD,OACP3Z,EAAI65D,EAAO75D,EAAI4H,GAAeD,EAAOtuB,KAAKu0B,IAAM2rC,EAAc5rC,EAASt0B,KAAKw0B,OAASyqD,EAAYuB,EAAOlgD,MAAM/C,SAGhH,MAAMwjD,EAAQZ,EAAUzqE,EAAEA,GAS1B,GAPA+qE,EAAcM,EAAOp6D,EAAGulC,GAExBx2C,EAAI8Y,GAAO2R,EAAWzqB,EAAI4oE,EAAWiC,EAAc37B,EAAelvC,EAAIzV,EAAQD,KAAK0uB,MAAOsR,EAAKrR,KAG/FgT,EAASw+C,EAAUzqE,EAAEA,GAAIiR,EAAGulC,GAExBtH,EACF47B,EAAO9qE,GAAKzV,EAAQq0B,OACf,GAA+B,kBAApB43B,EAAWx0B,KAAmB,CAC9C,MAAMspD,EAAiB5B,EAAUrlD,WACjCymD,EAAO75D,GAAKs6D,GAA0B/0B,EAAY80B,GAAkB1sD,C,MAEpEksD,EAAO75D,GAAKoT,IAIhB8V,GAAqB7vC,KAAKk6B,IAAK8F,EAAK8gD,cACtC,CAKAvc,SAAAA,GACE,MAAMvkC,EAAOhgC,KAAK8N,QACZkyD,EAAYhgC,EAAKxyB,MACjB0zE,EAAYr+C,GAAOm9B,EAAUnmC,MAC7BsnD,EAAev+C,GAAUo9B,EAAU1rC,SAEzC,IAAK0rC,EAAUtpC,QACb,OAGF,MAAMypD,EAAY7wC,GAActP,EAAKrR,IAAK3uB,KAAKyuB,KAAMzuB,KAAKC,OACpDi6B,EAAMl6B,KAAKk6B,IACXq1B,EAAWyQ,EAAUzQ,SACrBgxB,EAAeW,EAAU7zE,KAAO,EAChC+zE,EAA6BD,EAAa5sD,IAAMgsD,EACtD,IAAI55D,EAIA8H,EAAOzuB,KAAKyuB,KACZiT,EAAW1hC,KAAKC,MAEpB,GAAID,KAAK4kD,eAEPljB,EAAWzyB,KAAK6C,OAAO9R,KAAKk/E,YAC5Bv4D,EAAI3mB,KAAKu0B,IAAM6sD,EACf3yD,EAAOF,GAAeyR,EAAK1R,MAAOG,EAAMzuB,KAAK0uB,MAAQgT,OAChD,CAEL,MAAMqL,EAAY/sC,KAAKi/E,YAAYlqC,OAAO,CAACC,EAAK3nC,IAAS4B,KAAK6C,IAAIkjC,EAAK3nC,EAAKkwB,QAAS,GACrF5W,EAAIy6D,EAA6B7yD,GAAeyR,EAAK1R,MAAOtuB,KAAKu0B,IAAKv0B,KAAKw0B,OAASuY,EAAY/M,EAAK8e,OAAOxqB,QAAUt0B,KAAKq/E,sB,CAK7H,MAAM3pE,EAAI6Y,GAAeghC,EAAU9gC,EAAMA,EAAOiT,GAGhDxH,EAAIiG,UAAYggD,EAAUhgD,UAAU9R,GAAmBkhC,IACvDr1B,EAAIkG,aAAe,SACnBlG,EAAI6G,YAAci/B,EAAUt9C,MAC5BwX,EAAIgG,UAAY8/B,EAAUt9C,MAC1BwX,EAAIL,KAAOqnD,EAAUjlD,OAErBmF,GAAWlH,EAAK8lC,EAAUtoC,KAAMhiB,EAAGiR,EAAGu6D,EACxC,CAKA7B,mBAAAA,GACE,MAAMrf,EAAYhgE,KAAK8N,QAAQN,MACzB0zE,EAAYr+C,GAAOm9B,EAAUnmC,MAC7BsnD,EAAev+C,GAAUo9B,EAAU1rC,SACzC,OAAO0rC,EAAUtpC,QAAUwqD,EAAUnnD,WAAaonD,EAAa5jD,OAAS,CAC1E,CAKA8jD,gBAAAA,CAAiB3rE,EAAGiR,GAClB,IAAInS,EAAG8sE,EAAQC,EAEf,GAAI71D,GAAWhW,EAAG1V,KAAKyuB,KAAMzuB,KAAK0uB,QAC7BhD,GAAW/E,EAAG3mB,KAAKu0B,IAAKv0B,KAAKw0B,QAGhC,IADA+sD,EAAKvhF,KAAK6+E,eACLrqE,EAAI,EAAGA,EAAI+sE,EAAG76E,SAAU8N,EAG3B,GAFA8sE,EAASC,EAAG/sE,GAERkX,GAAWhW,EAAG4rE,EAAO7yD,KAAM6yD,EAAO7yD,KAAO6yD,EAAOrhF,QAC/CyrB,GAAW/E,EAAG26D,EAAO/sD,IAAK+sD,EAAO/sD,IAAM+sD,EAAO/jD,QAEjD,OAAOv9B,KAAKg/E,YAAYxqE,GAK9B,OAAO,IACT,CAMAgtE,WAAAA,CAAYzuE,GACV,MAAMitB,EAAOhgC,KAAK8N,QAClB,IAAK2zE,GAAW1uE,EAAEzT,KAAM0gC,GACtB,OAIF,MAAM0hD,EAAc1hF,KAAKqhF,iBAAiBtuE,EAAE2C,EAAG3C,EAAE4T,GAEjD,GAAe,cAAX5T,EAAEzT,MAAmC,aAAXyT,EAAEzT,KAAqB,CACnD,MAAMggC,EAAWt/B,KAAK8+E,aAChB6C,EAAWjD,GAAWp/C,EAAUoiD,GAClCpiD,IAAaqiD,GACf/8D,GAAKob,EAAK4hD,QAAS,CAAC7uE,EAAGusB,EAAUt/B,MAAOA,MAG1CA,KAAK8+E,aAAe4C,EAEhBA,IAAgBC,GAClB/8D,GAAKob,EAAKrF,QAAS,CAAC5nB,EAAG2uE,EAAa1hF,MAAOA,KAE/C,MAAW0hF,GACT98D,GAAKob,EAAKphC,QAAS,CAACmU,EAAG2uE,EAAa1hF,MAAOA,KAE/C,EAGF,SAASigF,GAAkB3B,EAAUc,EAAWllD,EAAKgyB,EAAYyzB,GAC/D,MAAMxwC,EAAY0yC,GAAmB31B,EAAYoyB,EAAUc,EAAWllD,GAChEukD,EAAaqD,GAAoBnC,EAAazzB,EAAYkzB,EAAUrlD,YAC1E,MAAO,CAACoV,YAAWsvC,aACrB,CAEA,SAASoD,GAAmB31B,EAAYoyB,EAAUc,EAAWllD,GAC3D,IAAI6nD,EAAiB71B,EAAWx0B,KAIhC,OAHIqqD,GAA4C,kBAAnBA,IAC3BA,EAAiBA,EAAehtC,OAAO,CAACpiC,EAAGC,IAAMD,EAAEjM,OAASkM,EAAElM,OAASiM,EAAIC,IAEtE0rE,EAAYc,EAAU/xE,KAAO,EAAK6sB,EAAIiC,YAAY4lD,GAAgB9hF,KAC3E,CAEA,SAAS6hF,GAAoBnC,EAAazzB,EAAY80B,GACpD,IAAIvC,EAAakB,EAIjB,MAH+B,kBAApBzzB,EAAWx0B,OACpB+mD,EAAawC,GAA0B/0B,EAAY80B,IAE9CvC,CACT,CAEA,SAASwC,GAA0B/0B,EAAY80B,GAC7C,MAAM3gB,EAAcnU,EAAWx0B,KAAOw0B,EAAWx0B,KAAKhxB,OAAS,EAC/D,OAAOs6E,EAAiB3gB,CAC1B,CAEA,SAASohB,GAAWniF,EAAM0gC,GACxB,QAAc,cAAT1gC,GAAiC,aAATA,IAAyB0gC,EAAKrF,UAAWqF,EAAK4hD,aAGvE5hD,EAAKphC,SAAqB,UAATU,GAA6B,YAATA,EAI3C,CAEA,IAAA0iF,GAAe,CACbjxE,GAAI,SAMJkxE,SAAUtD,GAEVr4E,KAAAA,CAAMqvB,EAAOkoD,EAAO/vE,GAClB,MAAM49C,EAAS/1B,EAAM+1B,OAAS,IAAIizB,GAAO,CAACzkD,IAAKvE,EAAMuE,IAAKpsB,UAAS6nB,UACnE+7B,GAAQ5a,UAAUnhB,EAAO+1B,EAAQ59C,GACjC4jD,GAAQyC,OAAOx+B,EAAO+1B,EACxB,EAEAra,IAAAA,CAAK1b,GACH+7B,GAAQ4C,UAAU3+B,EAAOA,EAAM+1B,eACxB/1B,EAAM+1B,MACf,EAKAgS,YAAAA,CAAa/nC,EAAOkoD,EAAO/vE,GACzB,MAAM49C,EAAS/1B,EAAM+1B,OACrBgG,GAAQ5a,UAAUnhB,EAAO+1B,EAAQ59C,GACjC49C,EAAO59C,QAAUA,CACnB,EAIA+wD,WAAAA,CAAYlpC,GACV,MAAM+1B,EAAS/1B,EAAM+1B,OACrBA,EAAOyzB,cACPzzB,EAAOw0B,gBACT,EAGAgC,UAAAA,CAAWvsD,EAAOz2B,GACXA,EAAK4yE,QACRn8C,EAAM+1B,OAAO81B,YAAYtiF,EAAKutC,MAElC,EAEApZ,SAAU,CACRqD,SAAS,EACT64B,SAAU,MACVjhC,MAAO,SACP4jC,UAAU,EACVhtC,SAAS,EACTvC,OAAQ,IAGR/jB,OAAAA,CAAQmU,EAAGm5C,EAAYR,GACrB,MAAMhtD,EAAQwtD,EAAWzmC,aACnB08D,EAAKz2B,EAAO/1B,MACdwsD,EAAGl4B,iBAAiBvrD,IACtByjF,EAAGhuD,KAAKz1B,GACRwtD,EAAW7Q,QAAS,IAEpB8mC,EAAGnuD,KAAKt1B,GACRwtD,EAAW7Q,QAAS,EAExB,EAEA1gB,QAAS,KACTinD,QAAS,KAET9iC,OAAQ,CACNp8B,MAAQwX,GAAQA,EAAIvE,MAAM7nB,QAAQ4U,MAClC47D,SAAU,GACVhqD,QAAS,GAYTq3B,cAAAA,CAAeh2B,GACb,MAAM2D,EAAW3D,EAAMj2B,KAAK45B,UACrBwlB,QAAQ,cAACy/B,EAAA,WAAexgD,EAAU,UAAEoC,EAAA,MAAWzd,EAAA,gBAAOkpC,EAAe,aAAEC,IAAiBl2B,EAAM+1B,OAAO59C,QAE5G,OAAO6nB,EAAMyiB,yBAAyBvjC,IAAKia,IACzC,MAAMzwB,EAAQywB,EAAKgrB,WAAWvO,SAASgzC,EAAgB,OAAIzqE,GACrDgrB,EAAc8D,GAAUvkC,EAAMygC,aAEpC,MAAO,CACLpH,KAAM4B,EAASxK,EAAKpwB,OAAO4O,MAC3B4yB,UAAW7hC,EAAM+6B,gBACjB0yB,UAAWppC,EACX24B,QAASvsB,EAAKoF,QACdiiD,QAAS93E,EAAMq0C,eACfqZ,SAAU1tD,EAAMs0C,WAChBqZ,eAAgB3tD,EAAMu0C,iBACtBqZ,SAAU5tD,EAAMw0C,gBAChB5b,WAAY6H,EAAY7+B,MAAQ6+B,EAAYvB,QAAU,EACtDwD,YAAa1iC,EAAMg7B,YACnB0E,WAAYA,GAAc1/B,EAAM0/B,WAChCC,SAAU3/B,EAAM2/B,SAChBmC,UAAWA,GAAa9hC,EAAM8hC,UAC9B0rB,aAAcD,IAAoBC,GAAgBxtD,EAAMwtD,cAGxDpmC,aAAcqJ,EAAKpwB,QAEpBsB,KACL,GAGFwN,MAAO,CACLkV,MAAQwX,GAAQA,EAAIvE,MAAM7nB,QAAQ4U,MAClCgU,SAAS,EACT64B,SAAU,SACV73B,KAAM,KAIVkB,YAAa,CACXjF,YAAcv0B,IAAUA,EAAKs5B,WAAW,MACxComB,OAAQ,CACNnrB,YAAcv0B,IAAU,CAAC,iBAAkB,SAAU,QAAQm3B,SAASn3B,MCzsBhE,IAAIgjF,QCahB,MAAMC,GAAc,CAIlBC,OAAAA,CAAQ90D,GACN,IAAKA,EAAM9mB,OACT,OAAO,EAGT,IAAI8N,EAAGb,EACH4uE,EAAO,IAAI70D,IACX/G,EAAI,EACJtY,EAAQ,EAEZ,IAAKmG,EAAI,EAAGb,EAAM6Z,EAAM9mB,OAAQ8N,EAAIb,IAAOa,EAAG,CAC5C,MAAM/T,EAAK+sB,EAAMhZ,GAAG42B,QACpB,GAAI3qC,GAAMA,EAAGu4D,WAAY,CACvB,MAAMntB,EAAMprC,EAAGs4D,kBACfwpB,EAAKjhF,IAAIuqC,EAAIn2B,GACbiR,GAAKklB,EAAIllB,IACPtY,C,CAEN,CAGA,GAAc,IAAVA,GAA6B,IAAdk0E,EAAKl1E,KACtB,OAAO,EAGT,MAAMm1E,EAAW,IAAID,GAAMxtC,OAAO,CAACpiC,EAAGC,IAAMD,EAAIC,GAAK2vE,EAAKl1E,KAE1D,MAAO,CACLqI,EAAG8sE,EACH77D,EAAGA,EAAItY,EAEX,EAKA2iD,OAAAA,CAAQxjC,EAAOi1D,GACb,IAAKj1D,EAAM9mB,OACT,OAAO,EAGT,IAGI8N,EAAGb,EAAK+uE,EAHRhtE,EAAI+sE,EAAc/sE,EAClBiR,EAAI87D,EAAc97D,EAClB4pC,EAAc/qD,OAAOuiB,kBAGzB,IAAKvT,EAAI,EAAGb,EAAM6Z,EAAM9mB,OAAQ8N,EAAIb,IAAOa,EAAG,CAC5C,MAAM/T,EAAK+sB,EAAMhZ,GAAG42B,QACpB,GAAI3qC,GAAMA,EAAGu4D,WAAY,CACvB,MAAM3S,EAAS5lD,EAAG+vD,iBACZ19C,EAAI8X,GAAsB63D,EAAep8B,GAE3CvzC,EAAIy9C,IACNA,EAAcz9C,EACd4vE,EAAiBjiF,E,CAGvB,CAEA,GAAIiiF,EAAgB,CAClB,MAAMC,EAAKD,EAAe3pB,kBAC1BrjD,EAAIitE,EAAGjtE,EACPiR,EAAIg8D,EAAGh8D,C,CAGT,MAAO,CACLjR,IACAiR,IAEJ,GAIF,SAASi8D,GAAa31D,EAAM41D,GAU1B,OATIA,IACEjuE,GAAQiuE,GAEV98E,MAAM8d,UAAUmD,KAAKjC,MAAMkI,EAAM41D,GAEjC51D,EAAKjG,KAAK67D,IAIP51D,CACT,CAQA,SAAS61D,GAAcrvE,GACrB,OAAoB,kBAARA,GAAoBA,aAAelU,SAAWkU,EAAIsS,QAAQ,OAAS,EACtEtS,EAAIqT,MAAM,MAEZrT,CACT,CASA,SAASsvE,GAAkBptD,EAAOn3B,GAChC,MAAM,QAAC4sC,EAAO,aAAE3lB,EAAA,MAAc/mB,GAASF,EACjCs7C,EAAankB,EAAM8nB,eAAeh4B,GAAcq0B,YAChD,MAACxsC,EAAA,MAAOxI,GAASg1C,EAAWiG,iBAAiBrhD,GAEnD,MAAO,CACLi3B,QACAroB,QACAs6B,OAAQkS,EAAWqF,UAAUzgD,GAC7Bm8C,IAAKllB,EAAMj2B,KAAK45B,SAAS7T,GAAc/lB,KAAKhB,GAC5CskF,eAAgBl+E,EAChByqB,QAASuqB,EAAW6C,aACpB/B,UAAWl8C,EACX+mB,eACA2lB,UAEJ,CAKA,SAAS63C,GAAeC,EAASp1E,GAC/B,MAAMosB,EAAMgpD,EAAQvtD,MAAMuE,KACpB,KAACipD,EAAI,OAAEC,EAAA,MAAQ51E,GAAS01E,GACxB,SAAC5E,EAAA,UAAUD,GAAavwE,EACxBu1E,EAAWxgD,GAAO/0B,EAAQu1E,UAC1BnC,EAAYr+C,GAAO/0B,EAAQozE,WAC3BoC,EAAazgD,GAAO/0B,EAAQw1E,YAC5BC,EAAiB/1E,EAAM9G,OACvB88E,EAAkBJ,EAAO18E,OACzB+8E,EAAoBN,EAAKz8E,OAEzB4tB,EAAUsO,GAAU90B,EAAQwmB,SAClC,IAAIiJ,EAASjJ,EAAQiJ,OACjBt9B,EAAQ,EAGRyjF,EAAqBP,EAAKpuC,OAAO,CAAC1mC,EAAOs1E,IAAat1E,EAAQs1E,EAASC,OAAOl9E,OAASi9E,EAAStiD,MAAM36B,OAASi9E,EAASE,MAAMn9E,OAAQ,GAQ1I,GAPAg9E,GAAsBR,EAAQY,WAAWp9E,OAASw8E,EAAQa,UAAUr9E,OAEhE68E,IACFhmD,GAAUgmD,EAAiBrC,EAAUnnD,YACnCwpD,EAAiB,GAAKz1E,EAAQk2E,aAC/Bl2E,EAAQm2E,mBAEPP,EAAoB,CAEtB,MAAMQ,EAAiBp2E,EAAQq2E,cAAgBl1E,KAAK6C,IAAIusE,EAAWgF,EAAStpD,YAAcspD,EAAStpD,WACnGwD,GAAUkmD,EAAoBS,GAC5BR,EAAqBD,GAAqBJ,EAAStpD,YACnD2pD,EAAqB,GAAK51E,EAAQs2E,W,CAElCZ,IACFjmD,GAAUzvB,EAAQu2E,gBACjBb,EAAkBF,EAAWvpD,YAC5BypD,EAAkB,GAAK11E,EAAQw2E,eAInC,IAAIC,EAAe,EACnB,MAAMC,EAAe,SAASlkD,GAC5BrgC,EAAQgP,KAAK6C,IAAI7R,EAAOi6B,EAAIiC,YAAYmE,GAAMrgC,MAAQskF,EACxD,EA+BA,OA7BArqD,EAAIsC,OAEJtC,EAAIL,KAAOqnD,EAAUjlD,OACrBjX,GAAKk+D,EAAQ11E,MAAOg3E,GAGpBtqD,EAAIL,KAAOwpD,EAASpnD,OACpBjX,GAAKk+D,EAAQY,WAAWhhC,OAAOogC,EAAQa,WAAYS,GAGnDD,EAAez2E,EAAQq2E,cAAiB7F,EAAW,EAAIxwE,EAAQglD,WAAc,EAC7E9tC,GAAKm+D,EAAOQ,IACV3+D,GAAK2+D,EAASC,OAAQY,GACtBx/D,GAAK2+D,EAAStiD,MAAOmjD,GACrBx/D,GAAK2+D,EAASE,MAAOW,KAIvBD,EAAe,EAGfrqD,EAAIL,KAAOypD,EAAWrnD,OACtBjX,GAAKk+D,EAAQE,OAAQoB,GAErBtqD,EAAI0C,UAGJ38B,GAASq0B,EAAQr0B,MAEV,CAACA,QAAOs9B,SACjB,CAEA,SAASknD,GAAgB9uD,EAAOtoB,GAC9B,MAAM,EAACsZ,EAAA,OAAG4W,GAAUlwB,EAEpB,OAAIsZ,EAAI4W,EAAS,EACR,MACE5W,EAAKgP,EAAM4H,OAASA,EAAS,EAC/B,SAEF,QACT,CAEA,SAASmnD,GAAoBC,EAAQhvD,EAAO7nB,EAAST,GACnD,MAAM,EAACqI,EAAA,MAAGzV,GAASoN,EACbu3E,EAAQ92E,EAAQ+2E,UAAY/2E,EAAQg3E,aAC1C,MAAe,SAAXH,GAAqBjvE,EAAIzV,EAAQ2kF,EAAQjvD,EAAM11B,QAIpC,UAAX0kF,GAAsBjvE,EAAIzV,EAAQ2kF,EAAQ,QAA9C,EAGF,CAEA,SAASG,GAAgBpvD,EAAO7nB,EAAST,EAAM23E,GAC7C,MAAM,EAACtvE,EAAA,MAAGzV,GAASoN,GACZpN,MAAOglF,EAAYjyC,WAAW,KAACvkB,EAAI,MAAEC,IAAUiH,EACtD,IAAIgvD,EAAS,SAcb,MAZe,WAAXK,EACFL,EAASjvE,IAAM+Y,EAAOC,GAAS,EAAI,OAAS,QACnChZ,GAAKzV,EAAQ,EACtB0kF,EAAS,OACAjvE,GAAKuvE,EAAahlF,EAAQ,IACnC0kF,EAAS,SAGPD,GAAoBC,EAAQhvD,EAAO7nB,EAAST,KAC9Cs3E,EAAS,UAGJA,CACT,CAKA,SAASO,GAAmBvvD,EAAO7nB,EAAST,GAC1C,MAAM23E,EAAS33E,EAAK23E,QAAUl3E,EAAQk3E,QAAUP,GAAgB9uD,EAAOtoB,GAEvE,MAAO,CACLs3E,OAAQt3E,EAAKs3E,QAAU72E,EAAQ62E,QAAUI,GAAgBpvD,EAAO7nB,EAAST,EAAM23E,GAC/EA,SAEJ,CAEA,SAASG,GAAO93E,EAAMs3E,GACpB,IAAI,EAACjvE,EAAA,MAAGzV,GAASoN,EAMjB,MALe,UAAXs3E,EACFjvE,GAAKzV,EACe,WAAX0kF,IACTjvE,GAAMzV,EAAQ,GAETyV,CACT,CAEA,SAAS0vE,GAAO/3E,EAAM23E,EAAQK,GAE5B,IAAI,EAAC1+D,EAAA,OAAG4W,GAAUlwB,EAQlB,MAPe,QAAX23E,EACFr+D,GAAK0+D,EAEL1+D,GADoB,WAAXq+D,EACJznD,EAAS8nD,EAER9nD,EAAS,EAEV5W,CACT,CAKA,SAAS2+D,GAAmBx3E,EAAST,EAAMk4E,EAAW5vD,GACpD,MAAM,UAACkvD,EAAS,aAAEC,EAAA,aAAclnD,GAAgB9vB,GAC1C,OAAC62E,EAAA,OAAQK,GAAUO,EACnBF,EAAiBR,EAAYC,GAC7B,QAACjjD,EAAO,SAAEG,EAAQ,WAAEF,EAAA,YAAYC,GAAeY,GAAc/E,GAEnE,IAAIloB,EAAIyvE,GAAO93E,EAAMs3E,GACrB,MAAMh+D,EAAIy+D,GAAO/3E,EAAM23E,EAAQK,GAc/B,MAZe,WAAXL,EACa,SAAXL,EACFjvE,GAAK2vE,EACe,UAAXV,IACTjvE,GAAK2vE,GAEa,SAAXV,EACTjvE,GAAKzG,KAAK6C,IAAI+vB,EAASC,GAAc+iD,EACjB,UAAXF,IACTjvE,GAAKzG,KAAK6C,IAAIkwB,EAAUD,GAAe8iD,GAGlC,CACLnvE,EAAG8V,GAAY9V,EAAG,EAAGigB,EAAM11B,MAAQoN,EAAKpN,OACxC0mB,EAAG6E,GAAY7E,EAAG,EAAGgP,EAAM4H,OAASlwB,EAAKkwB,QAE7C,CAEA,SAASioD,GAAYtC,EAAS50D,EAAOxgB,GACnC,MAAMwmB,EAAUsO,GAAU90B,EAAQwmB,SAElC,MAAiB,WAAVhG,EACH40D,EAAQxtE,EAAIwtE,EAAQjjF,MAAQ,EAClB,UAAVquB,EACE40D,EAAQxtE,EAAIwtE,EAAQjjF,MAAQq0B,EAAQ5F,MACpCw0D,EAAQxtE,EAAI4e,EAAQ7F,IAC5B,CAKA,SAASg3D,GAAwB7gE,GAC/B,OAAOg+D,GAAa,GAAIE,GAAcl+D,GACxC,CAEA,SAAS8gE,GAAqBx+C,EAAQg8C,EAASyC,GAC7C,OAAOliD,GAAcyD,EAAQ,CAC3Bg8C,UACAyC,eACArmF,KAAM,WAEV,CAEA,SAASsmF,GAAkBhyC,EAAWpa,GACpC,MAAM2B,EAAW3B,GAAWA,EAAQjK,SAAWiK,EAAQjK,QAAQ2zD,SAAW1pD,EAAQjK,QAAQ2zD,QAAQtvC,UAClG,OAAOzY,EAAWyY,EAAUzY,SAASA,GAAYyY,CACnD,CAEA,MAAMiyC,GAAmB,CAEvBC,YAAapiE,GACblW,KAAAA,CAAMm4E,GACJ,GAAIA,EAAaj/E,OAAS,EAAG,CAC3B,MAAMlI,EAAOmnF,EAAa,GACpB7mC,EAAStgD,EAAKm3B,MAAMj2B,KAAKo/C,OACzBinC,EAAajnC,EAASA,EAAOp4C,OAAS,EAE5C,GAAI1G,MAAQA,KAAK8N,SAAiC,YAAtB9N,KAAK8N,QAAQysB,KACvC,OAAO/7B,EAAK+wB,QAAQjiB,OAAS,GACxB,GAAI9O,EAAK8O,MACd,OAAO9O,EAAK8O,MACP,GAAIy4E,EAAa,GAAKvnF,EAAKo8C,UAAYmrC,EAC5C,OAAOjnC,EAAOtgD,EAAKo8C,U,CAIvB,MAAO,EACT,EACAorC,WAAYtiE,GAGZogE,WAAYpgE,GAGZuiE,YAAaviE,GACbpW,KAAAA,CAAM44E,GACJ,GAAIlmF,MAAQA,KAAK8N,SAAiC,YAAtB9N,KAAK8N,QAAQysB,KACvC,OAAO2rD,EAAY54E,MAAQ,KAAO44E,EAAYlD,gBAAkBkD,EAAYlD,eAG9E,IAAI11E,EAAQ44E,EAAY32D,QAAQjiB,OAAS,GAErCA,IACFA,GAAS,MAEX,MAAMxI,EAAQohF,EAAYlD,eAI1B,OAHKp/D,GAAc9e,KACjBwI,GAASxI,GAEJwI,CACT,EACA64E,UAAAA,CAAWD,GACT,MAAMp3D,EAAOo3D,EAAYvwD,MAAM8nB,eAAeyoC,EAAYzgE,cACpD3X,EAAUghB,EAAKgrB,WAAWvO,SAAS26C,EAAYtrC,WACrD,MAAO,CACLvhB,YAAavrB,EAAQurB,YACrBD,gBAAiBtrB,EAAQsrB,gBACzB0F,YAAahxB,EAAQgxB,YACrB6T,WAAY7kC,EAAQ6kC,WACpBC,iBAAkB9kC,EAAQ8kC,iBAC1BiZ,aAAc,EAElB,EACAu6B,cAAAA,GACE,OAAOpmF,KAAK8N,QAAQu4E,SACtB,EACAC,eAAAA,CAAgBJ,GACd,MAAMp3D,EAAOo3D,EAAYvwD,MAAM8nB,eAAeyoC,EAAYzgE,cACpD3X,EAAUghB,EAAKgrB,WAAWvO,SAAS26C,EAAYtrC,WACrD,MAAO,CACL7c,WAAYjwB,EAAQiwB,WACpBC,SAAUlwB,EAAQkwB,SAEtB,EACAuoD,WAAY7iE,GAGZqgE,UAAWrgE,GAGX8iE,aAAc9iE,GACd0/D,OAAQ1/D,GACR+iE,YAAa/iE,IAYf,SAASgjE,GAA2B9yC,EAAWx0C,EAAM86B,EAAK0sC,GACxD,MAAM59C,EAAS4qB,EAAUx0C,GAAM2kB,KAAKmW,EAAK0sC,GAEzC,MAAsB,qBAAX59C,EACF68D,GAAiBzmF,GAAM2kB,KAAKmW,EAAK0sC,GAGnC59C,CACT,CAEO,MAAM29D,WAAgB7tB,GAO3B12C,WAAAA,CAAYw0B,GACVgP,QAEA5lD,KAAK4mF,QAAU,EACf5mF,KAAKs0C,QAAU,GACft0C,KAAK6mF,oBAAiB/yE,EACtB9T,KAAK8mF,WAAQhzE,EACb9T,KAAK+mF,uBAAoBjzE,EACzB9T,KAAKgnF,cAAgB,GACrBhnF,KAAKy3C,iBAAc3jC,EACnB9T,KAAKk8C,cAAWpoC,EAChB9T,KAAK21B,MAAQihB,EAAOjhB,MACpB31B,KAAK8N,QAAU8oC,EAAO9oC,QACtB9N,KAAKinF,gBAAanzE,EAClB9T,KAAKwN,WAAQsG,EACb9T,KAAK8jF,gBAAahwE,EAClB9T,KAAKmjF,UAAOrvE,EACZ9T,KAAK+jF,eAAYjwE,EACjB9T,KAAKojF,YAAStvE,EACd9T,KAAK2kF,YAAS7wE,EACd9T,KAAKglF,YAASlxE,EACd9T,KAAK0V,OAAI5B,EACT9T,KAAK2mB,OAAI7S,EACT9T,KAAKu9B,YAASzpB,EACd9T,KAAKC,WAAQ6T,EACb9T,KAAKknF,YAASpzE,EACd9T,KAAKmnF,YAASrzE,EAGd9T,KAAKonF,iBAActzE,EACnB9T,KAAKqnF,sBAAmBvzE,EACxB9T,KAAKsnF,qBAAkBxzE,CACzB,CAEAwoC,UAAAA,CAAWxuC,GACT9N,KAAK8N,QAAUA,EACf9N,KAAK+mF,uBAAoBjzE,EACzB9T,KAAKk8C,cAAWpoC,CAClB,CAKA2sC,kBAAAA,GACE,MAAMxF,EAASj7C,KAAK+mF,kBAEpB,GAAI9rC,EACF,OAAOA,EAGT,MAAMtlB,EAAQ31B,KAAK21B,MACb7nB,EAAU9N,KAAK8N,QAAQ63B,WAAW3lC,KAAKo9B,cACvC4C,EAAOlyB,EAAQ0rD,SAAW7jC,EAAM7nB,QAAQgmB,WAAahmB,EAAQmmB,WAC7DA,EAAa,IAAI0iB,GAAW32C,KAAK21B,MAAOqK,GAK9C,OAJIA,EAAKmE,aACPnkC,KAAK+mF,kBAAoB/4E,OAAOwyC,OAAOvsB,IAGlCA,CACT,CAKAmJ,UAAAA,GACE,OAAOp9B,KAAKk8C,WACZl8C,KAAKk8C,SAAWwpC,GAAqB1lF,KAAK21B,MAAMyH,aAAcp9B,KAAMA,KAAKgnF,eAC3E,CAEAO,QAAAA,CAAS/tD,EAAS1rB,GAChB,MAAM,UAAC8lC,GAAa9lC,EAEdg4E,EAAcY,GAA2B9yC,EAAW,cAAe5zC,KAAMw5B,GACzEhsB,EAAQk5E,GAA2B9yC,EAAW,QAAS5zC,KAAMw5B,GAC7DwsD,EAAaU,GAA2B9yC,EAAW,aAAc5zC,KAAMw5B,GAE7E,IAAI6H,EAAQ,GAKZ,OAJAA,EAAQuhD,GAAavhD,EAAOyhD,GAAcgD,IAC1CzkD,EAAQuhD,GAAavhD,EAAOyhD,GAAct1E,IAC1C6zB,EAAQuhD,GAAavhD,EAAOyhD,GAAckD,IAEnC3kD,CACT,CAEAmmD,aAAAA,CAAc7B,EAAc73E,GAC1B,OAAO23E,GACLiB,GAA2B54E,EAAQ8lC,UAAW,aAAc5zC,KAAM2lF,GAEtE,CAEA8B,OAAAA,CAAQ9B,EAAc73E,GACpB,MAAM,UAAC8lC,GAAa9lC,EACd45E,EAAY,GAgBlB,OAdA1iE,GAAK2gE,EAAensD,IAClB,MAAMmqD,EAAW,CACfC,OAAQ,GACRviD,MAAO,GACPwiD,MAAO,IAEH8D,EAAS/B,GAAkBhyC,EAAWpa,GAC5CopD,GAAae,EAASC,OAAQd,GAAc4D,GAA2BiB,EAAQ,cAAe3nF,KAAMw5B,KACpGopD,GAAae,EAAStiD,MAAOqlD,GAA2BiB,EAAQ,QAAS3nF,KAAMw5B,IAC/EopD,GAAae,EAASE,MAAOf,GAAc4D,GAA2BiB,EAAQ,aAAc3nF,KAAMw5B,KAElGkuD,EAAU1gE,KAAK28D,KAGV+D,CACT,CAEAE,YAAAA,CAAajC,EAAc73E,GACzB,OAAO23E,GACLiB,GAA2B54E,EAAQ8lC,UAAW,YAAa5zC,KAAM2lF,GAErE,CAGAkC,SAAAA,CAAUlC,EAAc73E,GACtB,MAAM,UAAC8lC,GAAa9lC,EAEd04E,EAAeE,GAA2B9yC,EAAW,eAAgB5zC,KAAM2lF,GAC3EvC,EAASsD,GAA2B9yC,EAAW,SAAU5zC,KAAM2lF,GAC/Dc,EAAcC,GAA2B9yC,EAAW,cAAe5zC,KAAM2lF,GAE/E,IAAItkD,EAAQ,GAKZ,OAJAA,EAAQuhD,GAAavhD,EAAOyhD,GAAc0D,IAC1CnlD,EAAQuhD,GAAavhD,EAAOyhD,GAAcM,IAC1C/hD,EAAQuhD,GAAavhD,EAAOyhD,GAAc2D,IAEnCplD,CACT,CAKAymD,YAAAA,CAAah6E,GACX,MAAM+lB,EAAS7zB,KAAKs0C,QACd50C,EAAOM,KAAK21B,MAAMj2B,KAClB0nF,EAAc,GACdC,EAAmB,GACnBC,EAAkB,GACxB,IACI9yE,EAAGb,EADHgyE,EAAe,GAGnB,IAAKnxE,EAAI,EAAGb,EAAMkgB,EAAOntB,OAAQ8N,EAAIb,IAAOa,EAC1CmxE,EAAa3+D,KAAK+7D,GAAkB/iF,KAAK21B,MAAO9B,EAAOrf,KAyBzD,OArBI1G,EAAQi5B,SACV4+C,EAAeA,EAAa5+C,OAAO,CAACqE,EAAS1sC,EAAOkrB,IAAU9b,EAAQi5B,OAAOqE,EAAS1sC,EAAOkrB,EAAOlqB,KAIlGoO,EAAQi6E,WACVpC,EAAeA,EAAaz8D,KAAK,CAACvW,EAAGC,IAAM9E,EAAQi6E,SAASp1E,EAAGC,EAAGlT,KAIpEslB,GAAK2gE,EAAensD,IAClB,MAAMmuD,EAAS/B,GAAkB93E,EAAQ8lC,UAAWpa,GACpD4tD,EAAYpgE,KAAK0/D,GAA2BiB,EAAQ,aAAc3nF,KAAMw5B,IACxE6tD,EAAiBrgE,KAAK0/D,GAA2BiB,EAAQ,kBAAmB3nF,KAAMw5B,IAClF8tD,EAAgBtgE,KAAK0/D,GAA2BiB,EAAQ,iBAAkB3nF,KAAMw5B,MAGlFx5B,KAAKonF,YAAcA,EACnBpnF,KAAKqnF,iBAAmBA,EACxBrnF,KAAKsnF,gBAAkBA,EACvBtnF,KAAKinF,WAAatB,EACXA,CACT,CAEAvvC,MAAAA,CAAO1lB,EAASohD,GACd,MAAMhkE,EAAU9N,KAAK8N,QAAQ63B,WAAW3lC,KAAKo9B,cACvCvJ,EAAS7zB,KAAKs0C,QACpB,IAAI1gB,EACA+xD,EAAe,GAEnB,GAAK9xD,EAAOntB,OAML,CACL,MAAM6oD,EAAW8yB,GAAYv0E,EAAQyhD,UAAUxrC,KAAK/jB,KAAM6zB,EAAQ7zB,KAAK6mF,gBACvElB,EAAe3lF,KAAK8nF,aAAah6E,GAEjC9N,KAAKwN,MAAQxN,KAAKunF,SAAS5B,EAAc73E,GACzC9N,KAAK8jF,WAAa9jF,KAAKwnF,cAAc7B,EAAc73E,GACnD9N,KAAKmjF,KAAOnjF,KAAKynF,QAAQ9B,EAAc73E,GACvC9N,KAAK+jF,UAAY/jF,KAAK4nF,aAAajC,EAAc73E,GACjD9N,KAAKojF,OAASpjF,KAAK6nF,UAAUlC,EAAc73E,GAE3C,MAAMT,EAAOrN,KAAK8mF,MAAQ7D,GAAejjF,KAAM8N,GACzCk6E,EAAkBh6E,OAAO8T,OAAO,CAAC,EAAGytC,EAAUliD,GAC9Ck4E,EAAYL,GAAmBllF,KAAK21B,MAAO7nB,EAASk6E,GACpDC,EAAkB3C,GAAmBx3E,EAASk6E,EAAiBzC,EAAWvlF,KAAK21B,OAErF31B,KAAK2kF,OAASY,EAAUZ,OACxB3kF,KAAKglF,OAASO,EAAUP,OAExBpxD,EAAa,CACXgzD,QAAS,EACTlxE,EAAGuyE,EAAgBvyE,EACnBiR,EAAGshE,EAAgBthE,EACnB1mB,MAAOoN,EAAKpN,MACZs9B,OAAQlwB,EAAKkwB,OACb2pD,OAAQ33B,EAAS75C,EACjByxE,OAAQ53B,EAAS5oC,E,MA9BE,IAAjB3mB,KAAK4mF,UACPhzD,EAAa,CACXgzD,QAAS,IAgCf5mF,KAAKgnF,cAAgBrB,EACrB3lF,KAAKk8C,cAAWpoC,EAEZ8f,GACF5zB,KAAKygD,qBAAqBrK,OAAOp2C,KAAM4zB,GAGrClD,GAAW5iB,EAAQo6E,UACrBp6E,EAAQo6E,SAASnkE,KAAK/jB,KAAM,CAAC21B,MAAO31B,KAAK21B,MAAOutD,QAASljF,KAAM8xE,UAEnE,CAEAqW,SAAAA,CAAUC,EAAcluD,EAAK7sB,EAAMS,GACjC,MAAMu6E,EAAgBroF,KAAKsoF,iBAAiBF,EAAc/6E,EAAMS,GAEhEosB,EAAIwE,OAAO2pD,EAAc3lB,GAAI2lB,EAAc1lB,IAC3CzoC,EAAIwE,OAAO2pD,EAAczlB,GAAIylB,EAAcxlB,IAC3C3oC,EAAIwE,OAAO2pD,EAAcE,GAAIF,EAAcG,GAC7C,CAEAF,gBAAAA,CAAiBF,EAAc/6E,EAAMS,GACnC,MAAM,OAAC62E,EAAM,OAAEK,GAAUhlF,MACnB,UAAC6kF,EAAA,aAAWjnD,GAAgB9vB,GAC5B,QAAC+zB,EAAO,SAAEG,EAAQ,WAAEF,EAAA,YAAYC,GAAeY,GAAc/E,IAC5DloB,EAAG+yE,EAAK9hE,EAAG+hE,GAAON,GACnB,MAACnoF,EAAA,OAAOs9B,GAAUlwB,EACxB,IAAIq1D,EAAIE,EAAI2lB,EAAI5lB,EAAIE,EAAI2lB,EAgDxB,MA9Ce,WAAXxD,GACFniB,EAAK6lB,EAAOnrD,EAAS,EAEN,SAAXonD,GACFjiB,EAAK+lB,EACL7lB,EAAKF,EAAKmiB,EAGVliB,EAAKE,EAAKgiB,EACV2D,EAAK3lB,EAAKgiB,IAEVniB,EAAK+lB,EAAMxoF,EACX2iE,EAAKF,EAAKmiB,EAGVliB,EAAKE,EAAKgiB,EACV2D,EAAK3lB,EAAKgiB,GAGZ0D,EAAK7lB,IAGHE,EADa,SAAX+hB,EACG8D,EAAMx5E,KAAK6C,IAAI+vB,EAASC,GAAe+iD,EACxB,UAAXF,EACJ8D,EAAMxoF,EAAQgP,KAAK6C,IAAIkwB,EAAUD,GAAe8iD,EAEhD7kF,KAAKknF,OAGG,QAAXlC,GACFriB,EAAK+lB,EACL7lB,EAAKF,EAAKkiB,EAGVniB,EAAKE,EAAKiiB,EACV0D,EAAK3lB,EAAKiiB,IAEVliB,EAAK+lB,EAAMnrD,EACXslC,EAAKF,EAAKkiB,EAGVniB,EAAKE,EAAKiiB,EACV0D,EAAK3lB,EAAKiiB,GAEZ2D,EAAK7lB,GAEA,CAACD,KAAIE,KAAI2lB,KAAI5lB,KAAIE,KAAI2lB,KAC9B,CAEAjkB,SAAAA,CAAUx6B,EAAI7P,EAAKpsB,GACjB,MAAMN,EAAQxN,KAAKwN,MACb9G,EAAS8G,EAAM9G,OACrB,IAAIw6E,EAAW8C,EAAcxvE,EAE7B,GAAI9N,EAAQ,CACV,MAAMy5E,EAAY7wC,GAAcxhC,EAAQ6gB,IAAK3uB,KAAK0V,EAAG1V,KAAKC,OAa1D,IAXA8pC,EAAGr0B,EAAI8vE,GAAYxlF,KAAM8N,EAAQ4tD,WAAY5tD,GAE7CosB,EAAIiG,UAAYggD,EAAUhgD,UAAUryB,EAAQ4tD,YAC5CxhC,EAAIkG,aAAe,SAEnB8gD,EAAYr+C,GAAO/0B,EAAQozE,WAC3B8C,EAAel2E,EAAQk2E,aAEvB9pD,EAAIgG,UAAYpyB,EAAQ66E,WACxBzuD,EAAIL,KAAOqnD,EAAUjlD,OAEhBznB,EAAI,EAAGA,EAAI9N,IAAU8N,EACxB0lB,EAAIyH,SAASn0B,EAAMgH,GAAI2rE,EAAUzqE,EAAEq0B,EAAGr0B,GAAIq0B,EAAGpjB,EAAIu6D,EAAUnnD,WAAa,GACxEgQ,EAAGpjB,GAAKu6D,EAAUnnD,WAAaiqD,EAE3BxvE,EAAI,IAAM9N,IACZqjC,EAAGpjB,GAAK7Y,EAAQm2E,kBAAoBD,E,CAI5C,CAKA4E,aAAAA,CAAc1uD,EAAK6P,EAAIv1B,EAAG2rE,EAAWryE,GACnC,MAAMq4E,EAAanmF,KAAKonF,YAAY5yE,GAC9B8xE,EAAkBtmF,KAAKqnF,iBAAiB7yE,IACxC,UAAC6pE,EAAA,SAAWC,GAAYxwE,EACxBu1E,EAAWxgD,GAAO/0B,EAAQu1E,UAC1BwF,EAASrD,GAAYxlF,KAAM,OAAQ8N,GACnCg7E,EAAY3I,EAAUzqE,EAAEmzE,GACxBE,EAAU1K,EAAYgF,EAAStpD,YAAcspD,EAAStpD,WAAaskD,GAAa,EAAI,EACpF2K,EAASj/C,EAAGpjB,EAAIoiE,EAEtB,GAAIj7E,EAAQywE,cAAe,CACzB,MAAMmC,EAAc,CAClBziD,OAAQhvB,KAAK8C,IAAIusE,EAAUD,GAAa,EACxCtgD,WAAYuoD,EAAgBvoD,WAC5BC,SAAUsoD,EAAgBtoD,SAC1Bc,YAAa,GAITosB,EAAUi1B,EAAUjxC,WAAW45C,EAAWxK,GAAYA,EAAW,EACjEnzB,EAAU69B,EAAS3K,EAAY,EAGrCnkD,EAAI6G,YAAcjzB,EAAQm7E,mBAC1B/uD,EAAIgG,UAAYpyB,EAAQm7E,mBACxBzrD,GAAUtD,EAAKwmD,EAAax1B,EAASC,GAGrCjxB,EAAI6G,YAAcolD,EAAW9sD,YAC7Ba,EAAIgG,UAAYimD,EAAW/sD,gBAC3BoE,GAAUtD,EAAKwmD,EAAax1B,EAASC,E,KAChC,CAELjxB,EAAIjD,UAAYhT,GAASkiE,EAAWrnD,aAAe7vB,KAAK6C,OAAO9D,OAAOse,OAAO65D,EAAWrnD,cAAiBqnD,EAAWrnD,aAAe,EACnI5E,EAAI6G,YAAcolD,EAAW9sD,YAC7Ba,EAAIgqC,YAAYiiB,EAAWxzC,YAAc,IACzCzY,EAAI8xB,eAAiBm6B,EAAWvzC,kBAAoB,EAGpD,MAAMs2C,EAAS/I,EAAUjxC,WAAW45C,EAAWxK,GACzC6K,EAAShJ,EAAUjxC,WAAWixC,EAAUlxC,MAAM65C,EAAW,GAAIxK,EAAW,GACxEzyB,EAAelpB,GAAcwjD,EAAWt6B,cAE1C79C,OAAOse,OAAOu/B,GAAcoc,KAAKv2D,GAAW,IAANA,IACxCwoB,EAAImE,YACJnE,EAAIgG,UAAYpyB,EAAQm7E,mBACxBrnD,GAAmB1H,EAAK,CACtBxkB,EAAGwzE,EACHviE,EAAGqiE,EACH10E,EAAGgqE,EACHzsE,EAAGwsE,EACHpgD,OAAQ4tB,IAEV3xB,EAAI2E,OACJ3E,EAAI6E,SAGJ7E,EAAIgG,UAAYimD,EAAW/sD,gBAC3Bc,EAAImE,YACJuD,GAAmB1H,EAAK,CACtBxkB,EAAGyzE,EACHxiE,EAAGqiE,EAAS,EACZ10E,EAAGgqE,EAAW,EACdzsE,EAAGwsE,EAAY,EACfpgD,OAAQ4tB,IAEV3xB,EAAI2E,SAGJ3E,EAAIgG,UAAYpyB,EAAQm7E,mBACxB/uD,EAAIiH,SAAS+nD,EAAQF,EAAQ1K,EAAUD,GACvCnkD,EAAIkvD,WAAWF,EAAQF,EAAQ1K,EAAUD,GAEzCnkD,EAAIgG,UAAYimD,EAAW/sD,gBAC3Bc,EAAIiH,SAASgoD,EAAQH,EAAS,EAAG1K,EAAW,EAAGD,EAAY,G,CAK/DnkD,EAAIgG,UAAYlgC,KAAKsnF,gBAAgB9yE,EACvC,CAEA60E,QAAAA,CAASt/C,EAAI7P,EAAKpsB,GAChB,MAAM,KAACq1E,GAAQnjF,MACT,YAACokF,EAAA,UAAakF,EAAA,cAAWnF,EAAA,UAAe9F,EAAA,SAAWC,EAAA,WAAUxrB,GAAchlD,EAC3Eu1E,EAAWxgD,GAAO/0B,EAAQu1E,UAChC,IAAIa,EAAiBb,EAAStpD,WAC1BwvD,EAAe,EAEnB,MAAMpJ,EAAY7wC,GAAcxhC,EAAQ6gB,IAAK3uB,KAAK0V,EAAG1V,KAAKC,OAEpDupF,EAAiB,SAASlpD,GAC9BpG,EAAIyH,SAASrB,EAAM6/C,EAAUzqE,EAAEq0B,EAAGr0B,EAAI6zE,GAAex/C,EAAGpjB,EAAIu9D,EAAiB,GAC7En6C,EAAGpjB,GAAKu9D,EAAiBE,CAC3B,EAEMqF,EAA0BtJ,EAAUhgD,UAAUmpD,GACpD,IAAI3F,EAAU+F,EAAWroD,EAAO7sB,EAAG+L,EAAG+E,EAAMmX,EAiB5C,IAfAvC,EAAIiG,UAAYmpD,EAChBpvD,EAAIkG,aAAe,SACnBlG,EAAIL,KAAOwpD,EAASpnD,OAEpB8N,EAAGr0B,EAAI8vE,GAAYxlF,KAAMypF,EAAyB37E,GAGlDosB,EAAIgG,UAAYpyB,EAAQu4E,UACxBrhE,GAAKhlB,KAAK8jF,WAAY0F,GAEtBD,EAAepF,GAA6C,UAA5BsF,EACd,WAAdH,EAA0BhL,EAAW,EAAIxrB,EAAewrB,EAAW,EAAIxrB,EACvE,EAGCt+C,EAAI,EAAG8Q,EAAO69D,EAAKz8E,OAAQ8N,EAAI8Q,IAAQ9Q,EAAG,CAc7C,IAbAmvE,EAAWR,EAAK3uE,GAChBk1E,EAAY1pF,KAAKsnF,gBAAgB9yE,GAEjC0lB,EAAIgG,UAAYwpD,EAChB1kE,GAAK2+D,EAASC,OAAQ4F,GAEtBnoD,EAAQsiD,EAAStiD,MAEb8iD,GAAiB9iD,EAAM36B,SACzB1G,KAAK4oF,cAAc1uD,EAAK6P,EAAIv1B,EAAG2rE,EAAWryE,GAC1Co2E,EAAiBj1E,KAAK6C,IAAIuxE,EAAStpD,WAAYskD,IAG5C99D,EAAI,EAAGkc,EAAO4E,EAAM36B,OAAQ6Z,EAAIkc,IAAQlc,EAC3CipE,EAAenoD,EAAM9gB,IAErB2jE,EAAiBb,EAAStpD,WAG5B/U,GAAK2+D,EAASE,MAAO2F,EACvB,CAGAD,EAAe,EACfrF,EAAiBb,EAAStpD,WAG1B/U,GAAKhlB,KAAK+jF,UAAWyF,GACrBz/C,EAAGpjB,GAAKy9D,CACV,CAEAuF,UAAAA,CAAW5/C,EAAI7P,EAAKpsB,GAClB,MAAMs1E,EAASpjF,KAAKojF,OACd18E,EAAS08E,EAAO18E,OACtB,IAAI48E,EAAY9uE,EAEhB,GAAI9N,EAAQ,CACV,MAAMy5E,EAAY7wC,GAAcxhC,EAAQ6gB,IAAK3uB,KAAK0V,EAAG1V,KAAKC,OAa1D,IAXA8pC,EAAGr0B,EAAI8vE,GAAYxlF,KAAM8N,EAAQ87E,YAAa97E,GAC9Ci8B,EAAGpjB,GAAK7Y,EAAQu2E,gBAEhBnqD,EAAIiG,UAAYggD,EAAUhgD,UAAUryB,EAAQ87E,aAC5C1vD,EAAIkG,aAAe,SAEnBkjD,EAAazgD,GAAO/0B,EAAQw1E,YAE5BppD,EAAIgG,UAAYpyB,EAAQ+7E,YACxB3vD,EAAIL,KAAOypD,EAAWrnD,OAEjBznB,EAAI,EAAGA,EAAI9N,IAAU8N,EACxB0lB,EAAIyH,SAASyhD,EAAO5uE,GAAI2rE,EAAUzqE,EAAEq0B,EAAGr0B,GAAIq0B,EAAGpjB,EAAI28D,EAAWvpD,WAAa,GAC1EgQ,EAAGpjB,GAAK28D,EAAWvpD,WAAajsB,EAAQw2E,a,CAG9C,CAEAvgB,cAAAA,CAAeh6B,EAAI7P,EAAK4vD,EAAah8E,GACnC,MAAM,OAAC62E,EAAM,OAAEK,GAAUhlF,MACnB,EAAC0V,EAAA,EAAGiR,GAAKojB,GACT,MAAC9pC,EAAA,OAAOs9B,GAAUusD,GAClB,QAACjoD,EAAA,SAASG,EAAA,WAAUF,EAAA,YAAYC,GAAeY,GAAc70B,EAAQ8vB,cAE3E1D,EAAIgG,UAAYpyB,EAAQsrB,gBACxBc,EAAI6G,YAAcjzB,EAAQurB,YAC1Ba,EAAIjD,UAAYnpB,EAAQgxB,YAExB5E,EAAImE,YACJnE,EAAIuE,OAAO/oB,EAAImsB,EAASlb,GACT,QAAXq+D,GACFhlF,KAAKmoF,UAAUp+C,EAAI7P,EAAK4vD,EAAah8E,GAEvCosB,EAAIwE,OAAOhpB,EAAIzV,EAAQ+hC,EAAUrb,GACjCuT,EAAI6vD,iBAAiBr0E,EAAIzV,EAAO0mB,EAAGjR,EAAIzV,EAAO0mB,EAAIqb,GACnC,WAAXgjD,GAAkC,UAAXL,GACzB3kF,KAAKmoF,UAAUp+C,EAAI7P,EAAK4vD,EAAah8E,GAEvCosB,EAAIwE,OAAOhpB,EAAIzV,EAAO0mB,EAAI4W,EAASwE,GACnC7H,EAAI6vD,iBAAiBr0E,EAAIzV,EAAO0mB,EAAI4W,EAAQ7nB,EAAIzV,EAAQ8hC,EAAapb,EAAI4W,GAC1D,WAAXynD,GACFhlF,KAAKmoF,UAAUp+C,EAAI7P,EAAK4vD,EAAah8E,GAEvCosB,EAAIwE,OAAOhpB,EAAIosB,EAAYnb,EAAI4W,GAC/BrD,EAAI6vD,iBAAiBr0E,EAAGiR,EAAI4W,EAAQ7nB,EAAGiR,EAAI4W,EAASuE,GACrC,WAAXkjD,GAAkC,SAAXL,GACzB3kF,KAAKmoF,UAAUp+C,EAAI7P,EAAK4vD,EAAah8E,GAEvCosB,EAAIwE,OAAOhpB,EAAGiR,EAAIkb,GAClB3H,EAAI6vD,iBAAiBr0E,EAAGiR,EAAGjR,EAAImsB,EAASlb,GACxCuT,EAAIsE,YAEJtE,EAAI2E,OAEA/wB,EAAQgxB,YAAc,GACxB5E,EAAI6E,QAER,CAMAirD,sBAAAA,CAAuBl8E,GACrB,MAAM6nB,EAAQ31B,KAAK21B,MACbge,EAAQ3zC,KAAKy3C,YACbwyC,EAAQt2C,GAASA,EAAMj+B,EACvBw0E,EAAQv2C,GAASA,EAAMhtB,EAC7B,GAAIsjE,GAASC,EAAO,CAClB,MAAM36B,EAAW8yB,GAAYv0E,EAAQyhD,UAAUxrC,KAAK/jB,KAAMA,KAAKs0C,QAASt0C,KAAK6mF,gBAC7E,IAAKt3B,EACH,OAEF,MAAMliD,EAAOrN,KAAK8mF,MAAQ7D,GAAejjF,KAAM8N,GACzCk6E,EAAkBh6E,OAAO8T,OAAO,CAAC,EAAGytC,EAAUvvD,KAAK8mF,OACnDvB,EAAYL,GAAmBvvD,EAAO7nB,EAASk6E,GAC/Cj4D,EAAQu1D,GAAmBx3E,EAASk6E,EAAiBzC,EAAW5vD,GAClEs0D,EAAM/zC,MAAQnmB,EAAMra,GAAKw0E,EAAMh0C,MAAQnmB,EAAMpJ,IAC/C3mB,KAAK2kF,OAASY,EAAUZ,OACxB3kF,KAAKglF,OAASO,EAAUP,OACxBhlF,KAAKC,MAAQoN,EAAKpN,MAClBD,KAAKu9B,OAASlwB,EAAKkwB,OACnBv9B,KAAKknF,OAAS33B,EAAS75C,EACvB1V,KAAKmnF,OAAS53B,EAAS5oC,EACvB3mB,KAAKygD,qBAAqBrK,OAAOp2C,KAAM+vB,G,CAG7C,CAMAo6D,WAAAA,GACE,QAASnqF,KAAK4mF,OAChB,CAEAvyC,IAAAA,CAAKna,GACH,MAAMpsB,EAAU9N,KAAK8N,QAAQ63B,WAAW3lC,KAAKo9B,cAC7C,IAAIwpD,EAAU5mF,KAAK4mF,QAEnB,IAAKA,EACH,OAGF5mF,KAAKgqF,uBAAuBl8E,GAE5B,MAAMg8E,EAAc,CAClB7pF,MAAOD,KAAKC,MACZs9B,OAAQv9B,KAAKu9B,QAETwM,EAAK,CACTr0B,EAAG1V,KAAK0V,EACRiR,EAAG3mB,KAAK2mB,GAIVigE,EAAU33E,KAAKuZ,IAAIo+D,GAAW,KAAO,EAAIA,EAEzC,MAAMtyD,EAAUsO,GAAU90B,EAAQwmB,SAG5B81D,EAAoBpqF,KAAKwN,MAAM9G,QAAU1G,KAAK8jF,WAAWp9E,QAAU1G,KAAKmjF,KAAKz8E,QAAU1G,KAAK+jF,UAAUr9E,QAAU1G,KAAKojF,OAAO18E,OAE9HoH,EAAQ0rD,SAAW4wB,IACrBlwD,EAAIsC,OACJtC,EAAImwD,YAAczD,EAGlB5mF,KAAK+jE,eAAeh6B,EAAI7P,EAAK4vD,EAAah8E,GAE1CyhC,GAAsBrV,EAAKpsB,EAAQgzE,eAEnC/2C,EAAGpjB,GAAK2N,EAAQC,IAGhBv0B,KAAKukE,UAAUx6B,EAAI7P,EAAKpsB,GAGxB9N,KAAKqpF,SAASt/C,EAAI7P,EAAKpsB,GAGvB9N,KAAK2pF,WAAW5/C,EAAI7P,EAAKpsB,GAEzB+hC,GAAqB3V,EAAKpsB,EAAQgzE,eAElC5mD,EAAI0C,UAER,CAMA60C,iBAAAA,GACE,OAAOzxE,KAAKs0C,SAAW,EACzB,CAOAo9B,iBAAAA,CAAkBC,EAAgB8Q,GAChC,MAAM7Q,EAAa5xE,KAAKs0C,QAClBzgB,EAAS89C,EAAe98D,IAAI,EAAE4Q,eAAc/mB,YAChD,MAAMowB,EAAO9uB,KAAK21B,MAAM8nB,eAAeh4B,GAEvC,IAAKqJ,EACH,MAAM,IAAI4X,MAAM,kCAAoCjhB,GAGtD,MAAO,CACLA,eACA2lB,QAAStc,EAAKpvB,KAAKhB,GACnBA,WAGEgyB,GAAWvL,GAAeysD,EAAY/9C,GACtCy2D,EAAkBtqF,KAAKuqF,iBAAiB12D,EAAQ4uD,IAElD/xD,GAAW45D,KACbtqF,KAAKs0C,QAAUzgB,EACf7zB,KAAK6mF,eAAiBpE,EACtBziF,KAAKwqF,qBAAsB,EAC3BxqF,KAAKo2C,QAAO,GAEhB,CASAorC,WAAAA,CAAYzuE,EAAG++D,EAAQvF,GAAc,GACnC,GAAIuF,GAAU9xE,KAAKwqF,oBACjB,OAAO,EAETxqF,KAAKwqF,qBAAsB,EAE3B,MAAM18E,EAAU9N,KAAK8N,QACf8jE,EAAa5xE,KAAKs0C,SAAW,GAC7BzgB,EAAS7zB,KAAKoyE,mBAAmBr/D,EAAG6+D,EAAYE,EAAQvF,GAKxD+d,EAAkBtqF,KAAKuqF,iBAAiB12D,EAAQ9gB,GAGhD2d,EAAUohD,IAAW3sD,GAAe0O,EAAQ+9C,IAAe0Y,EAgBjE,OAbI55D,IACF1wB,KAAKs0C,QAAUzgB,GAEX/lB,EAAQ0rD,SAAW1rD,EAAQo6E,YAC7BloF,KAAK6mF,eAAiB,CACpBnxE,EAAG3C,EAAE2C,EACLiR,EAAG5T,EAAE4T,GAGP3mB,KAAKo2C,QAAO,EAAM07B,KAIfphD,CACT,CAWA0hD,kBAAAA,CAAmBr/D,EAAG6+D,EAAYE,EAAQvF,GACxC,MAAMz+D,EAAU9N,KAAK8N,QAErB,GAAe,aAAXiF,EAAEzT,KACJ,MAAO,GAGT,IAAKitE,EAGH,OAAOqF,EAAW7qC,OAAOvyB,GACvBxU,KAAK21B,MAAMj2B,KAAK45B,SAAS9kB,EAAEiR,oBACiD3R,IAA5E9T,KAAK21B,MAAM8nB,eAAejpC,EAAEiR,cAAcq0B,WAAWqF,UAAU3qC,EAAE9V,QAKrE,MAAMm1B,EAAS7zB,KAAK21B,MAAMi7C,0BAA0B79D,EAAGjF,EAAQysB,KAAMzsB,EAASgkE,GAM9E,OAJIhkE,EAAQoX,SACV2O,EAAO3O,UAGF2O,CACT,CASA02D,gBAAAA,CAAiB12D,EAAQ9gB,GACvB,MAAM,OAACm0E,EAAA,OAAQC,EAAA,QAAQr5E,GAAW9N,KAC5BuvD,EAAW8yB,GAAYv0E,EAAQyhD,UAAUxrC,KAAK/jB,KAAM6zB,EAAQ9gB,GAClE,OAAoB,IAAbw8C,IAAuB23B,IAAW33B,EAAS75C,GAAKyxE,IAAW53B,EAAS5oC,EAC7E,GACD++B,EAAAA,GAAAA,GA5vBYihC,GAAgB,cAKNtE,IAyvBvB,IAAAoI,GAAe,CACb15E,GAAI,UACJkxE,SAAU0E,GACVtE,eAEAqI,SAAAA,CAAU/0D,EAAOkoD,EAAO/vE,GAClBA,IACF6nB,EAAMutD,QAAU,IAAIyD,GAAQ,CAAChxD,QAAO7nB,YAExC,EAEA4vD,YAAAA,CAAa/nC,EAAOkoD,EAAO/vE,GACrB6nB,EAAMutD,SACRvtD,EAAMutD,QAAQ5mC,WAAWxuC,EAE7B,EAEA8vC,KAAAA,CAAMjoB,EAAOkoD,EAAO/vE,GACd6nB,EAAMutD,SACRvtD,EAAMutD,QAAQ5mC,WAAWxuC,EAE7B,EAEA68E,SAAAA,CAAUh1D,GACR,MAAMutD,EAAUvtD,EAAMutD,QAEtB,GAAIA,GAAWA,EAAQiH,cAAe,CACpC,MAAMjrF,EAAO,CACXgkF,WAGF,IAA8E,IAA1EvtD,EAAMupC,cAAc,oBAAqB,IAAIhgE,EAAMwoE,YAAY,IACjE,OAGFwb,EAAQ7uC,KAAK1e,EAAMuE,KAEnBvE,EAAMupC,cAAc,mBAAoBhgE,E,CAE5C,EAEAgjF,UAAAA,CAAWvsD,EAAOz2B,GAChB,GAAIy2B,EAAMutD,QAAS,CAEjB,MAAMnzB,EAAmB7wD,EAAK4yE,OAC1Bn8C,EAAMutD,QAAQ1B,YAAYtiF,EAAKutC,MAAOsjB,EAAkB7wD,EAAKqtE,eAE/DrtE,EAAKwxB,SAAU,E,CAGrB,EAEA2C,SAAU,CACRmmC,SAAS,EACT0uB,SAAU,KACV34B,SAAU,UACVn2B,gBAAiB,kBACjBuvD,WAAY,OACZzH,UAAW,CACTv+D,OAAQ,QAEVqhE,aAAc,EACdC,kBAAmB,EACnBvoB,WAAY,OACZ2qB,UAAW,OACXjC,YAAa,EACbf,SAAU,CAAC,EAEXiG,UAAW,OACXO,YAAa,OACbvF,cAAe,EACfD,gBAAiB,EACjBf,WAAY,CACV3gE,OAAQ,QAEVinE,YAAa,OACbt1D,QAAS,EACTwwD,aAAc,EACdD,UAAW,EACXjnD,aAAc,EACdygD,UAAWA,CAACnkD,EAAK8F,IAASA,EAAKqjD,SAASh2E,KACxCixE,SAAUA,CAACpkD,EAAK8F,IAASA,EAAKqjD,SAASh2E,KACvC47E,mBAAoB,OACpB9E,eAAe,EACfrxB,WAAY,EACZz5B,YAAa,gBACbyF,YAAa,EACbhL,UAAW,CACTR,SAAU,IACVC,OAAQ,gBAEVU,WAAY,CACVf,QAAS,CACP5zB,KAAM,SACNs0B,WAAY,CAAC,IAAK,IAAK,QAAS,SAAU,SAAU,WAEtDgzD,QAAS,CACPrzD,OAAQ,SACRD,SAAU,MAGdsgB,UAAWiyC,IAGbvgB,cAAe,CACb+d,SAAU,OACVC,WAAY,OACZpC,UAAW,QAGbtoD,YAAa,CACXjF,YAAcv0B,GAAkB,WAATA,GAA8B,aAATA,GAAgC,aAATA,EACnEs0B,YAAY,EACZkgB,UAAW,CACTjgB,aAAa,EACbD,YAAY,GAEdI,UAAW,CACTL,WAAW,GAEbQ,WAAY,CACVR,UAAW,cAKfi3C,uBAAwB,CAAC,gBCj0C3B,MAAMkgB,GAAcA,CAAC9rC,EAAQjE,EAAKn8C,EAAOmsF,KACpB,kBAARhwC,GACTn8C,EAAQogD,EAAO93B,KAAK6zB,GAAO,EAC3BgwC,EAAY5O,QAAQ,CAACv9E,QAAO4O,MAAOutC,KAC1BrxB,MAAMqxB,KACfn8C,EAAQ,MAEHA,GAGT,SAASosF,GAAehsC,EAAQjE,EAAKn8C,EAAOmsF,GAC1C,MAAMlxB,EAAQ7a,EAAO/4B,QAAQ80B,GAC7B,IAAe,IAAX8e,EACF,OAAOixB,GAAY9rC,EAAQjE,EAAKn8C,EAAOmsF,GAEzC,MAAM3+D,EAAO4yB,EAAOisC,YAAYlwC,GAChC,OAAO8e,IAAUztC,EAAOxtB,EAAQi7D,CAClC,CAEA,MAAMwB,GAAaA,CAACz8D,EAAOoT,IAAkB,OAAVpT,EAAiB,KAAO8sB,GAAYvc,KAAKC,MAAMxQ,GAAQ,EAAGoT,GAE7F,SAASk5E,GAAkBlmF,GACzB,MAAMg6C,EAAS9+C,KAAK++C,YAEpB,OAAIj6C,GAAS,GAAKA,EAAQg6C,EAAOp4C,OACxBo4C,EAAOh6C,GAETA,CACT,CAEe,MAAMmmF,WAAsBlvB,GAazC35C,WAAAA,CAAYszB,GACVkQ,MAAMlQ,GAGN11C,KAAKkrF,iBAAcp3E,EACnB9T,KAAKmrF,YAAc,EACnBnrF,KAAKorF,aAAe,EACtB,CAEA18B,IAAAA,CAAKoa,GACH,MAAMuiB,EAAQrrF,KAAKorF,aACnB,GAAIC,EAAM3kF,OAAQ,CAChB,MAAMo4C,EAAS9+C,KAAK++C,YACpB,IAAK,MAAM,MAACrgD,EAAA,MAAO4O,KAAU+9E,EACvBvsC,EAAOpgD,KAAW4O,GACpBwxC,EAAOxxB,OAAO5uB,EAAO,GAGzBsB,KAAKorF,aAAe,E,CAEtBxlC,MAAM8I,KAAKoa,EACb,CAEAjhC,KAAAA,CAAMgT,EAAKn8C,GACT,GAAIklB,GAAci3B,GAChB,OAAO,KAET,MAAMiE,EAAS9+C,KAAK++C,YAGpB,OAFArgD,EAAQylB,SAASzlB,IAAUogD,EAAOpgD,KAAWm8C,EAAMn8C,EAC/CosF,GAAehsC,EAAQjE,EAAKv2B,GAAe5lB,EAAOm8C,GAAM76C,KAAKorF,cAC1DjwB,GAAWz8D,EAAOogD,EAAOp4C,OAAS,EAC3C,CAEAs3D,mBAAAA,GACE,MAAM,WAACvuC,EAAA,WAAYC,GAAc1vB,KAAK2vB,gBACtC,IAAI,IAAC5d,EAAG,IAAED,GAAO9R,KAAKw/C,WAAU,GAEJ,UAAxBx/C,KAAK8N,QAAQ+oB,SACVpH,IACH1d,EAAM,GAEH2d,IACH5d,EAAM9R,KAAK++C,YAAYr4C,OAAS,IAIpC1G,KAAK+R,IAAMA,EACX/R,KAAK8R,IAAMA,CACb,CAEAqsD,UAAAA,GACE,MAAMpsD,EAAM/R,KAAK+R,IACXD,EAAM9R,KAAK8R,IACX6kB,EAAS32B,KAAK8N,QAAQ6oB,OACtBjB,EAAQ,GACd,IAAIopB,EAAS9+C,KAAK++C,YAGlBD,EAAkB,IAAT/sC,GAAcD,IAAQgtC,EAAOp4C,OAAS,EAAKo4C,EAASA,EAAO96B,MAAMjS,EAAKD,EAAM,GAErF9R,KAAKmrF,YAAcl8E,KAAK6C,IAAIgtC,EAAOp4C,QAAUiwB,EAAS,EAAI,GAAI,GAC9D32B,KAAKkrF,YAAclrF,KAAK+R,KAAO4kB,EAAS,GAAM,GAE9C,IAAK,IAAI7xB,EAAQiN,EAAKjN,GAASgN,EAAKhN,IAClC4wB,EAAM1O,KAAK,CAACliB,UAEd,OAAO4wB,CACT,CAEAsqB,gBAAAA,CAAiBl7C,GACf,OAAOkmF,GAAkBjnE,KAAK/jB,KAAM8E,EACtC,CAKAgyC,SAAAA,GACE8O,MAAM9O,YAED92C,KAAK4kD,iBAER5kD,KAAKovD,gBAAkBpvD,KAAKovD,eAEhC,CAGAx/B,gBAAAA,CAAiB9qB,GAKf,MAJqB,kBAAVA,IACTA,EAAQ9E,KAAK6nC,MAAM/iC,IAGJ,OAAVA,EAAiBy6C,IAAMv/C,KAAK0nD,oBAAoB5iD,EAAQ9E,KAAKkrF,aAAelrF,KAAKmrF,YAC1F,CAIAhoC,eAAAA,CAAgBzkD,GACd,MAAMg3B,EAAQ11B,KAAK01B,MACnB,OAAIh3B,EAAQ,GAAKA,EAAQg3B,EAAMhvB,OAAS,EAC/B,KAEF1G,KAAK4vB,iBAAiB8F,EAAMh3B,GAAOoG,MAC5C,CAEA8iD,gBAAAA,CAAiB7qB,GACf,OAAO9tB,KAAKC,MAAMlP,KAAKkrF,YAAclrF,KAAK0hE,mBAAmB3kC,GAAS/8B,KAAKmrF,YAC7E,CAEArlC,YAAAA,GACE,OAAO9lD,KAAKw0B,MACd,ECpIF,SAAS82D,GAAcC,EAAmBC,GACxC,MAAM91D,EAAQ,GAKR+1D,EAAc,OACd,OAAC50D,EAAM,KAAEksC,EAAA,IAAMhxD,EAAA,IAAKD,EAAG,UAAE45E,EAAA,MAAWr9E,EAAA,SAAOs9E,EAAQ,UAAEC,EAAA,cAAWC,GAAiBN,EACjFO,EAAO/oB,GAAQ,EACfgpB,EAAYJ,EAAW,GACtB55E,IAAKi6E,EAAMl6E,IAAKm6E,GAAQT,EACzB/7D,GAAc7L,GAAc7R,GAC5B2d,GAAc9L,GAAc9R,GAC5Bo6E,GAAgBtoE,GAAcvV,GAC9B89E,GAAcF,EAAOD,IAASJ,EAAY,GAChD,IACIt2C,EAAQ82C,EAASC,EAASC,EAD1BniC,EAAU1hC,IAASwjE,EAAOD,GAAQD,EAAYD,GAAQA,EAK1D,GAAI3hC,EAAUshC,IAAgBh8D,IAAeC,EAC3C,MAAO,CAAC,CAAC5qB,MAAOknF,GAAO,CAAClnF,MAAOmnF,IAGjCK,EAAYr9E,KAAKsrD,KAAK0xB,EAAO9hC,GAAWl7C,KAAK2Z,MAAMojE,EAAO7hC,GACtDmiC,EAAYP,IAEd5hC,EAAU1hC,GAAQ6jE,EAAYniC,EAAU4hC,EAAYD,GAAQA,GAGzDloE,GAAc8nE,KAEjBp2C,EAASrmC,KAAKmS,IAAI,GAAIsqE,GACtBvhC,EAAUl7C,KAAKsrD,KAAKpQ,EAAU7U,GAAUA,GAG3B,UAAXze,GACFu1D,EAAUn9E,KAAK2Z,MAAMojE,EAAO7hC,GAAWA,EACvCkiC,EAAUp9E,KAAKsrD,KAAK0xB,EAAO9hC,GAAWA,IAEtCiiC,EAAUJ,EACVK,EAAUJ,GAGRx8D,GAAcC,GAAcqzC,GAAQt5C,IAAa3X,EAAMC,GAAOgxD,EAAM5Y,EAAU,MAKhFmiC,EAAYr9E,KAAKC,MAAMD,KAAK8C,KAAKD,EAAMC,GAAOo4C,EAASwhC,IACvDxhC,GAAWr4C,EAAMC,GAAOu6E,EACxBF,EAAUr6E,EACVs6E,EAAUv6E,GACDo6E,GAITE,EAAU38D,EAAa1d,EAAMq6E,EAC7BC,EAAU38D,EAAa5d,EAAMu6E,EAC7BC,EAAYj+E,EAAQ,EACpB87C,GAAWkiC,EAAUD,GAAWE,IAGhCA,GAAaD,EAAUD,GAAWjiC,EAIhCmiC,EADEhkE,GAAagkE,EAAWr9E,KAAKC,MAAMo9E,GAAYniC,EAAU,KAC/Cl7C,KAAKC,MAAMo9E,GAEXr9E,KAAKsrD,KAAK+xB,IAM1B,MAAMC,EAAgBt9E,KAAK6C,IACzBoY,GAAeigC,GACfjgC,GAAekiE,IAEjB92C,EAASrmC,KAAKmS,IAAI,GAAIwC,GAAc8nE,GAAaa,EAAgBb,GACjEU,EAAUn9E,KAAKC,MAAMk9E,EAAU92C,GAAUA,EACzC+2C,EAAUp9E,KAAKC,MAAMm9E,EAAU/2C,GAAUA,EAEzC,IAAI/0B,EAAI,EAiBR,IAhBIkP,IACEo8D,GAAiBO,IAAYr6E,GAC/B2jB,EAAM1O,KAAK,CAACliB,MAAOiN,IAEfq6E,EAAUr6E,GACZwO,IAGE+H,GAAarZ,KAAKC,OAAOk9E,EAAU7rE,EAAI4pC,GAAW7U,GAAUA,EAAQvjC,EAAKy6E,GAAkBz6E,EAAKo6E,EAAYZ,KAC9GhrE,KAEO6rE,EAAUr6E,GACnBwO,KAIGA,EAAI+rE,IAAa/rE,EAAG,CACzB,MAAMkV,EAAYxmB,KAAKC,OAAOk9E,EAAU7rE,EAAI4pC,GAAW7U,GAAUA,EACjE,GAAI5lB,GAAc+F,EAAY3jB,EAC5B,MAEF4jB,EAAM1O,KAAK,CAACliB,MAAO2wB,GACrB,CAaA,OAXI/F,GAAcm8D,GAAiBQ,IAAYv6E,EAEzC4jB,EAAMhvB,QAAU4hB,GAAaoN,EAAMA,EAAMhvB,OAAS,GAAG5B,MAAOgN,EAAK06E,GAAkB16E,EAAKq6E,EAAYZ,IACtG71D,EAAMA,EAAMhvB,OAAS,GAAG5B,MAAQgN,EAEhC4jB,EAAM1O,KAAK,CAACliB,MAAOgN,IAEX4d,GAAc28D,IAAYv6E,GACpC4jB,EAAM1O,KAAK,CAACliB,MAAOunF,IAGd32D,CACT,CAEA,SAAS82D,GAAkB1nF,EAAOqnF,GAAY,WAACrnC,EAAU,YAAEntB,IACzD,MAAMuG,EAAMpU,GAAU6N,GAChBjW,GAASojC,EAAa71C,KAAK4hB,IAAIqN,GAAOjvB,KAAK6iB,IAAIoM,KAAS,KACxDx3B,EAAS,IAAOylF,GAAc,GAAKrnF,GAAO4B,OAChD,OAAOuI,KAAK8C,IAAIo6E,EAAazqE,EAAOhb,EACtC,EDMAg/C,EAAAA,GAAAA,GA5HqBulC,GAAsB,KAE7B,aAAWvlC,EAAAA,GAAAA,GAFJulC,GAAsB,WAOvB,CAChBv1D,MAAO,CACL9Q,SAAUomE,MC+GD,MAAMyB,WAAwB1wB,GAE3C35C,WAAAA,CAAYszB,GACVkQ,MAAMlQ,GAGN11C,KAAKsG,WAAQwN,EAEb9T,KAAKkrB,SAAMpX,EAEX9T,KAAKkrF,iBAAcp3E,EAEnB9T,KAAK0sF,eAAY54E,EACjB9T,KAAKmrF,YAAc,CACrB,CAEAtjD,KAAAA,CAAMgT,EAAKn8C,GACT,OAAIklB,GAAci3B,KAGE,kBAARA,GAAoBA,aAAer1C,UAAY2e,UAAU02B,GAF5D,MAMDA,CACV,CAEA8xC,sBAAAA,GACE,MAAM,YAAC/1D,GAAe52B,KAAK8N,SACrB,WAAC2hB,EAAA,WAAYC,GAAc1vB,KAAK2vB,gBACtC,IAAI,IAAC5d,EAAG,IAAED,GAAO9R,KAEjB,MAAM4sF,EAASl7E,GAAMK,EAAM0d,EAAa1d,EAAML,EACxCm7E,EAASn7E,GAAMI,EAAM4d,EAAa5d,EAAMJ,EAE9C,GAAIklB,EAAa,CACf,MAAMk2D,EAAUzkE,GAAKtW,GACfg7E,EAAU1kE,GAAKvW,GAEjBg7E,EAAU,GAAKC,EAAU,EAC3BF,EAAO,GACEC,EAAU,GAAKC,EAAU,GAClCH,EAAO,E,CAIX,GAAI76E,IAAQD,EAAK,CACf,IAAI6kB,EAAiB,IAAR7kB,EAAY,EAAI7C,KAAKuZ,IAAU,IAAN1W,GAEtC+6E,EAAO/6E,EAAM6kB,GAERC,GACHg2D,EAAO76E,EAAM4kB,E,CAGjB32B,KAAK+R,IAAMA,EACX/R,KAAK8R,IAAMA,CACb,CAEAk7E,YAAAA,GACE,MAAM9zB,EAAWl5D,KAAK8N,QAAQ4nB,MAE9B,IACIi2D,GADA,cAACryB,EAAA,SAAe2zB,GAAY/zB,EAkBhC,OAfI+zB,GACFtB,EAAW18E,KAAKsrD,KAAKv6D,KAAK8R,IAAMm7E,GAAYh+E,KAAK2Z,MAAM5oB,KAAK+R,IAAMk7E,GAAY,EAC1EtB,EAAW,MACb5oD,QAAQC,KAAK,UAAUhjC,KAAK+Q,sBAAsBk8E,mCAA0CtB,8BAC5FA,EAAW,OAGbA,EAAW3rF,KAAKktF,mBAChB5zB,EAAgBA,GAAiB,IAG/BA,IACFqyB,EAAW18E,KAAK8C,IAAIunD,EAAeqyB,IAG9BA,CACT,CAKAuB,gBAAAA,GACE,OAAO1nF,OAAOuiB,iBAChB,CAEAo2C,UAAAA,GACE,MAAMn+B,EAAOhgC,KAAK8N,QACZorD,EAAWl5B,EAAKtK,MAMtB,IAAIi2D,EAAW3rF,KAAKgtF,eACpBrB,EAAW18E,KAAK6C,IAAI,EAAG65E,GAEvB,MAAMwB,EAA0B,CAC9BxB,WACA90D,OAAQmJ,EAAKnJ,OACb9kB,IAAKiuB,EAAKjuB,IACVD,IAAKkuB,EAAKluB,IACV45E,UAAWxyB,EAASwyB,UACpB3oB,KAAM7J,EAAS+zB,SACf5+E,MAAO6qD,EAAS7qD,MAChBu9E,UAAW5rF,KAAK2kE,aAChB7f,WAAY9kD,KAAK4kD,eACjBjtB,YAAauhC,EAASvhC,aAAe,EACrCk0D,eAA0C,IAA3B3yB,EAAS2yB,eAEpBL,EAAYxrF,KAAKs8D,QAAUt8D,KAC3B01B,EAAQ41D,GAAc6B,EAAyB3B,GAkBrD,MAdoB,UAAhBxrD,EAAKnJ,QACPlN,GAAmB+L,EAAO11B,KAAM,SAG9BggC,EAAK9a,SACPwQ,EAAMxQ,UAENllB,KAAKsG,MAAQtG,KAAK8R,IAClB9R,KAAKkrB,IAAMlrB,KAAK+R,MAEhB/R,KAAKsG,MAAQtG,KAAK+R,IAClB/R,KAAKkrB,IAAMlrB,KAAK8R,KAGX4jB,CACT,CAKAohB,SAAAA,GACE,MAAMphB,EAAQ11B,KAAK01B,MACnB,IAAIpvB,EAAQtG,KAAK+R,IACbmZ,EAAMlrB,KAAK8R,IAIf,GAFA8zC,MAAM9O,YAEF92C,KAAK8N,QAAQ6oB,QAAUjB,EAAMhvB,OAAQ,CACvC,MAAMiwB,GAAUzL,EAAM5kB,GAAS2I,KAAK6C,IAAI4jB,EAAMhvB,OAAS,EAAG,GAAK,EAC/DJ,GAASqwB,EACTzL,GAAOyL,C,CAET32B,KAAKkrF,YAAc5kF,EACnBtG,KAAK0sF,UAAYxhE,EACjBlrB,KAAKmrF,YAAcjgE,EAAM5kB,CAC3B,CAEA05C,gBAAAA,CAAiBl7C,GACf,OAAOswB,GAAatwB,EAAO9E,KAAK21B,MAAM7nB,QAAQ8mB,OAAQ50B,KAAK8N,QAAQ4nB,MAAMJ,OAC3E,EClTa,MAAM83D,WAAoBX,GAcvCzuB,mBAAAA,GACE,MAAM,IAACjsD,EAAG,IAAED,GAAO9R,KAAKw/C,WAAU,GAElCx/C,KAAK+R,IAAMmS,GAASnS,GAAOA,EAAM,EACjC/R,KAAK8R,IAAMoS,GAASpS,GAAOA,EAAM,EAGjC9R,KAAK2sF,wBACP,CAMAO,gBAAAA,GACE,MAAMpoC,EAAa9kD,KAAK4kD,eAClBl+C,EAASo+C,EAAa9kD,KAAKC,MAAQD,KAAKu9B,OACxC5F,EAAc7N,GAAU9pB,KAAK8N,QAAQ4nB,MAAMiC,aAC3CjW,GAASojC,EAAa71C,KAAK4hB,IAAI8G,GAAe1oB,KAAK6iB,IAAI6F,KAAiB,KACxEspC,EAAWjhE,KAAKshE,wBAAwB,GAC9C,OAAOryD,KAAKsrD,KAAK7zD,EAASuI,KAAK8C,IAAI,GAAIkvD,EAASlnC,WAAarY,GAC/D,CAGAkO,gBAAAA,CAAiB9qB,GACf,OAAiB,OAAVA,EAAiBy6C,IAAMv/C,KAAK0nD,oBAAoB5iD,EAAQ9E,KAAKkrF,aAAelrF,KAAKmrF,YAC1F,CAEAvjC,gBAAAA,CAAiB7qB,GACf,OAAO/8B,KAAKkrF,YAAclrF,KAAK0hE,mBAAmB3kC,GAAS/8B,KAAKmrF,WAClE,GACFzlC,EAAAA,GAAAA,GA7CqB0nC,GAAoB,KAE3B,WAAS1nC,EAAAA,GAAAA,GAFF0nC,GAAoB,WAOrB,CAChB13D,MAAO,CACL9Q,SAAU4R,GAAMjB,WAAWC,WCPjC,MAAM63D,GAAa37E,GAAKzC,KAAK2Z,MAAMR,GAAM1W,IACnC47E,GAAiBA,CAAC57E,EAAGyD,IAAMlG,KAAKmS,IAAI,GAAIisE,GAAW37E,GAAKyD,GAE9D,SAASo4E,GAAQC,GACf,MAAMn3D,EAASm3D,EAAWv+E,KAAKmS,IAAI,GAAIisE,GAAWG,IAClD,OAAkB,IAAXn3D,CACT,CAEA,SAASo3D,GAAM17E,EAAKD,EAAK47E,GACvB,MAAMC,EAAY1+E,KAAKmS,IAAI,GAAIssE,GACzBpnF,EAAQ2I,KAAK2Z,MAAM7W,EAAM47E,GACzBziE,EAAMjc,KAAKsrD,KAAKzoD,EAAM67E,GAC5B,OAAOziE,EAAM5kB,CACf,CAEA,SAASsnF,GAAS77E,EAAKD,GACrB,MAAM5K,EAAQ4K,EAAMC,EACpB,IAAI27E,EAAWL,GAAWnmF,GAC1B,MAAOumF,GAAM17E,EAAKD,EAAK47E,GAAY,GACjCA,IAEF,MAAOD,GAAM17E,EAAKD,EAAK47E,GAAY,GACjCA,IAEF,OAAOz+E,KAAK8C,IAAI27E,EAAUL,GAAWt7E,GACvC,CASA,SAAS87E,GAActC,GAAmB,IAACx5E,EAAG,IAAED,IAC9CC,EAAMqS,GAAgBmnE,EAAkBx5E,IAAKA,GAC7C,MAAM2jB,EAAQ,GACRo4D,EAAST,GAAWt7E,GAC1B,IAAIg8E,EAAMH,GAAS77E,EAAKD,GACpB45E,EAAYqC,EAAM,EAAI9+E,KAAKmS,IAAI,GAAInS,KAAKuZ,IAAIulE,IAAQ,EACxD,MAAMd,EAAWh+E,KAAKmS,IAAI,GAAI2sE,GACxB9gE,EAAO6gE,EAASC,EAAM9+E,KAAKmS,IAAI,GAAI0sE,GAAU,EAC7CxnF,EAAQ2I,KAAKC,OAAO6C,EAAMkb,GAAQy+D,GAAaA,EAC/C/0D,EAAS1nB,KAAK2Z,OAAO7W,EAAMkb,GAAQggE,EAAW,IAAMA,EAAW,GACrE,IAAI32D,EAAcrnB,KAAK2Z,OAAOtiB,EAAQqwB,GAAU1nB,KAAKmS,IAAI,GAAI2sE,IACzDjpF,EAAQsf,GAAgBmnE,EAAkBx5E,IAAK9C,KAAKC,OAAO+d,EAAO0J,EAASL,EAAcrnB,KAAKmS,IAAI,GAAI2sE,IAAQrC,GAAaA,GAC/H,MAAO5mF,EAAQgN,EACb4jB,EAAM1O,KAAK,CAACliB,QAAOszB,MAAOm1D,GAAQzoF,GAAQwxB,gBACtCA,GAAe,GACjBA,EAAcA,EAAc,GAAK,GAAK,GAEtCA,IAEEA,GAAe,KACjBy3D,IACAz3D,EAAc,EACdo1D,EAAYqC,GAAO,EAAI,EAAIrC,GAE7B5mF,EAAQmK,KAAKC,OAAO+d,EAAO0J,EAASL,EAAcrnB,KAAKmS,IAAI,GAAI2sE,IAAQrC,GAAaA,EAEtF,MAAMsC,EAAW5pE,GAAgBmnE,EAAkBz5E,IAAKhN,GAGxD,OAFA4wB,EAAM1O,KAAK,CAACliB,MAAOkpF,EAAU51D,MAAOm1D,GAAQS,GAAW13D,gBAEhDZ,CACT,CAEe,MAAMu4D,WAAyBlyB,GAiB5C35C,WAAAA,CAAYszB,GACVkQ,MAAMlQ,GAGN11C,KAAKsG,WAAQwN,EAEb9T,KAAKkrB,SAAMpX,EAEX9T,KAAKkrF,iBAAcp3E,EACnB9T,KAAKmrF,YAAc,CACrB,CAEAtjD,KAAAA,CAAMgT,EAAKn8C,GACT,MAAMoG,EAAQ2nF,GAAgB5oE,UAAUgkB,MAAM9iB,MAAM/kB,KAAM,CAAC66C,EAAKn8C,IAChE,GAAc,IAAVoG,EAIJ,OAAOof,GAASpf,IAAUA,EAAQ,EAAIA,EAAQ,KAH5C9E,KAAKkuF,OAAQ,CAIjB,CAEAlwB,mBAAAA,GACE,MAAM,IAACjsD,EAAG,IAAED,GAAO9R,KAAKw/C,WAAU,GAElCx/C,KAAK+R,IAAMmS,GAASnS,GAAO9C,KAAK6C,IAAI,EAAGC,GAAO,KAC9C/R,KAAK8R,IAAMoS,GAASpS,GAAO7C,KAAK6C,IAAI,EAAGA,GAAO,KAE1C9R,KAAK8N,QAAQ8oB,cACf52B,KAAKkuF,OAAQ,GAKXluF,KAAKkuF,OAASluF,KAAK+R,MAAQ/R,KAAK88D,gBAAkB54C,GAASlkB,KAAK48D,YAClE58D,KAAK+R,IAAMA,IAAQu7E,GAAettF,KAAK+R,IAAK,GAAKu7E,GAAettF,KAAK+R,KAAM,GAAKu7E,GAAettF,KAAK+R,IAAK,IAG3G/R,KAAK2sF,wBACP,CAEAA,sBAAAA,GACE,MAAM,WAACl9D,EAAA,WAAYC,GAAc1vB,KAAK2vB,gBACtC,IAAI5d,EAAM/R,KAAK+R,IACXD,EAAM9R,KAAK8R,IAEf,MAAM86E,EAASl7E,GAAMK,EAAM0d,EAAa1d,EAAML,EACxCm7E,EAASn7E,GAAMI,EAAM4d,EAAa5d,EAAMJ,EAE1CK,IAAQD,IACNC,GAAO,GACT66E,EAAO,GACPC,EAAO,MAEPD,EAAOU,GAAev7E,GAAM,IAC5B86E,EAAOS,GAAex7E,EAAK,MAG3BC,GAAO,GACT66E,EAAOU,GAAex7E,GAAM,IAE1BA,GAAO,GAET+6E,EAAOS,GAAev7E,EAAK,IAG7B/R,KAAK+R,IAAMA,EACX/R,KAAK8R,IAAMA,CACb,CAEAqsD,UAAAA,GACE,MAAMn+B,EAAOhgC,KAAK8N,QAEZy9E,EAAoB,CACxBx5E,IAAK/R,KAAK48D,SACV9qD,IAAK9R,KAAK28D,UAENjnC,EAAQm4D,GAActC,EAAmBvrF,MAkB/C,MAdoB,UAAhBggC,EAAKnJ,QACPlN,GAAmB+L,EAAO11B,KAAM,SAG9BggC,EAAK9a,SACPwQ,EAAMxQ,UAENllB,KAAKsG,MAAQtG,KAAK8R,IAClB9R,KAAKkrB,IAAMlrB,KAAK+R,MAEhB/R,KAAKsG,MAAQtG,KAAK+R,IAClB/R,KAAKkrB,IAAMlrB,KAAK8R,KAGX4jB,CACT,CAMAsqB,gBAAAA,CAAiBl7C,GACf,YAAiBgP,IAAVhP,EACH,IACAswB,GAAatwB,EAAO9E,KAAK21B,MAAM7nB,QAAQ8mB,OAAQ50B,KAAK8N,QAAQ4nB,MAAMJ,OACxE,CAKAwhB,SAAAA,GACE,MAAMxwC,EAAQtG,KAAK+R,IAEnB6zC,MAAM9O,YAEN92C,KAAKkrF,YAAc9iE,GAAM9hB,GACzBtG,KAAKmrF,YAAc/iE,GAAMpoB,KAAK8R,KAAOsW,GAAM9hB,EAC7C,CAEAspB,gBAAAA,CAAiB9qB,GAIf,YAHcgP,IAAVhP,GAAiC,IAAVA,IACzBA,EAAQ9E,KAAK+R,KAED,OAAVjN,GAAkB0kB,MAAM1kB,GACnBy6C,IAEFv/C,KAAK0nD,mBAAmB5iD,IAAU9E,KAAK+R,IAC1C,GACCqW,GAAMtjB,GAAS9E,KAAKkrF,aAAelrF,KAAKmrF,YAC/C,CAEAvjC,gBAAAA,CAAiB7qB,GACf,MAAM0kC,EAAUzhE,KAAK0hE,mBAAmB3kC,GACxC,OAAO9tB,KAAKmS,IAAI,GAAIphB,KAAKkrF,YAAczpB,EAAUzhE,KAAKmrF,YACxD,ECxNF,SAASgD,GAAsBnuD,GAC7B,MAAMk5B,EAAWl5B,EAAKtK,MAEtB,GAAIwjC,EAASxiC,SAAWsJ,EAAKtJ,QAAS,CACpC,MAAMpC,EAAUsO,GAAUs2B,EAAS1gC,iBACnC,OAAOlU,GAAe40C,EAASr/B,MAAQq/B,EAASr/B,KAAKxsB,KAAMgmB,GAASwG,KAAKxsB,MAAQinB,EAAQiJ,M,CAE3F,OAAO,CACT,CAEA,SAAS6wD,GAAiBl0D,EAAKL,EAAMvsB,GAEnC,OADAA,EAAQsH,GAAQtH,GAASA,EAAQ,CAACA,GAC3B,CACLgH,EAAG8nB,GAAalC,EAAKL,EAAKoC,OAAQ3uB,GAClCuE,EAAGvE,EAAM5G,OAASmzB,EAAKE,WAE3B,CAEA,SAASs0D,GAAgB5jE,EAAOohB,EAAKx+B,EAAM0E,EAAKD,GAC9C,OAAI2Y,IAAU1Y,GAAO0Y,IAAU3Y,EACtB,CACLxL,MAAOulC,EAAOx+B,EAAO,EACrB6d,IAAK2gB,EAAOx+B,EAAO,GAEZod,EAAQ1Y,GAAO0Y,EAAQ3Y,EACzB,CACLxL,MAAOulC,EAAMx+B,EACb6d,IAAK2gB,GAIF,CACLvlC,MAAOulC,EACP3gB,IAAK2gB,EAAMx+B,EAEf,CAKA,SAASihF,GAAmBvzD,GA8B1B,MAAMuqB,EAAO,CACX1zC,EAAGmpB,EAAMtM,KAAOsM,EAAMwzD,SAAS9/D,KAC/Bnb,EAAGynB,EAAMrM,MAAQqM,EAAMwzD,SAAS7/D,MAChClN,EAAGuZ,EAAMxG,IAAMwG,EAAMwzD,SAASh6D,IAC9B3hB,EAAGmoB,EAAMvG,OAASuG,EAAMwzD,SAAS/5D,QAE7Bg6D,EAASxgF,OAAO8T,OAAO,CAAC,EAAGwjC,GAC3Bma,EAAa,GACbnrC,EAAU,GACVm6D,EAAa1zD,EAAM2zD,aAAahoF,OAChCioF,EAAiB5zD,EAAMjtB,QAAQigD,YAC/B6gC,EAAkBD,EAAeE,kBAAoBlnE,GAAK8mE,EAAa,EAE7E,IAAK,IAAIj6E,EAAI,EAAGA,EAAIi6E,EAAYj6E,IAAK,CACnC,MAAMwrB,EAAO2uD,EAAehpD,WAAW5K,EAAM+zD,qBAAqBt6E,IAClE8f,EAAQ9f,GAAKwrB,EAAK1L,QAClB,MAAM45B,EAAgBnzB,EAAMg0D,iBAAiBv6E,EAAGumB,EAAMi0D,YAAc16D,EAAQ9f,GAAIo6E,GAC1EK,EAASpsD,GAAO7C,EAAKnG,MACrBq1D,EAAWd,GAAiBrzD,EAAMb,IAAK+0D,EAAQl0D,EAAM2zD,aAAal6E,IACxEirD,EAAWjrD,GAAK06E,EAEhB,MAAM9uB,EAAep1C,GAAgB+P,EAAMyyB,cAAch5C,GAAKo6E,GACxDnkE,EAAQxb,KAAKC,MAAM8a,GAAUo2C,IAC7B+uB,EAAUd,GAAgB5jE,EAAOyjC,EAAcx4C,EAAGw5E,EAAS56E,EAAG,EAAG,KACjE86E,EAAUf,GAAgB5jE,EAAOyjC,EAAcvnC,EAAGuoE,EAASr9E,EAAG,GAAI,KACxEw9E,GAAab,EAAQlpC,EAAM8a,EAAc+uB,EAASC,EACpD,CAEAr0D,EAAMu0D,eACJhqC,EAAK1zC,EAAI48E,EAAO58E,EAChB48E,EAAOl7E,EAAIgyC,EAAKhyC,EAChBgyC,EAAK9jC,EAAIgtE,EAAOhtE,EAChBgtE,EAAO57E,EAAI0yC,EAAK1yC,GAIlBmoB,EAAMw0D,iBAAmBC,GAAqBz0D,EAAO0kC,EAAYnrC,EACnE,CAEA,SAAS+6D,GAAab,EAAQlpC,EAAM76B,EAAO0kE,EAASC,GAClD,MAAMv+D,EAAM5hB,KAAKuZ,IAAIvZ,KAAK4hB,IAAIpG,IACxBqH,EAAM7iB,KAAKuZ,IAAIvZ,KAAK6iB,IAAIrH,IAC9B,IAAI/U,EAAI,EACJiR,EAAI,EACJwoE,EAAQ7oF,MAAQg/C,EAAK1zC,GACvB8D,GAAK4vC,EAAK1zC,EAAIu9E,EAAQ7oF,OAASuqB,EAC/B29D,EAAO58E,EAAI3C,KAAK8C,IAAIy8E,EAAO58E,EAAG0zC,EAAK1zC,EAAI8D,IAC9By5E,EAAQjkE,IAAMo6B,EAAKhyC,IAC5BoC,GAAKy5E,EAAQjkE,IAAMo6B,EAAKhyC,GAAKud,EAC7B29D,EAAOl7E,EAAIrE,KAAK6C,IAAI08E,EAAOl7E,EAAGgyC,EAAKhyC,EAAIoC,IAErC05E,EAAQ9oF,MAAQg/C,EAAK9jC,GACvBmF,GAAK2+B,EAAK9jC,EAAI4tE,EAAQ9oF,OAASwrB,EAC/B08D,EAAOhtE,EAAIvS,KAAK8C,IAAIy8E,EAAOhtE,EAAG8jC,EAAK9jC,EAAImF,IAC9ByoE,EAAQlkE,IAAMo6B,EAAK1yC,IAC5B+T,GAAKyoE,EAAQlkE,IAAMo6B,EAAK1yC,GAAKkf,EAC7B08D,EAAO57E,EAAI3D,KAAK6C,IAAI08E,EAAO57E,EAAG0yC,EAAK1yC,EAAI+T,GAE3C,CAEA,SAAS8oE,GAAqB10D,EAAOr8B,EAAOgxF,GAC1C,MAAMC,EAAgB50D,EAAMi0D,aACtB,MAACY,EAAA,gBAAOhB,EAAA,QAAiBt6D,EAAO,KAAEjnB,GAAQqiF,EAC1CG,EAAqB90D,EAAMg0D,iBAAiBrwF,EAAOixF,EAAgBC,EAAQt7D,EAASs6D,GACpFnkE,EAAQxb,KAAKC,MAAM8a,GAAUgB,GAAgB6kE,EAAmBplE,MAAQxC,MACxEtB,EAAImpE,GAAUD,EAAmBlpE,EAAGtZ,EAAKwE,EAAG4Y,GAC5C0V,EAAY4vD,GAAqBtlE,GACjCgE,EAAOuhE,GAAiBH,EAAmBn6E,EAAGrI,EAAKiH,EAAG6rB,GAC5D,MAAO,CAELjM,SAAS,EAGTxe,EAAGm6E,EAAmBn6E,EACtBiR,IAGAwZ,YAGA1R,OACA8F,IAAK5N,EACL+H,MAAOD,EAAOphB,EAAKiH,EACnBkgB,OAAQ7N,EAAItZ,EAAKwE,EAErB,CAEA,SAASo+E,GAAgBzxF,EAAMygC,GAC7B,IAAKA,EACH,OAAO,EAET,MAAM,KAACxQ,EAAA,IAAM8F,EAAA,MAAK7F,EAAK,OAAE8F,GAAUh2B,EAC7B0xF,EAAelxD,GAAe,CAACtpB,EAAG+Y,EAAM9H,EAAG4N,GAAM0K,IAASD,GAAe,CAACtpB,EAAG+Y,EAAM9H,EAAG6N,GAASyK,IACnGD,GAAe,CAACtpB,EAAGgZ,EAAO/H,EAAG4N,GAAM0K,IAASD,GAAe,CAACtpB,EAAGgZ,EAAO/H,EAAG6N,GAASyK,GACpF,OAAQixD,CACV,CAEA,SAASV,GAAqBz0D,EAAO0kC,EAAYnrC,GAC/C,MAAM9G,EAAQ,GACRihE,EAAa1zD,EAAM2zD,aAAahoF,OAChCs5B,EAAOjF,EAAMjtB,SACb,kBAAC+gF,EAAiB,QAAEn4D,GAAWsJ,EAAK+tB,YACpC2hC,EAAW,CACfE,MAAOzB,GAAsBnuD,GAAQ,EACrC4uD,gBAAiBC,EAAoBlnE,GAAK8mE,EAAa,GAEzD,IAAIxvD,EAEJ,IAAK,IAAIzqB,EAAI,EAAGA,EAAIi6E,EAAYj6E,IAAK,CACnCk7E,EAASp7D,QAAUA,EAAQ9f,GAC3Bk7E,EAASriF,KAAOoyD,EAAWjrD,GAE3B,MAAMhW,EAAOixF,GAAqB10D,EAAOvmB,EAAGk7E,GAC5CliE,EAAMxG,KAAKxoB,GACK,SAAZk4B,IACFl4B,EAAK01B,QAAU+7D,GAAgBzxF,EAAMygC,GACjCzgC,EAAK01B,UACP+K,EAAOzgC,GAGb,CACA,OAAOgvB,CACT,CAEA,SAASuiE,GAAqBtlE,GAC5B,OAAc,IAAVA,GAAyB,MAAVA,EACV,SACEA,EAAQ,IACV,OAGF,OACT,CAEA,SAASulE,GAAiBt6E,EAAGpB,EAAGga,GAM9B,MALc,UAAVA,EACF5Y,GAAKpB,EACc,WAAVga,IACT5Y,GAAMpB,EAAI,GAELoB,CACT,CAEA,SAASo6E,GAAUnpE,EAAG9U,EAAG4Y,GAMvB,OALc,KAAVA,GAA0B,MAAVA,EAClB9D,GAAM9U,EAAI,GACD4Y,EAAQ,KAAOA,EAAQ,MAChC9D,GAAK9U,GAEA8U,CACT,CAEA,SAASwpE,GAAkBj2D,EAAK8F,EAAMxhC,GACpC,MAAM,KAACiwB,EAAA,IAAM8F,EAAA,MAAK7F,EAAK,OAAE8F,GAAUh2B,GAC7B,cAAC+5B,GAAiByH,EAExB,IAAKpc,GAAc2U,GAAgB,CACjC,MAAMszB,EAAelpB,GAAc3C,EAAK6rB,cAClCv3B,EAAUsO,GAAU5C,EAAKxH,iBAC/B0B,EAAIgG,UAAY3H,EAEhB,MAAM63D,EAAe3hE,EAAO6F,EAAQ7F,KAC9B4hE,EAAc97D,EAAMD,EAAQC,IAC5B+7D,EAAgB5hE,EAAQD,EAAO6F,EAAQr0B,MACvCswF,EAAiB/7D,EAASD,EAAMD,EAAQiJ,OAE1CvvB,OAAOse,OAAOu/B,GAAcoc,KAAKv2D,GAAW,IAANA,IACxCwoB,EAAImE,YACJuD,GAAmB1H,EAAK,CACtBxkB,EAAG06E,EACHzpE,EAAG0pE,EACH/7E,EAAGg8E,EACHz+E,EAAG0+E,EACHtyD,OAAQ4tB,IAEV3xB,EAAI2E,QAEJ3E,EAAIiH,SAASivD,EAAcC,EAAaC,EAAeC,E,CAG7D,CAEA,SAASC,GAAgBz1D,EAAOgrD,GAC9B,MAAM,IAAC7rD,EAAKpsB,SAAS,YAACigD,IAAgBhzB,EAEtC,IAAK,IAAIvmB,EAAIuxE,EAAa,EAAGvxE,GAAK,EAAGA,IAAK,CACxC,MAAMhW,EAAOu8B,EAAMw0D,iBAAiB/6E,GACpC,IAAKhW,EAAK01B,QAER,SAEF,MAAM8uC,EAAcjV,EAAYpoB,WAAW5K,EAAM+zD,qBAAqBt6E,IACtE27E,GAAkBj2D,EAAK8oC,EAAaxkE,GACpC,MAAMywF,EAASpsD,GAAOmgC,EAAYnpC,OAC5B,EAACnkB,EAAC,EAAEiR,EAAA,UAAGwZ,GAAa3hC,EAE1B4iC,GACElH,EACAa,EAAM2zD,aAAal6E,GACnBkB,EACAiR,EAAKsoE,EAAOl1D,WAAa,EACzBk1D,EACA,CACEvsE,MAAOsgD,EAAYtgD,MACnByd,UAAWA,EACXC,aAAc,UAGpB,CACF,CAEA,SAASqwD,GAAe11D,EAAOkD,EAAQ6vB,EAAUi4B,GAC/C,MAAM,IAAC7rD,GAAOa,EACd,GAAI+yB,EAEF5zB,EAAIqE,IAAIxD,EAAMsyB,QAAStyB,EAAMuyB,QAASrvB,EAAQ,EAAGrW,QAC5C,CAEL,IAAIsmC,EAAgBnzB,EAAMg0D,iBAAiB,EAAG9wD,GAC9C/D,EAAIuE,OAAOyvB,EAAcx4C,EAAGw4C,EAAcvnC,GAE1C,IAAK,IAAInS,EAAI,EAAGA,EAAIuxE,EAAYvxE,IAC9B05C,EAAgBnzB,EAAMg0D,iBAAiBv6E,EAAGypB,GAC1C/D,EAAIwE,OAAOwvB,EAAcx4C,EAAGw4C,EAAcvnC,E,CAGhD,CAEA,SAAS+pE,GAAe31D,EAAO41D,EAAc1yD,EAAQ8nD,EAAY/jB,GAC/D,MAAM9nC,EAAMa,EAAMb,IACZ4zB,EAAW6iC,EAAa7iC,UAExB,MAACprC,EAAA,UAAOuU,GAAa05D,GAErB7iC,IAAai4B,IAAgBrjE,IAAUuU,GAAagH,EAAS,IAInE/D,EAAIsC,OACJtC,EAAI6G,YAAcre,EAClBwX,EAAIjD,UAAYA,EAChBiD,EAAIgqC,YAAYlC,EAAWxqC,MAAQ,IACnC0C,EAAI8xB,eAAiBgW,EAAWvqC,WAEhCyC,EAAImE,YACJoyD,GAAe11D,EAAOkD,EAAQ6vB,EAAUi4B,GACxC7rD,EAAIsE,YACJtE,EAAI6E,SACJ7E,EAAI0C,UACN,CAEA,SAASg0D,GAAwB1pD,EAAQxoC,EAAO4O,GAC9C,OAAOm2B,GAAcyD,EAAQ,CAC3B55B,QACA5O,QACAY,KAAM,cAEV,ED9GAomD,EAAAA,GAAAA,GAxJqBuoC,GAAyB,KAEhC,gBAAcvoC,EAAAA,GAAAA,GAFPuoC,GAAyB,WAO1B,CAChBv4D,MAAO,CACL9Q,SAAU4R,GAAMjB,WAAWa,YAC3BgC,MAAO,CACLohC,SAAS,MC6PF,MAAMq3B,WAA0BpE,GA0E7CrqE,WAAAA,CAAYszB,GACVkQ,MAAMlQ,GAGN11C,KAAKqtD,aAAUv5C,EAEf9T,KAAKstD,aAAUx5C,EAEf9T,KAAKgvF,iBAAcl7E,EAEnB9T,KAAK0uF,aAAe,GACpB1uF,KAAKuvF,iBAAmB,EAC1B,CAEA1xB,aAAAA,GAEE,MAAMvpC,EAAUt0B,KAAKuuF,SAAW3rD,GAAUurD,GAAsBnuF,KAAK8N,SAAW,GAC1EwG,EAAItU,KAAKC,MAAQD,KAAK0hC,SAAWpN,EAAQr0B,MACzC4R,EAAI7R,KAAKu9B,OAASv9B,KAAK+sC,UAAYzY,EAAQiJ,OACjDv9B,KAAKqtD,QAAUp+C,KAAK2Z,MAAM5oB,KAAKyuB,KAAOna,EAAI,EAAIggB,EAAQ7F,MACtDzuB,KAAKstD,QAAUr+C,KAAK2Z,MAAM5oB,KAAKu0B,IAAM1iB,EAAI,EAAIyiB,EAAQC,KACrDv0B,KAAKgvF,YAAc//E,KAAK2Z,MAAM3Z,KAAK8C,IAAIuC,EAAGzC,GAAK,EACjD,CAEAmsD,mBAAAA,GACE,MAAM,IAACjsD,EAAG,IAAED,GAAO9R,KAAKw/C,WAAU,GAElCx/C,KAAK+R,IAAMmS,GAASnS,KAASyX,MAAMzX,GAAOA,EAAM,EAChD/R,KAAK8R,IAAMoS,GAASpS,KAAS0X,MAAM1X,GAAOA,EAAM,EAGhD9R,KAAK2sF,wBACP,CAMAO,gBAAAA,GACE,OAAOj+E,KAAKsrD,KAAKv6D,KAAKgvF,YAAcb,GAAsBnuF,KAAK8N,SACjE,CAEAsxD,kBAAAA,CAAmB1pC,GACjB+2D,GAAgB5oE,UAAUu7C,mBAAmBr7C,KAAK/jB,KAAM01B,GAGxD11B,KAAK0uF,aAAe1uF,KAAK++C,YACtBlqC,IAAI,CAAC/P,EAAOpG,KACX,MAAM4O,EAAQsX,GAAa5kB,KAAK8N,QAAQigD,YAAYnpC,SAAU,CAAC9f,EAAOpG,GAAQsB,MAC9E,OAAOsN,GAAmB,IAAVA,EAAcA,EAAQ,KAEvCy5B,OAAO,CAACr1B,EAAG8C,IAAMxU,KAAK21B,MAAM6xB,kBAAkBhzC,GACnD,CAEAxD,GAAAA,GACE,MAAMgvB,EAAOhgC,KAAK8N,QAEdkyB,EAAKtJ,SAAWsJ,EAAK+tB,YAAYr3B,QACnC43D,GAAmBtuF,MAEnBA,KAAKsvF,eAAe,EAAG,EAAG,EAAG,EAEjC,CAEAA,cAAAA,CAAewB,EAAcC,EAAeC,EAAaC,GACvDjxF,KAAKqtD,SAAWp+C,KAAK2Z,OAAOkoE,EAAeC,GAAiB,GAC5D/wF,KAAKstD,SAAWr+C,KAAK2Z,OAAOooE,EAAcC,GAAkB,GAC5DjxF,KAAKgvF,aAAe//E,KAAK8C,IAAI/R,KAAKgvF,YAAc,EAAG//E,KAAK6C,IAAIg/E,EAAcC,EAAeC,EAAaC,GACxG,CAEAzjC,aAAAA,CAAc9uD,GACZ,MAAMwyF,EAAkBtpE,IAAO5nB,KAAK0uF,aAAahoF,QAAU,GACrDoiD,EAAa9oD,KAAK8N,QAAQg7C,YAAc,EAE9C,OAAO99B,GAAgBtsB,EAAQwyF,EAAkBpnE,GAAUg/B,GAC7D,CAEA8E,6BAAAA,CAA8B9oD,GAC5B,GAAI8e,GAAc9e,GAChB,OAAOy6C,IAIT,MAAM4xC,EAAgBnxF,KAAKgvF,aAAehvF,KAAK8R,IAAM9R,KAAK+R,KAC1D,OAAI/R,KAAK8N,QAAQoX,SACPllB,KAAK8R,IAAMhN,GAASqsF,GAEtBrsF,EAAQ9E,KAAK+R,KAAOo/E,CAC9B,CAEAC,6BAAAA,CAA8BzmE,GAC5B,GAAI/G,GAAc+G,GAChB,OAAO40B,IAGT,MAAM8xC,EAAiB1mE,GAAY3qB,KAAKgvF,aAAehvF,KAAK8R,IAAM9R,KAAK+R,MACvE,OAAO/R,KAAK8N,QAAQoX,QAAUllB,KAAK8R,IAAMu/E,EAAiBrxF,KAAK+R,IAAMs/E,CACvE,CAEAvC,oBAAAA,CAAqBpwF,GACnB,MAAMqvD,EAAc/tD,KAAK0uF,cAAgB,GAEzC,GAAIhwF,GAAS,GAAKA,EAAQqvD,EAAYrnD,OAAQ,CAC5C,MAAM4qF,EAAavjC,EAAYrvD,GAC/B,OAAOkyF,GAAwB5wF,KAAKo9B,aAAc1+B,EAAO4yF,E,CAE7D,CAEAvC,gBAAAA,CAAiBrwF,EAAO6yF,EAAoB3C,EAAkB,GAC5D,MAAMnkE,EAAQzqB,KAAKwtD,cAAc9uD,GAASupB,GAAU2mE,EACpD,MAAO,CACLl5E,EAAGzG,KAAK6iB,IAAIrH,GAAS8mE,EAAqBvxF,KAAKqtD,QAC/C1mC,EAAG1X,KAAK4hB,IAAIpG,GAAS8mE,EAAqBvxF,KAAKstD,QAC/C7iC,QAEJ,CAEA0jC,wBAAAA,CAAyBzvD,EAAOoG,GAC9B,OAAO9E,KAAK+uF,iBAAiBrwF,EAAOsB,KAAK4tD,8BAA8B9oD,GACzE,CAEA0sF,eAAAA,CAAgB9yF,GACd,OAAOsB,KAAKmuD,yBAAyBzvD,GAAS,EAAGsB,KAAK2hE,eACxD,CAEA8vB,qBAAAA,CAAsB/yF,GACpB,MAAM,KAAC+vB,EAAA,IAAM8F,EAAA,MAAK7F,EAAK,OAAE8F,GAAUx0B,KAAKuvF,iBAAiB7wF,GACzD,MAAO,CACL+vB,OACA8F,MACA7F,QACA8F,SAEJ,CAKAuvC,cAAAA,GACE,MAAM,gBAAC3qC,EAAiBpC,MAAM,SAAC82B,IAAa9tD,KAAK8N,QACjD,GAAIsrB,EAAiB,CACnB,MAAMc,EAAMl6B,KAAKk6B,IACjBA,EAAIsC,OACJtC,EAAImE,YACJoyD,GAAezwF,KAAMA,KAAK4tD,8BAA8B5tD,KAAK0sF,WAAY5+B,EAAU9tD,KAAK0uF,aAAahoF,QACrGwzB,EAAIsE,YACJtE,EAAIgG,UAAY9G,EAChBc,EAAI2E,OACJ3E,EAAI0C,S,CAER,CAKAonC,QAAAA,GACE,MAAM9pC,EAAMl6B,KAAKk6B,IACX8F,EAAOhgC,KAAK8N,SACZ,WAAC+/C,EAAU,KAAE72B,EAAA,OAAMO,GAAUyI,EAC7B+lD,EAAa/lF,KAAK0uF,aAAahoF,OAErC,IAAI8N,EAAGmiB,EAAQ44B,EAmBf,GAjBIvvB,EAAK+tB,YAAYr3B,SACnB85D,GAAgBxwF,KAAM+lF,GAGpB/uD,EAAKN,SACP12B,KAAK01B,MAAM3I,QAAQ,CAACynB,EAAM91C,KACxB,GAAc,IAAVA,GAA0B,IAAVA,GAAesB,KAAK+R,IAAM,EAAI,CAChD4kB,EAAS32B,KAAK4tD,8BAA8BpZ,EAAK1vC,OACjD,MAAM00B,EAAUx5B,KAAKo9B,WAAW1+B,GAC1BskE,EAAchsC,EAAK2O,WAAWnM,GAC9BypC,EAAoB1rC,EAAOoO,WAAWnM,GAE5Ck3D,GAAe1wF,KAAMgjE,EAAarsC,EAAQovD,EAAY9iB,E,IAKxDpV,EAAWn3B,QAAS,CAGtB,IAFAwD,EAAIsC,OAEChoB,EAAIuxE,EAAa,EAAGvxE,GAAK,EAAGA,IAAK,CACpC,MAAMwuD,EAAcnV,EAAWloB,WAAW3lC,KAAK8uF,qBAAqBt6E,KAC9D,MAACkO,EAAA,UAAOuU,GAAa+rC,EAEtB/rC,GAAcvU,IAInBwX,EAAIjD,UAAYA,EAChBiD,EAAI6G,YAAcre,EAElBwX,EAAIgqC,YAAYlB,EAAYrwB,YAC5BzY,EAAI8xB,eAAiBgX,EAAYpwB,iBAEjCjc,EAAS32B,KAAK4tD,8BAA8B5tB,EAAK9a,QAAUllB,KAAK+R,IAAM/R,KAAK8R,KAC3Ey9C,EAAWvvD,KAAK+uF,iBAAiBv6E,EAAGmiB,GACpCuD,EAAImE,YACJnE,EAAIuE,OAAOz+B,KAAKqtD,QAASrtD,KAAKstD,SAC9BpzB,EAAIwE,OAAO6wB,EAAS75C,EAAG65C,EAAS5oC,GAChCuT,EAAI6E,SACN,CAEA7E,EAAI0C,S,CAER,CAKAunC,UAAAA,GAAc,CAKdE,UAAAA,GACE,MAAMnqC,EAAMl6B,KAAKk6B,IACX8F,EAAOhgC,KAAK8N,QACZorD,EAAWl5B,EAAKtK,MAEtB,IAAKwjC,EAASxiC,QACZ,OAGF,MAAMoyB,EAAa9oD,KAAKwtD,cAAc,GACtC,IAAI72B,EAAQ12B,EAEZi6B,EAAIsC,OACJtC,EAAIiE,UAAUn+B,KAAKqtD,QAASrtD,KAAKstD,SACjCpzB,EAAI3kB,OAAOuzC,GACX5uB,EAAIiG,UAAY,SAChBjG,EAAIkG,aAAe,SAEnBpgC,KAAK01B,MAAM3I,QAAQ,CAACynB,EAAM91C,KACxB,GAAe,IAAVA,GAAesB,KAAK+R,KAAO,IAAOiuB,EAAK9a,QAC1C,OAGF,MAAM89C,EAAc9J,EAASvzB,WAAW3lC,KAAKo9B,WAAW1+B,IAClDuiE,EAAWp+B,GAAOmgC,EAAYnpC,MAGpC,GAFAlD,EAAS32B,KAAK4tD,8BAA8B5tD,KAAK01B,MAAMh3B,GAAOoG,OAE1Dk+D,EAAY1qC,kBAAmB,CACjC4B,EAAIL,KAAOonC,EAAShlC,OACpBh8B,EAAQi6B,EAAIiC,YAAYqY,EAAKlnC,OAAOrN,MACpCi6B,EAAIgG,UAAY8iC,EAAYzqC,cAE5B,MAAMjE,EAAUsO,GAAUogC,EAAYxqC,iBACtC0B,EAAIiH,UACDlhC,EAAQ,EAAIq0B,EAAQ7F,MACpBkI,EAASsqC,EAAS5zD,KAAO,EAAIinB,EAAQC,IACtCt0B,EAAQq0B,EAAQr0B,MAChBghE,EAAS5zD,KAAOinB,EAAQiJ,O,CAI5B6D,GAAWlH,EAAKsa,EAAKlnC,MAAO,GAAIqpB,EAAQsqC,EAAU,CAChDv+C,MAAOsgD,EAAYtgD,MACnB6e,YAAayhC,EAAYjrC,gBACzBuJ,YAAa0hC,EAAYlrC,oBAI7BoC,EAAI0C,SACN,CAKA2nC,SAAAA,GAAa,GACf7e,EAAAA,GAAAA,GA1VqBmrC,GAA0B,KAEjC,iBAAenrC,EAAAA,GAAAA,GAFRmrC,GAA0B,WAO3B,CAChBn6D,SAAS,EAGTg7D,SAAS,EACTniC,SAAU,YAEV1B,WAAY,CACVn3B,SAAS,EACTO,UAAW,EACX0b,WAAY,GACZC,iBAAkB,GAGpB5b,KAAM,CACJ82B,UAAU,GAGZhF,WAAY,EAGZpzB,MAAO,CAEL4C,mBAAmB,EAEnB1T,SAAU4R,GAAMjB,WAAWC,SAG7Bu4B,YAAa,CACXx1B,mBAAezkB,EAGf0kB,gBAAiB,EAGjB9B,SAAS,EAGTmD,KAAM,CACJxsB,KAAM,IAIRuX,QAAAA,CAAStX,GACP,OAAOA,CACT,EAGAgnB,QAAS,EAGTu6D,mBAAmB,MAErBnpC,EAAAA,GAAAA,GA5DiBmrC,GAA0B,gBA8DtB,CACrB,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,WACfnrC,EAAAA,GAAAA,GAlEiBmrC,GAA0B,cAoExB,CACnBhjC,WAAY,CACVp6B,UAAW,UCxYjB,MAAMk+D,GAAY,CAChBC,YAAa,CAACC,QAAQ,EAAMxkF,KAAM,EAAGogF,MAAO,KAC5CqE,OAAQ,CAACD,QAAQ,EAAMxkF,KAAM,IAAMogF,MAAO,IAC1CsE,OAAQ,CAACF,QAAQ,EAAMxkF,KAAM,IAAOogF,MAAO,IAC3CuE,KAAM,CAACH,QAAQ,EAAMxkF,KAAM,KAASogF,MAAO,IAC3CrpF,IAAK,CAACytF,QAAQ,EAAMxkF,KAAM,MAAUogF,MAAO,IAC3CwE,KAAM,CAACJ,QAAQ,EAAOxkF,KAAM,OAAWogF,MAAO,GAC9ChoF,MAAO,CAACosF,QAAQ,EAAMxkF,KAAM,OAASogF,MAAO,IAC5CyE,QAAS,CAACL,QAAQ,EAAOxkF,KAAM,OAASogF,MAAO,GAC/CloF,KAAM,CAACssF,QAAQ,EAAMxkF,KAAM,SAMvB8kF,GAA6CnkF,OAAOC,KAAK0jF,IAM/D,SAASS,GAAOz/E,EAAGC,GACjB,OAAOD,EAAIC,CACb,CAOA,SAASi1B,GAAM9M,EAAO/Y,GACpB,GAAI4B,GAAc5B,GAChB,OAAO,KAGT,MAAMqwE,EAAUt3D,EAAMu3D,UAChB,OAACC,EAAA,MAAQrjF,EAAA,WAAOsjF,GAAcz3D,EAAM03D,WAC1C,IAAI3tF,EAAQkd,EAaZ,MAXsB,oBAAXuwE,IACTztF,EAAQytF,EAAOztF,IAIZof,GAASpf,KACZA,EAA0B,kBAAXytF,EACXF,EAAQxqD,MAAM/iC,EAAOytF,GACrBF,EAAQxqD,MAAM/iC,IAGN,OAAVA,EACK,MAGLoK,IACFpK,EAAkB,SAAVoK,IAAqBqa,GAASipE,KAA8B,IAAfA,EAEjDH,EAAQxjC,QAAQ/pD,EAAOoK,GADvBmjF,EAAQxjC,QAAQ/pD,EAAO,UAAW0tF,KAIhC1tF,EACV,CAUA,SAAS4tF,GAA0BC,EAAS5gF,EAAKD,EAAK8gF,GACpD,MAAMttE,EAAO6sE,GAAMzrF,OAEnB,IAAK,IAAI8N,EAAI29E,GAAMpsE,QAAQ4sE,GAAUn+E,EAAI8Q,EAAO,IAAK9Q,EAAG,CACtD,MAAMq+E,EAAWlB,GAAUQ,GAAM39E,IAC3B8gC,EAASu9C,EAASpF,MAAQoF,EAASpF,MAAQjoF,OAAOstF,iBAExD,GAAID,EAAShB,QAAU5iF,KAAKsrD,MAAMzoD,EAAMC,IAAQujC,EAASu9C,EAASxlF,QAAUulF,EAC1E,OAAOT,GAAM39E,EAEjB,CAEA,OAAO29E,GAAM7sE,EAAO,EACtB,CAWA,SAASytE,GAA2Bh4D,EAAOukC,EAAUqzB,EAAS5gF,EAAKD,GACjE,IAAK,IAAI0C,EAAI29E,GAAMzrF,OAAS,EAAG8N,GAAK29E,GAAMpsE,QAAQ4sE,GAAUn+E,IAAK,CAC/D,MAAMs3E,EAAOqG,GAAM39E,GACnB,GAAIm9E,GAAU7F,GAAM+F,QAAU92D,EAAMu3D,SAAS1jC,KAAK98C,EAAKC,EAAK+5E,IAASxsB,EAAW,EAC9E,OAAOwsB,CAEX,CAEA,OAAOqG,GAAMQ,EAAUR,GAAMpsE,QAAQ4sE,GAAW,EAClD,CAMA,SAASK,GAAmBlH,GAC1B,IAAK,IAAIt3E,EAAI29E,GAAMpsE,QAAQ+lE,GAAQ,EAAGxmE,EAAO6sE,GAAMzrF,OAAQ8N,EAAI8Q,IAAQ9Q,EACrE,GAAIm9E,GAAUQ,GAAM39E,IAAIq9E,OACtB,OAAOM,GAAM39E,EAGnB,CAOA,SAASy+E,GAAQv9D,EAAOw9D,EAAMC,GAC5B,GAAKA,GAEE,GAAIA,EAAWzsF,OAAQ,CAC5B,MAAM,GAACslB,EAAE,GAAED,GAAMJ,GAAQwnE,EAAYD,GAC/BE,EAAYD,EAAWnnE,IAAOknE,EAAOC,EAAWnnE,GAAMmnE,EAAWpnE,GACvE2J,EAAM09D,IAAa,C,OAJnB19D,EAAMw9D,IAAQ,CAMlB,CASA,SAASG,GAAct4D,EAAOrF,EAAO7gB,EAAKy+E,GACxC,MAAMjB,EAAUt3D,EAAMu3D,SAChB34B,GAAS04B,EAAQxjC,QAAQn5B,EAAM,GAAG5wB,MAAOwuF,GACzCpnE,EAAOwJ,EAAMA,EAAMhvB,OAAS,GAAG5B,MACrC,IAAIszB,EAAO15B,EAEX,IAAK05B,EAAQuhC,EAAOvhC,GAASlM,EAAMkM,GAASi6D,EAAQ/wF,IAAI82B,EAAO,EAAGk7D,GAChE50F,EAAQmW,EAAIujB,GACR15B,GAAS,IACXg3B,EAAMh3B,GAAO05B,OAAQ,GAGzB,OAAO1C,CACT,CAQA,SAAS69D,GAAoBx4D,EAAOzO,EAAQgnE,GAC1C,MAAM59D,EAAQ,GAER7gB,EAAM,CAAC,EACPyQ,EAAOgH,EAAO5lB,OACpB,IAAI8N,EAAG1P,EAEP,IAAK0P,EAAI,EAAGA,EAAI8Q,IAAQ9Q,EACtB1P,EAAQwnB,EAAO9X,GACfK,EAAI/P,GAAS0P,EAEbkhB,EAAM1O,KAAK,CACTliB,QACAszB,OAAO,IAMX,OAAiB,IAAT9S,GAAeguE,EAAqBD,GAAct4D,EAAOrF,EAAO7gB,EAAKy+E,GAAzC59D,CACtC,CAEe,MAAM89D,WAAkBz3B,GAgDrC35C,WAAAA,CAAY/iB,GACVumD,MAAMvmD,GAGNW,KAAKnC,OAAS,CACZ6B,KAAM,GACNo/C,OAAQ,GACRlH,IAAK,IAIP53C,KAAKyzF,MAAQ,MAEbzzF,KAAK0zF,gBAAa5/E,EAClB9T,KAAK2zF,SAAW,CAAC,EACjB3zF,KAAK4zF,aAAc,EACnB5zF,KAAKyyF,gBAAa3+E,CACpB,CAEA46C,IAAAA,CAAK2f,EAAWruC,EAAO,IACrB,MAAMkzD,EAAO7kB,EAAU6kB,OAAS7kB,EAAU6kB,KAAO,CAAC,GAE5Cb,EAAUryF,KAAKsyF,SAAW,IAAIvjC,GAASC,MAAMqf,EAAUtf,SAAS9pD,MAEtEotF,EAAQ3jC,KAAK1uB,GAMb1Z,GAAQ4sE,EAAKW,eAAgBxB,EAAQ1jC,WAErC3uD,KAAKyyF,WAAa,CAChBF,OAAQW,EAAKX,OACbrjF,MAAOgkF,EAAKhkF,MACZsjF,WAAYU,EAAKV,YAGnB5sC,MAAM8I,KAAK2f,GAEXruE,KAAK4zF,YAAc5zD,EAAK8zD,UAC1B,CAOAjsD,KAAAA,CAAMgT,EAAKn8C,GACT,YAAYoV,IAAR+mC,EACK,KAEFhT,GAAM7nC,KAAM66C,EACrB,CAEA8Z,YAAAA,GACE/O,MAAM+O,eACN30D,KAAKnC,OAAS,CACZ6B,KAAM,GACNo/C,OAAQ,GACRlH,IAAK,GAET,CAEAomB,mBAAAA,GACE,MAAMlwD,EAAU9N,KAAK8N,QACfukF,EAAUryF,KAAKsyF,SACfxG,EAAOh+E,EAAQolF,KAAKpH,MAAQ,MAElC,IAAI,IAAC/5E,EAAA,IAAKD,EAAA,WAAK2d,EAAA,WAAYC,GAAc1vB,KAAK2vB,gBAK9C,SAASokE,EAAal9D,GACfpH,GAAejG,MAAMqN,EAAO9kB,OAC/BA,EAAM9C,KAAK8C,IAAIA,EAAK8kB,EAAO9kB,MAExB2d,GAAelG,MAAMqN,EAAO/kB,OAC/BA,EAAM7C,KAAK6C,IAAIA,EAAK+kB,EAAO/kB,KAE/B,CAGK2d,GAAeC,IAElBqkE,EAAa/zF,KAAKg0F,mBAIK,UAAnBlmF,EAAQ+oB,QAA+C,WAAzB/oB,EAAQ4nB,MAAMhQ,QAC9CquE,EAAa/zF,KAAKw/C,WAAU,KAIhCztC,EAAMmS,GAASnS,KAASyX,MAAMzX,GAAOA,GAAOsgF,EAAQxjC,QAAQnpD,KAAKwuC,MAAO43C,GACxEh6E,EAAMoS,GAASpS,KAAS0X,MAAM1X,GAAOA,GAAOugF,EAAQvjC,MAAMppD,KAAKwuC,MAAO43C,GAAQ,EAG9E9rF,KAAK+R,IAAM9C,KAAK8C,IAAIA,EAAKD,EAAM,GAC/B9R,KAAK8R,IAAM7C,KAAK6C,IAAIC,EAAM,EAAGD,EAC/B,CAKAkiF,eAAAA,GACE,MAAMltD,EAAM9mC,KAAKi0F,qBACjB,IAAIliF,EAAMvM,OAAOuiB,kBACbjW,EAAMtM,OAAO4zC,kBAMjB,OAJItS,EAAIpgC,SACNqL,EAAM+0B,EAAI,GACVh1B,EAAMg1B,EAAIA,EAAIpgC,OAAS,IAElB,CAACqL,MAAKD,MACf,CAKAqsD,UAAAA,GACE,MAAMrwD,EAAU9N,KAAK8N,QACfomF,EAAWpmF,EAAQolF,KACnBh6B,EAAWprD,EAAQ4nB,MACnBy9D,EAAiC,WAApBj6B,EAASxzC,OAAsB1lB,KAAKi0F,qBAAuBj0F,KAAKm0F,YAE5D,UAAnBrmF,EAAQ+oB,QAAsBs8D,EAAWzsF,SAC3C1G,KAAK+R,IAAM/R,KAAK48D,UAAYu2B,EAAW,GACvCnzF,KAAK8R,IAAM9R,KAAK28D,UAAYw2B,EAAWA,EAAWzsF,OAAS,IAG7D,MAAMqL,EAAM/R,KAAK+R,IACXD,EAAM9R,KAAK8R,IAEX4jB,EAAQrJ,GAAe8mE,EAAYphF,EAAKD,GAgB9C,OAXA9R,KAAKyzF,MAAQS,EAASpI,OAAS5yB,EAASlhC,SACpC06D,GAA0BwB,EAASvB,QAAS3yF,KAAK+R,IAAK/R,KAAK8R,IAAK9R,KAAKo0F,kBAAkBriF,IACvFghF,GAA2B/yF,KAAM01B,EAAMhvB,OAAQwtF,EAASvB,QAAS3yF,KAAK+R,IAAK/R,KAAK8R,MACpF9R,KAAK0zF,WAAcx6B,EAAS9gC,MAAMohC,SAA0B,SAAfx5D,KAAKyzF,MAC9CT,GAAmBhzF,KAAKyzF,YADyC3/E,EAErE9T,KAAKq0F,YAAYlB,GAEbrlF,EAAQoX,SACVwQ,EAAMxQ,UAGDquE,GAAoBvzF,KAAM01B,EAAO11B,KAAK0zF,WAC/C,CAEAh1B,aAAAA,GAGM1+D,KAAK8N,QAAQwmF,qBACft0F,KAAKq0F,YAAYr0F,KAAK01B,MAAM7gB,IAAI2/B,IAASA,EAAK1vC,OAElD,CAUAuvF,WAAAA,CAAYlB,EAAa,IACvB,IAEIx5B,EAAOztC,EAFP5lB,EAAQ,EACR4kB,EAAM,EAGNlrB,KAAK8N,QAAQ6oB,QAAUw8D,EAAWzsF,SACpCizD,EAAQ35D,KAAKu0F,mBAAmBpB,EAAW,IAEzC7sF,EADwB,IAAtB6sF,EAAWzsF,OACL,EAAIizD,GAEH35D,KAAKu0F,mBAAmBpB,EAAW,IAAMx5B,GAAS,EAE7DztC,EAAOlsB,KAAKu0F,mBAAmBpB,EAAWA,EAAWzsF,OAAS,IAE5DwkB,EADwB,IAAtBioE,EAAWzsF,OACPwlB,GAECA,EAAOlsB,KAAKu0F,mBAAmBpB,EAAWA,EAAWzsF,OAAS,KAAO,GAGhF,MAAMo8D,EAAQqwB,EAAWzsF,OAAS,EAAI,GAAM,IAC5CJ,EAAQklB,GAAYllB,EAAO,EAAGw8D,GAC9B53C,EAAMM,GAAYN,EAAK,EAAG43C,GAE1B9iE,KAAK2zF,SAAW,CAACrtF,QAAO4kB,MAAKoqB,OAAQ,GAAKhvC,EAAQ,EAAI4kB,GACxD,CASAipE,SAAAA,GACE,MAAM9B,EAAUryF,KAAKsyF,SACfvgF,EAAM/R,KAAK+R,IACXD,EAAM9R,KAAK8R,IACXhE,EAAU9N,KAAK8N,QACfomF,EAAWpmF,EAAQolF,KAEnB/6D,EAAQ+7D,EAASpI,MAAQ4G,GAA0BwB,EAASvB,QAAS5gF,EAAKD,EAAK9R,KAAKo0F,kBAAkBriF,IACtGk7E,EAAW3oE,GAAexW,EAAQ4nB,MAAMu3D,SAAU,GAClD/oF,EAAoB,SAAVi0B,GAAmB+7D,EAAS1B,WACtCgC,EAAajrE,GAASrlB,KAAwB,IAAZA,EAClCwxB,EAAQ,CAAC,EACf,IACIw9D,EAAM7kF,EADNsrD,EAAQ5nD,EAYZ,GARIyiF,IACF76B,GAAS04B,EAAQxjC,QAAQ8K,EAAO,UAAWz1D,IAI7Cy1D,GAAS04B,EAAQxjC,QAAQ8K,EAAO66B,EAAa,MAAQr8D,GAGjDk6D,EAAQzjC,KAAK98C,EAAKC,EAAKomB,GAAS,IAAS80D,EAC3C,MAAM,IAAIvmD,MAAM30B,EAAM,QAAUD,EAAM,uCAAyCm7E,EAAW,IAAM90D,GAGlG,MAAMg7D,EAAsC,SAAzBrlF,EAAQ4nB,MAAMhQ,QAAqB1lB,KAAKy0F,oBAC3D,IAAKvB,EAAOv5B,EAAOtrD,EAAQ,EAAG6kF,EAAOphF,EAAKohF,GAAQb,EAAQ/wF,IAAI4xF,EAAMjG,EAAU90D,GAAQ9pB,IACpF4kF,GAAQv9D,EAAOw9D,EAAMC,GAQvB,OALID,IAASphF,GAA0B,UAAnBhE,EAAQ+oB,QAAgC,IAAVxoB,GAChD4kF,GAAQv9D,EAAOw9D,EAAMC,GAIhBnlF,OAAOC,KAAKynB,GAAOxM,KAAKkpE,IAAQv9E,IAAIa,IAAMA,EACnD,CAMAsqC,gBAAAA,CAAiBl7C,GACf,MAAMutF,EAAUryF,KAAKsyF,SACf4B,EAAWl0F,KAAK8N,QAAQolF,KAE9B,OAAIgB,EAASQ,cACJrC,EAAQ/8D,OAAOxwB,EAAOovF,EAASQ,eAEjCrC,EAAQ/8D,OAAOxwB,EAAOovF,EAASL,eAAec,SACvD,CAOAr/D,MAAAA,CAAOxwB,EAAOwwB,GACZ,MAAMxnB,EAAU9N,KAAK8N,QACf6gD,EAAU7gD,EAAQolF,KAAKW,eACvB/H,EAAO9rF,KAAKyzF,MACZmB,EAAMt/D,GAAUq5B,EAAQm9B,GAC9B,OAAO9rF,KAAKsyF,SAASh9D,OAAOxwB,EAAO8vF,EACrC,CAWAC,mBAAAA,CAAoB3B,EAAMx0F,EAAOg3B,EAAOJ,GACtC,MAAMxnB,EAAU9N,KAAK8N,QACfknB,EAAYlnB,EAAQ4nB,MAAM9Q,SAEhC,GAAIoQ,EACF,OAAOpQ,GAAKoQ,EAAW,CAACk+D,EAAMx0F,EAAOg3B,GAAQ11B,MAG/C,MAAM2uD,EAAU7gD,EAAQolF,KAAKW,eACvB/H,EAAO9rF,KAAKyzF,MACZH,EAAYtzF,KAAK0zF,WACjBoB,EAAchJ,GAAQn9B,EAAQm9B,GAC9BiJ,EAAczB,GAAa3kC,EAAQ2kC,GACnC9+C,EAAO9e,EAAMh3B,GACb05B,EAAQk7D,GAAayB,GAAevgD,GAAQA,EAAKpc,MAEvD,OAAOp4B,KAAKsyF,SAASh9D,OAAO49D,EAAM59D,IAAW8C,EAAQ28D,EAAcD,GACrE,CAKA11B,kBAAAA,CAAmB1pC,GACjB,IAAIlhB,EAAG8Q,EAAMkvB,EAEb,IAAKhgC,EAAI,EAAG8Q,EAAOoQ,EAAMhvB,OAAQ8N,EAAI8Q,IAAQ9Q,EAC3CggC,EAAO9e,EAAMlhB,GACbggC,EAAKlnC,MAAQtN,KAAK60F,oBAAoBrgD,EAAK1vC,MAAO0P,EAAGkhB,EAEzD,CAMA6+D,kBAAAA,CAAmBzvF,GACjB,OAAiB,OAAVA,EAAiBy6C,KAAOz6C,EAAQ9E,KAAK+R,MAAQ/R,KAAK8R,IAAM9R,KAAK+R,IACtE,CAMA6d,gBAAAA,CAAiB9qB,GACf,MAAMkwF,EAAUh1F,KAAK2zF,SACf9nD,EAAM7rC,KAAKu0F,mBAAmBzvF,GACpC,OAAO9E,KAAK0nD,oBAAoBstC,EAAQ1uF,MAAQulC,GAAOmpD,EAAQ1/C,OACjE,CAMAsS,gBAAAA,CAAiB7qB,GACf,MAAMi4D,EAAUh1F,KAAK2zF,SACf9nD,EAAM7rC,KAAK0hE,mBAAmB3kC,GAASi4D,EAAQ1/C,OAAS0/C,EAAQ9pE,IACtE,OAAOlrB,KAAK+R,IAAM85B,GAAO7rC,KAAK8R,IAAM9R,KAAK+R,IAC3C,CAOAkjF,aAAAA,CAAc3nF,GACZ,MAAM4nF,EAAYl1F,KAAK8N,QAAQ4nB,MACzBy/D,EAAiBn1F,KAAKk6B,IAAIiC,YAAY7uB,GAAOrN,MAC7CwqB,EAAQX,GAAU9pB,KAAK4kD,eAAiBswC,EAAUt9D,YAAcs9D,EAAUv9D,aAC1Ey9D,EAAcnmF,KAAK6iB,IAAIrH,GACvB4qE,EAAcpmF,KAAK4hB,IAAIpG,GACvB6qE,EAAet1F,KAAKshE,wBAAwB,GAAGj0D,KAErD,MAAO,CACLiH,EAAI6gF,EAAiBC,EAAgBE,EAAeD,EACpDxjF,EAAIsjF,EAAiBE,EAAgBC,EAAeF,EAExD,CAOAhB,iBAAAA,CAAkBmB,GAChB,MAAMrB,EAAWl0F,KAAK8N,QAAQolF,KACxBW,EAAiBK,EAASL,eAG1Bv+D,EAASu+D,EAAeK,EAASpI,OAAS+H,EAAejC,YACzD4D,EAAex1F,KAAK60F,oBAAoBU,EAAa,EAAGhC,GAAoBvzF,KAAM,CAACu1F,GAAcv1F,KAAK0zF,YAAap+D,GACnHjoB,EAAOrN,KAAKi1F,cAAcO,GAG1B5C,EAAW3jF,KAAK2Z,MAAM5oB,KAAK4kD,eAAiB5kD,KAAKC,MAAQoN,EAAKiH,EAAItU,KAAKu9B,OAASlwB,EAAKwE,GAAK,EAChG,OAAO+gF,EAAW,EAAIA,EAAW,CACnC,CAKA6B,iBAAAA,GACE,IACIjgF,EAAG8Q,EADH6tE,EAAanzF,KAAKnC,OAAO6B,MAAQ,GAGrC,GAAIyzF,EAAWzsF,OACb,OAAOysF,EAGT,MAAM/1B,EAAQp9D,KAAK45C,0BAEnB,GAAI55C,KAAK4zF,aAAex2B,EAAM12D,OAC5B,OAAQ1G,KAAKnC,OAAO6B,KAAO09D,EAAM,GAAGtjB,WAAW+F,mBAAmB7/C,MAGpE,IAAKwU,EAAI,EAAG8Q,EAAO83C,EAAM12D,OAAQ8N,EAAI8Q,IAAQ9Q,EAC3C2+E,EAAaA,EAAWrwC,OAAOsa,EAAM5oD,GAAGslC,WAAW+F,mBAAmB7/C,OAGxE,OAAQA,KAAKnC,OAAO6B,KAAOM,KAAKiwC,UAAUkjD,EAC5C,CAKAc,kBAAAA,GACE,MAAMd,EAAanzF,KAAKnC,OAAOihD,QAAU,GACzC,IAAItqC,EAAG8Q,EAEP,GAAI6tE,EAAWzsF,OACb,OAAOysF,EAGT,MAAMr0C,EAAS9+C,KAAK++C,YACpB,IAAKvqC,EAAI,EAAG8Q,EAAOw5B,EAAOp4C,OAAQ8N,EAAI8Q,IAAQ9Q,EAC5C2+E,EAAWnsE,KAAK6gB,GAAM7nC,KAAM8+C,EAAOtqC,KAGrC,OAAQxU,KAAKnC,OAAOihD,OAAS9+C,KAAK4zF,YAAcT,EAAanzF,KAAKiwC,UAAUkjD,EAC9E,CAMAljD,SAAAA,CAAU3jB,GAER,OAAOiB,GAAajB,EAAOpD,KAAKkpE,IAClC,ECtpBF,SAAS/wE,GAAYuK,EAAOzI,EAAK+B,GAC/B,IAEIuwE,EAAYC,EAAYC,EAAYC,EAFpC5pE,EAAK,EACLD,EAAKH,EAAMllB,OAAS,EAEpBwe,GACE/B,GAAOyI,EAAMI,GAAI6f,KAAO1oB,GAAOyI,EAAMG,GAAI8f,OACzC7f,KAAID,MAAME,GAAaL,EAAO,MAAOzI,MAEvC0oB,IAAK4pD,EAAYvC,KAAMyC,GAAc/pE,EAAMI,MAC3C6f,IAAK6pD,EAAYxC,KAAM0C,GAAchqE,EAAMG,MAEzC5I,GAAOyI,EAAMI,GAAIknE,MAAQ/vE,GAAOyI,EAAMG,GAAImnE,QAC1ClnE,KAAID,MAAME,GAAaL,EAAO,OAAQzI,MAExC+vE,KAAMuC,EAAY5pD,IAAK8pD,GAAc/pE,EAAMI,MAC3CknE,KAAMwC,EAAY7pD,IAAK+pD,GAAchqE,EAAMG,KAG/C,MAAM8pE,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAexyE,EAAMsyE,GAAcI,EAAOF,CACrF,EDmoBAjwC,EAAAA,GAAAA,GA5dqB8tC,GAAkB,KAEzB,SAAO9tC,EAAAA,GAAAA,GAFA8tC,GAAkB,WAOnB,CAQhB38D,OAAQ,OAERk4B,SAAU,CAAC,EACXmkC,KAAM,CACJX,QAAQ,EACRzG,MAAM,EACN58E,OAAO,EACPsjF,YAAY,EACZG,QAAS,cACTkB,eAAgB,CAAC,GAEnBn+D,MAAO,CASLhQ,OAAQ,OAERd,UAAU,EAEVwT,MAAO,CACLohC,SAAS,MC7MjB,MAAMs8B,WAAwBtC,GAY5BpxE,WAAAA,CAAY/iB,GACVumD,MAAMvmD,GAGNW,KAAK+1F,OAAS,GAEd/1F,KAAKg2F,aAAUliF,EAEf9T,KAAKi2F,iBAAcniF,CACrB,CAKAugF,WAAAA,GACE,MAAMlB,EAAanzF,KAAKk2F,yBAClBtqE,EAAQ5rB,KAAK+1F,OAAS/1F,KAAKm2F,iBAAiBhD,GAClDnzF,KAAKg2F,QAAU30E,GAAYuK,EAAO5rB,KAAK+R,KACvC/R,KAAKi2F,YAAc50E,GAAYuK,EAAO5rB,KAAK8R,KAAO9R,KAAKg2F,QACvDpwC,MAAMyuC,YAAYlB,EACpB,CAaAgD,gBAAAA,CAAiBhD,GACf,MAAM,IAACphF,EAAG,IAAED,GAAO9R,KACbwtB,EAAQ,GACR5B,EAAQ,GACd,IAAIpX,EAAG8Q,EAAMilB,EAAMyY,EAAM1a,EAEzB,IAAK9zB,EAAI,EAAG8Q,EAAO6tE,EAAWzsF,OAAQ8N,EAAI8Q,IAAQ9Q,EAChDwuC,EAAOmwC,EAAW3+E,GACdwuC,GAAQjxC,GAAOixC,GAAQlxC,GACzB0b,EAAMxG,KAAKg8B,GAIf,GAAIx1B,EAAM9mB,OAAS,EAEjB,MAAO,CACL,CAACwsF,KAAMnhF,EAAK85B,IAAK,GACjB,CAACqnD,KAAMphF,EAAK+5B,IAAK,IAIrB,IAAKr3B,EAAI,EAAG8Q,EAAOkI,EAAM9mB,OAAQ8N,EAAI8Q,IAAQ9Q,EAC3C8zB,EAAO9a,EAAMhZ,EAAI,GACjB+1B,EAAO/c,EAAMhZ,EAAI,GACjBwuC,EAAOx1B,EAAMhZ,GAGTvF,KAAKC,OAAOo5B,EAAOiC,GAAQ,KAAOyY,GACpCp3B,EAAM5E,KAAK,CAACksE,KAAMlwC,EAAMnX,IAAKr3B,GAAK8Q,EAAO,KAG7C,OAAOsG,CACT,CAQAuoE,SAAAA,GACE,MAAMpiF,EAAM/R,KAAK+R,IACXD,EAAM9R,KAAK8R,IACjB,IAAIqhF,EAAavtC,MAAM6uC,oBAOvB,OANKtB,EAAW58D,SAASxkB,IAASohF,EAAWzsF,QAC3CysF,EAAW7lE,OAAO,EAAG,EAAGvb,GAErBohF,EAAW58D,SAASzkB,IAA8B,IAAtBqhF,EAAWzsF,QAC1CysF,EAAWnsE,KAAKlV,GAEXqhF,EAAWjqE,KAAK,CAACvW,EAAGC,IAAMD,EAAIC,EACvC,CAOAsjF,sBAAAA,GACE,IAAI/C,EAAanzF,KAAKnC,OAAO+5C,KAAO,GAEpC,GAAIu7C,EAAWzsF,OACb,OAAOysF,EAGT,MAAMzzF,EAAOM,KAAKy0F,oBACZnnF,EAAQtN,KAAKi0F,qBAUnB,OANEd,EAHEzzF,EAAKgH,QAAU4G,EAAM5G,OAGV1G,KAAKiwC,UAAUvwC,EAAKojD,OAAOx1C,IAE3B5N,EAAKgH,OAAShH,EAAO4N,EAEpC6lF,EAAanzF,KAAKnC,OAAO+5C,IAAMu7C,EAExBA,CACT,CAMAoB,kBAAAA,CAAmBzvF,GACjB,OAAQuc,GAAYrhB,KAAK+1F,OAAQjxF,GAAS9E,KAAKg2F,SAAWh2F,KAAKi2F,WACjE,CAMAruC,gBAAAA,CAAiB7qB,GACf,MAAMi4D,EAAUh1F,KAAK2zF,SACflyB,EAAUzhE,KAAK0hE,mBAAmB3kC,GAASi4D,EAAQ1/C,OAAS0/C,EAAQ9pE,IAC1E,OAAO7J,GAAYrhB,KAAK+1F,OAAQt0B,EAAUzhE,KAAKi2F,YAAcj2F,KAAKg2F,SAAS,EAC7E,GACFtwC,EAAAA,GAAAA,GA7IMowC,GAAwB,KAEhB,eAAapwC,EAAAA,GAAAA,GAFrBowC,GAAwB,WAOVtC,GAAUngE,U,gBC/BvB,MAAM+iE,GAAc,CACzB12F,KAAM,CACJJ,KAAM0O,OACNqoF,UAAU,GAEZvoF,QAAS,CACPxO,KAAM0O,OACNxO,QAASA,KAAA,CAAQ,IAEnBq7B,QAAS,CACPv7B,KAAMyG,MACNvG,QAASA,IAAM,IAEjB82F,aAAc,CACZh3F,KAAMC,OACNC,QAAS,SAEX+2F,WAAY,CACVj3F,KAAMC,OACNC,aAASsU,IAIA0iF,GAAY,CACvBC,UAAW,CACTn3F,KAAMC,QAERm3F,gBAAiB,CACfp3F,KAAMC,SAIGo3F,GAAQ,CACnBr3F,KAAM,CACJA,KAAMC,OACN82F,UAAU,GAEZO,aAAc,CACZt3F,KAAMkG,OACNhG,QAAS,MAER42F,MACAI,ICzCQK,GACI,MAAf5pF,EAAAA,GAAQ,GACJ,CAA6B6pF,EAAcz3F,IACzC2O,OAAO8T,OAAOg1E,EAAW,CAAEC,MAAO13F,IACpC,CAA6By3F,EAAcz3F,IACzC2O,OAAO8T,OAAOg1E,EAAWz3F,GAE1B,SAAS23F,GAAgBx0E,GAC9B,OAAOy0E,EAAAA,GAAAA,IAAQz0E,IAAO00E,EAAAA,GAAAA,IAAM10E,GAAOA,CACrC,CAEO,SAAS20E,GAA6B30E,GAAQ,IAAA1R,EAAAuxC,UAAA37C,OAAA,YAAA27C,UAAA,GAAAA,UAAA,GAAM7/B,EACzD,OAAOy0E,EAAAA,GAAAA,IAAQnmF,GAAO,IAAIyzB,MAAM/hB,EAAK,IAAMA,CAC7C,CAEO,SAAS40E,GAIdzhE,EAAoC0hE,GACpC,MAAMvpF,EAAU6nB,EAAM7nB,QAElBA,GAAWupF,GACbrpF,OAAO8T,OAAOhU,EAASupF,EAE3B,CAEO,SAASC,GAKdC,EACAC,GAEAD,EAAYz4C,OAAS04C,CACvB,CAEO,SAASC,GAKdF,EACAG,EACApB,GAEA,MAAMqB,EAA8C,GAEpDJ,EAAYj+D,SAAWo+D,EAAa7iF,IACjC+iF,IAEC,MAAMC,EAAiBN,EAAYj+D,SAASqtB,KACzCp3B,GACCA,EAAQ+mE,KAAkBsB,EAAYtB,IAI1C,OACGuB,GACAD,EAAYl4F,OACbi4F,EAAcphE,SAASshE,IAKzBF,EAAc3wE,KAAK6wE,GAEnB7pF,OAAO8T,OAAO+1E,EAAgBD,GAEvBC,GAPE,IAAKD,IAUpB,CAEO,SAASE,GAIdp4F,EAAuC42F,GACvC,MAAMyB,EAA4C,CAChDj5C,OAAQ,GACRxlB,SAAU,IAMZ,OAHAg+D,GAAUS,EAAUr4F,EAAKo/C,QACzB24C,GAAYM,EAAUr4F,EAAK45B,SAAUg9D,GAE9ByB,CACT,CC3EO,MAAMtrB,IAAQurB,EAAAA,EAAAA,IAAgB,CACnC34F,MAAOs3F,GACPsB,KAAAA,CAAM54F,EAAO64F,GAAA,WAAEC,EAAM,MAAEC,GAAVF,EACX,MAAMG,GAAYj6F,EAAAA,GAAAA,IAA8B,MAC1Ck6F,GAAWC,EAAAA,GAAAA,IAA2B,MAE5CJ,EAAO,CAAExiE,MAAO2iE,IAEhB,MAAME,EAAcA,KAClB,IAAKH,EAAUvzF,MAAO,OAEtB,MAAM,KAAExF,EAAI,KAAEI,EAAI,QAAEoO,EAAO,QAAE+sB,EAAO,aAAEy7D,GAAiBj3F,EACjDo5F,EAAaX,GAAUp4F,EAAM42F,GAC7BoC,EAAcvB,GAAWsB,EAAY/4F,GAE3C44F,EAASxzF,MAAQ,IAAI6zF,GAAQN,EAAUvzF,MAAO,CAC5CxF,OACAI,KAAMg5F,EACN5qF,QAAS,IAAKA,GACd+sB,aAIE+9D,EAAeA,KACnB,MAAMjjE,GAAQuhE,EAAAA,GAAAA,IAAMoB,EAASxzF,OAEzB6wB,IACEt2B,EAAMu3F,aAAe,EACvBxoE,WAAW,KACTuH,EAAMq7C,UACNsnB,EAASxzF,MAAQ,MAChBzF,EAAMu3F,eAETjhE,EAAMq7C,UACNsnB,EAASxzF,MAAQ,QAKjBsxC,EAAUzgB,IACdA,EAAMygB,OAAO/2C,EAAMk3F,aAyDrB,OAtDAsC,EAAAA,EAAAA,IAAUL,IAEVM,EAAAA,EAAAA,IAAYF,IAEZ14F,EAAAA,EAAAA,IACE,CAAC,IAAMb,EAAMyO,QAAS,IAAMzO,EAAMK,MAClC,CAGKw4F,EAAAa,KAFH,IAACC,EAAkBC,GACnBf,GAACgB,EAAkBC,GAAcJ,EAEjC,MAAMpjE,GAAQuhE,EAAAA,GAAAA,IAAMoB,EAASxzF,OAE7B,IAAK6wB,EACH,OAGF,IAAIyjE,GAAe,EAEnB,GAAIJ,EAAkB,CACpB,MAAM3B,EAAcL,GAAagC,GAC3BK,EAAcrC,GAAakC,GAE7B7B,GAAeA,IAAgBgC,IACjCjC,GAAWzhE,EAAO0hE,GAClB+B,GAAe,E,CAInB,GAAIH,EAAe,CACjB,MAAMzB,EAAaR,GAAaiC,EAAcn6C,QACxCw6C,EAAatC,GAAamC,EAAcr6C,QACxC44C,EAAeV,GAAaiC,EAAc3/D,UAC1CigE,EAAevC,GAAamC,EAAc7/D,UAE5Ck+D,IAAe8B,IACjBhC,GAAU3hE,EAAMihB,OAAOl3C,KAAM83F,GAC7B4B,GAAe,GAGb1B,GAAgBA,IAAiB6B,IACnC9B,GAAY9hE,EAAMihB,OAAOl3C,KAAMg4F,EAAcr4F,EAAMi3F,cACnD8C,GAAe,E,CAIfA,IACFI,EAAAA,EAAAA,IAAS,KACPpjD,EAAOzgB,MAIb,CAAE8jE,MAAM,IAGH,KACE5nF,EAAAA,EAAAA,GACL,SACA,CACE6nF,KAAM,MACN,aAAcr6F,EAAMo3F,UACpB,mBAAoBp3F,EAAMq3F,gBAC1Bt4F,IAAKi6F,GAEP,EAACxmF,EAAAA,EAAAA,GAAE,IAAK,CAAC,EAAG,CAACumF,EAAM54F,QAAU44F,EAAM54F,UAAY,MAGrD,IClHK,SAASm6F,GAKdr6F,EACAs6F,GAIA,OAFAjB,GAAQ3zB,SAAS40B,IAEV5B,EAAAA,EAAAA,IAAgB,CACrB34F,MAAO+2F,GACP6B,KAAAA,CAAM54F,EAAO64F,G,IAAA,OAAEC,GAAFD,EACX,MAAM95F,GAAMm6F,EAAAA,GAAAA,IAA2B,MACjCsB,EAAgBvB,IACpBl6F,EAAI0G,MAAQwzF,GAAU3iE,OAKxB,OAFAwiE,EAAO,CAAExiE,MAAOv3B,IAET,KACEyT,EAAAA,EAAAA,GACL46D,GACAoqB,GACE,CACEz4F,IAAKy7F,GAEP,CACEv6F,UACGD,IAKb,GAEJ,C,MAWay6F,GAA2BH,GACtC,WACAjwC,IAGWqwC,GAAuBJ,GAAiB,OAAQvtC,I,wEC1DtD,MAAM4tC,WAA4BtzD,MACvCtkB,WAAAA,CAAY5S,EAASyqF,EAAMpqF,GAAc,EAAOD,EAAa,IAC3Dg2C,MAAMp2C,GACNxP,KAAKZ,KAAO,sBACZY,KAAKi6F,KAAOA,EACZj6F,KAAK6P,YAAcA,EACnB7P,KAAK4P,WAAaA,CACpB,EAOF,MAAMsqF,GAAiB,CACrB,IAAK,IAAM,IAAIF,GACb,aACA,eACA,EACA,cAEF,IAAK,IAAM,IAAIA,GACb,aACA,aACA,EACA,cAEF,IAAMG,GAAY,IAAIH,GACpB,WAAWG,IACX,gBACA,EACA,cAEF,IAAK,IAAM,IAAIH,GACb,UACA,gBACA,EACA,sBAEFI,QAASA,IAAM,IAAIJ,GACjB,SACA,iBACA,EACA,cAEFK,MAAOA,IAAM,IAAIL,GACf,QACA,WACA,EACA,KAUJ,SAASM,GAAY/wB,EAAO4wB,EAAU,IAEpC,GAAmB,eAAf5wB,EAAMnqE,KACR,OAAO86F,GAAeG,QAIxB,GAAI9wB,aAAiBgxB,UAAahxB,GAAiC,kBAAjBA,EAAM16D,OAAsB,CAC5E,MAAMhI,EAAUqzF,GAAe3wB,EAAM16D,QACrC,OAAIhI,EACKA,EAAQszF,GAEV,IAAIH,GACT,SAASzwB,EAAM16D,SACf,cACA,EACA,QAEJ,CAGA,OAAI06D,aAAiBixB,WAAajxB,EAAM/5D,QAAQ+mB,SAAS,SAChD2jE,GAAeE,UAIjB,IAAIJ,GACTzwB,EAAM/5D,SAAW,OACjB,iBACA,EACA,QAEJ,CAOA,MAAMirF,GAQJr4E,WAAAA,CAAYtU,EAAU,CAAC,GACrB9N,KAAK06F,UAAY5sF,EAAQ4sF,WAAa,IACtC16F,KAAK8rE,WAAah+D,EAAQg+D,YAAc,MAAS,GACjD9rE,KAAKiR,QAAUnD,EAAQmD,SAAW,MAAS,GAC3CjR,KAAK26F,gBAAkB,IACzB,CAUA,qBAAMC,CAAgBC,GAAe,GAEnC76F,KAAK26F,gBAAkB,IAAIG,gBAC3B,MAAMC,EAAa,GACnB,IAAIva,EAAS,KACTwa,EAAe,EACfC,EAAa,EAEjB,IACE,EAAG,CAED,GAAIj7F,KAAK26F,gBAAgBO,OAAOC,QAC9B,MAIF,MAAMC,QAAiBp7F,KAAKq7F,WAAW7a,EAAQqa,GAG/CE,EAAW/zE,QAAQo0E,EAASE,SAC5B9a,EAAS4a,EAASG,WAClBP,GAAgBI,EAASE,QAAQ50F,OACjCu0F,IAGAj7F,KAAK8rE,WAAW,CACd0vB,MAAO,WACPnsF,QAAS2rF,EACTC,WAAYA,EACZzrF,QAAS,OAAOwrF,YAGpB,OAASxa,IAAWxgF,KAAK26F,gBAAgBO,OAAOC,SAGhD,GAAIn7F,KAAK26F,gBAAgBO,OAAOC,QAC9B,MAAMjB,GAAeG,QAGvB,OAAOU,CACT,CAAE,MAAOxxB,GAEP,MAAMkyB,EAAalyB,aAAiBywB,GAChCzwB,EACA+wB,GAAY/wB,GAEhB,MADAvpE,KAAKiR,QAAQwqF,GACPA,CACR,CACF,CAUA,gBAAMJ,CAAW7a,EAAQqa,GAEvB,MAAM/oC,EAAS,IAAI4pC,gBACflb,GACF1uB,EAAOrkC,IAAI,SAAU+yD,GAEnBqa,GACF/oC,EAAOrkC,IAAI,eAAgB,QAE7BqkC,EAAOrkC,IAAI,QAASluB,OAAOS,KAAK06F,YAEhC,IAEE,MAAMU,QAAiBO,EAAAA,GAAAA,GACrB,0BAA0B7pC,IAC1B,CAAEopC,OAAQl7F,KAAK26F,gBAAgBO,SAIjC,IAAKE,EAAS56E,GAAI,CAChB,IAAIo7E,EAAe,GACnB,IACE,MAAMC,QAAkBT,EAASU,OACjCF,EAAeC,EAAUtyB,OAAS,EACpC,CAAE,MACA,CAEF,MAAM+wB,GAAYc,EAAUQ,EAC9B,CAGA,MAAMl8F,QAAa07F,EAASU,OAG5B,IAAKp8F,EAAKq8F,QACR,MAAM,IAAI/B,GACRt6F,EAAK6pE,OAAS,OACd,aACA,EACA,SAIJ,MAAO,CACL+xB,QAAS57F,EAAK47F,SAAW,GACzBC,WAAY77F,EAAK67F,YAAc,KAC/BS,eAAgBt8F,EAAKs8F,gBAAkB,EAE3C,CAAE,MAAOzyB,GAEP,GAAIA,aAAiBywB,GACnB,MAAMzwB,EAGR,MAAM+wB,GAAY/wB,EACpB,CACF,CAMA0yB,KAAAA,GACMj8F,KAAK26F,iBACP36F,KAAK26F,gBAAgBsB,OAEzB,CAMAC,SAAAA,GACE,QAAOl8F,KAAK26F,iBAAkB36F,KAAK26F,gBAAgBO,OAAOC,OAC5D,CAMAv9C,KAAAA,GACE59C,KAAK26F,gBAAkB,IACzB,EAGF,UCvQA,MAAMwB,GAUJ/5E,WAAAA,CAAYtU,EAAU,CAAC,GACrB9N,KAAKo8F,UAAYtuF,EAAQsuF,WAAa,KACtCp8F,KAAKq8F,WAAavuF,EAAQuuF,YAAc,EACxCr8F,KAAKs8F,WAAaxuF,EAAQwuF,YAAc,IACxCt8F,KAAK8rE,WAAah+D,EAAQg+D,YAAc,MAAS,GACjD9rE,KAAKiR,QAAUnD,EAAQmD,SAAW,MAAS,GAC3CjR,KAAKu8F,UAAYv8F,KAAKw8F,oBACtBx8F,KAAKm7F,SAAU,CACjB,CAMA,iBAAMsB,GACJ,IACE,MAAMrB,QAAiBO,EAAAA,GAAAA,GAAc,kCACrC,IAAKP,EAAS56E,GACZ,MAAM,IAAIkmB,MAAM,UAElB,MAAM1d,QAAeoyE,EAASU,OAC9B,GAAI9yE,EAAO+yE,QACT,MAAO,CACLK,UAAWpzE,EAAOozE,WAAa,IAC/BM,aAAc1zE,EAAO0zE,cAAgB,WAGzC,MAAM,IAAIh2D,MAAM1d,EAAOugD,OAAS,SAClC,CAAE,MAAOA,GAGP,OADAxmC,QAAQC,KAAK,+CAAgDumC,GACtD,CAAE6yB,UAAW,IAAKM,aAAc,UACzC,CACF,CAeA,aAAMC,GACJ38F,KAAKm7F,SAAU,EAEf,IAEE,IAAKn7F,KAAKo8F,UAAW,CACnB,MAAMxlD,QAAe52C,KAAKy8F,cAC1Bz8F,KAAKo8F,UAAYxlD,EAAOwlD,SAC1B,CAGAp8F,KAAK8rE,WAAW,CACd0vB,MAAO,WACPhsF,QAAS,YACTH,QAAS,IAGX,MAAMutF,EAAY,IAAInC,GAAe,CACnC3uB,WAAa/oD,GAAM/iB,KAAK8rE,WAAW,IAAK/oD,EAAGy4E,MAAO,aAClDvqF,QAAU8B,GAAM/S,KAAKiR,QAAQ8B,KAGzBuoF,QAAgBsB,EAAUhC,iBAAgB,GAEhD,GAAI56F,KAAKm7F,QACP,MAAM,IAAInB,GAAoB,QAAS,WAAW,EAAO,IAa3D,GATAh6F,KAAK8rE,WAAW,CACd0vB,MAAO,UACPhsF,QAAS,UACTH,QAAS,EACTC,MAAOgsF,EAAQ50F,SAGjB1G,KAAK68F,0BAA0BvB,GAE3Bt7F,KAAKm7F,QACP,MAAM,IAAInB,GAAoB,QAAS,WAAW,EAAO,IAI3D,MAAM8C,EAAS98F,KAAK+8F,gBAAgBzB,GAEpC,IAAK,IAAI9mF,EAAI,EAAGA,EAAIsoF,EAAOp2F,OAAQ8N,IAAK,CACtC,GAAIxU,KAAKm7F,QACP,MAAM,IAAInB,GAAoB,QAAS,WAAW,EAAO,UAIrDh6F,KAAKg9F,qBAAqBF,EAAOtoF,GAAIA,GAE3CxU,KAAK8rE,WAAW,CACd0vB,MAAO,YACPnsF,QAASmF,EAAI,EACblF,MAAOwtF,EAAOp2F,OACd8I,QAAS,UAAUgF,EAAI,KAAKsoF,EAAOp2F,aAEvC,CAmBA,OAhBA1G,KAAK8rE,WAAW,CACd0vB,MAAO,aACPhsF,QAAS,YACTH,QAASytF,EAAOp2F,OAChB4I,MAAOwtF,EAAOp2F,eAGV1G,KAAKi9F,SAASH,EAAOp2F,OAAQ40F,EAAQ50F,QAE3C1G,KAAK8rE,WAAW,CACd0vB,MAAO,YACPhsF,QAAS,YAAY8rF,EAAQ50F,aAC7B2I,QAASisF,EAAQ50F,OACjB4I,MAAOgsF,EAAQ50F,SAGV,CAAEq1F,SAAS,EAAMpvF,WAAY2uF,EAAQ50F,OAC9C,CAAE,MAAO6iE,GACP,MAAMkyB,EAAalyB,aAAiBywB,GAChCzwB,EACA,IAAIywB,GACFzwB,EAAM/5D,SAAW,SACjB,iBACA,EACA,SAGN,MADAxP,KAAKiR,QAAQwqF,GACPA,CACR,CACF,CAOAoB,yBAAAA,CAA0BvB,GACxBA,EAAQpyE,KAAK,CAACvW,EAAGC,KACf,MAAMsqF,EAAcvqF,EAAEpB,UAAYoB,EAAEpB,SAASE,WAAc,EACrD0rF,EAAcvqF,EAAErB,UAAYqB,EAAErB,SAASE,WAAc,EAC3D,OAAO0rF,EAAaD,GAExB,CAQAH,eAAAA,CAAgBzB,GACd,MAAMwB,EAAS,GACf,IAAK,IAAItoF,EAAI,EAAGA,EAAI8mF,EAAQ50F,OAAQ8N,GAAKxU,KAAKo8F,UAC5CU,EAAO91E,KAAKs0E,EAAQt3E,MAAMxP,EAAGA,EAAIxU,KAAKo8F,YAExC,OAAOU,CACT,CAUA,0BAAME,CAAqBr5C,EAAOy5C,GAChC,IAAIC,EAEJ,IAAK,IAAIC,EAAU,EAAGA,GAAWt9F,KAAKq8F,WAAYiB,IAChD,IACE,aAAat9F,KAAKu9F,YAAY55C,EAAOy5C,EACvC,CAAE,MAAO7zB,GAIP,GAHA8zB,EAAY9zB,EAGRA,aAAiBywB,KACA,gBAAfzwB,EAAM0wB,MACS,cAAf1wB,EAAM0wB,MACS,YAAf1wB,EAAM0wB,MACR,MAAM1wB,EAKV,GAAI+zB,EAAUt9F,KAAKq8F,WAAY,CAE7B,MAAMpuE,EAAQjuB,KAAKs8F,WAAartF,KAAKmS,IAAI,EAAGk8E,EAAU,SAChDt9F,KAAKw9F,MAAMvvE,GAEjBjuB,KAAK8rE,WAAW,CACd0vB,MAAO,WACPhsF,QAAS,MAAM4tF,EAAU,gBAAgBE,KAAWt9F,KAAKq8F,iBACzDhtF,QAAS+tF,EACTE,QAASA,GAEb,CACF,CAIF,MAAMD,aAAqBrD,GACvBqD,EACA,IAAIrD,GACF,MAAMoD,EAAU,cAAcp9F,KAAKq8F,eACnC,uBACA,EACA,iBAER,CAUA,iBAAMkB,CAAY55C,EAAOy5C,GACvB,MAAMK,QAAiBz9F,KAAK09F,kBAAkB/5C,GAE9C,IACE,MAAMy3C,QAAiBO,EAAAA,GAAAA,GAAc,gCAAiC,CACpE3uE,OAAQ,OACR2wE,QAAS,CAAE,eAAgB,oBAC3Bxa,KAAMruD,KAAKC,UAAU,CACnBqoE,QAAS79F,OAAO69F,GAChBb,UAAWv8F,KAAKu8F,UAChB78F,KAAMikD,EACN85C,eAIJ,IAAKrC,EAAS56E,GAAI,CAChB,IAAIo7E,EAAe,GACnB,IACE,MAAMC,QAAkBT,EAASU,OACjCF,EAAeC,EAAUtyB,OAAS,EACpC,CAAE,MACA,CAEF,MAAMvpE,KAAK49F,gBAAgBxC,EAASvsF,OAAQ+sF,EAC9C,CAEA,MAAM5yE,QAAeoyE,EAASU,OAE9B,IAAK9yE,EAAO+yE,QACV,MAAM,IAAI/B,GACRhxE,EAAOugD,OAAS,SAChB,uBACA,EACA,SAIJ,OAAOvgD,CACT,CAAE,MAAOugD,GACP,GAAIA,aAAiBywB,GACnB,MAAMzwB,EAGR,GAAIA,aAAiBixB,WAAajxB,EAAM/5D,QAAQ+mB,SAAS,SACvD,MAAM,IAAIyjE,GACR,SACA,iBACA,EACA,cAGJ,MAAM,IAAIA,GACRzwB,EAAM/5D,SAAW,SACjB,uBACA,EACA,QAEJ,CACF,CAUA,cAAMytF,CAASY,EAAalxF,GAC1B,IACE,MAAMyuF,QAAiBO,EAAAA,GAAAA,GAAc,mCAAoC,CACvE3uE,OAAQ,OACR2wE,QAAS,CAAE,eAAgB,oBAC3Bxa,KAAMruD,KAAKC,UAAU,CACnBwnE,UAAWv8F,KAAKu8F,UAChBsB,cACAlxF,iBAIJ,IAAKyuF,EAAS56E,GAAI,CAChB,IAAIo7E,EAAe,GACnB,IACE,MAAMC,QAAkBT,EAASU,OACjCF,EAAeC,EAAUtyB,OAAS,EACpC,CAAE,MACA,CAEF,MAAMvpE,KAAK49F,gBAAgBxC,EAASvsF,OAAQ+sF,EAC9C,CAEA,MAAM5yE,QAAeoyE,EAASU,OAE9B,IAAK9yE,EAAO+yE,QACV,MAAM,IAAI/B,GACRhxE,EAAOugD,OAAS,SAChB,mBACA,EACA,SAIJ,OAAOvgD,CACT,CAAE,MAAOugD,GACP,GAAIA,aAAiBywB,GACnB,MAAMzwB,EAER,MAAM,IAAIywB,GACRzwB,EAAM/5D,SAAW,SACjB,mBACA,EACA,QAEJ,CACF,CAOAgtF,iBAAAA,GACE,MAAO,WAAW92F,KAAKwuC,SAASjlC,KAAK6uF,SAASh6E,SAAS,IAAIE,MAAM,IACnE,CAQA,uBAAM05E,CAAkBh+F,GACpB,MAAMg4B,EAAO5C,KAAKC,UAAUr1B,GACtBq+F,EAAU,IAAIC,YACdC,EAAaF,EAAQG,OAAOxmE,GAIlC,GAAsB,qBAAXymE,QAA0BA,OAAOC,OAAQ,CAClD,MAAMC,QAAmBF,OAAOC,OAAOE,OAAO,UAAWL,GACnDM,EAAYx4F,MAAMU,KAAK,IAAI+3F,WAAWH,IAC5C,OAAOE,EAAU1pF,IAAIjC,GAAKA,EAAEkR,SAAS,IAAI/e,SAAS,EAAG,MAAM4hC,KAAK,GAClE,CAGA,IAAIzzB,EAAK,WACLC,EAAK,WACT,IAAK,IAAIqB,EAAI,EAAGA,EAAIypF,EAAWv3F,OAAQ8N,IACrCtB,EAAKjE,KAAKwvF,KAAKvrF,EAAK+qF,EAAWzpF,GAAI,YAAgB,EACnDrB,EAAKlE,KAAKwvF,KAAKtrF,EAAK8qF,EAAWzpF,GAAI,YAAuB,EAE5D,OAAOtB,EAAG4Q,SAAS,IAAI/e,SAAS,EAAG,KAAOoO,EAAG2Q,SAAS,IAAI/e,SAAS,EAAG,IACxE,CAUF64F,eAAAA,CAAgB/uF,EAAQsrF,EAAU,IAChC,OAAQtrF,GACN,KAAK,IACH,OAAO,IAAImrF,GACT,aACA,eACA,EACA,cAEJ,KAAK,IACH,OAAO,IAAIA,GACT,aACA,aACA,EACA,cAEJ,KAAK,IACH,OAAO,IAAIA,GACT,WAAWG,IACX,gBACA,EACA,cAEJ,KAAK,IACH,OAAO,IAAIH,GACT,QACA,qBACA,EACA,aAEJ,KAAK,IACH,OAAO,IAAIA,GACT,QACA,mBACA,EACA,aAEJ,KAAK,IACL,QACE,OAAO,IAAIA,GACT,UAAUG,GAAWtrF,IACrB,gBACA,EACA,SAGR,CAQA2uF,KAAAA,CAAMkB,GACJ,OAAO,IAAIloD,QAAQvT,GAAW7U,WAAW6U,EAASy7D,GACpD,CAKAzC,KAAAA,GACEj8F,KAAKm7F,SAAU,CACjB,CAMAv9C,KAAAA,GACE59C,KAAKm7F,SAAU,EACfn7F,KAAKu8F,UAAYv8F,KAAKw8F,mBACxB,EAGF,UC1dA,MAAMmC,GAMJv8E,WAAAA,CAAYtU,EAAU,CAAC,GACrB9N,KAAK8rE,WAAah+D,EAAQg+D,YAAc,MAAS,GACjD9rE,KAAK48F,UAAY,IACnB,CAcA,oBAAMgC,GAEJ5+F,KAAK48F,UAAY,IAAInC,GAAe,CAClC3uB,WAAa/oD,GAAM/iB,KAAK8rE,WAAW,IAAK/oD,EAAGy4E,MAAO,eAGpD,MAAMF,QAAgBt7F,KAAK48F,UAAUhC,iBAAgB,GAGrD56F,KAAK8rE,WAAW,CAAE0vB,MAAO,WAAYhsF,QAAS,gBAE9C,MAAMY,EAAa,CACjBgjF,UAAW1tF,KAAKwuC,MAChBjnC,QAAS4xF,GAAAA,GACTn/F,KAAM,CACJo/F,UAAWxD,EAAQ50F,OACnBq4F,MAAO,CAAC,EACRC,SAAU,CAAC,IAKf,IAAK,MAAMC,KAAU3D,EACnBlrF,EAAW1Q,KAAKq/F,MAAME,EAAOluF,IAAM,CACjCQ,SAAU0tF,EAAO1tF,SACjBzM,MAAOm6F,EAAOn6F,OAAS,MAK3B,MAAMk6F,QAAiBh/F,KAAKk/F,gBAC5B9uF,EAAW1Q,KAAKs/F,SAAWA,EAG3Bh/F,KAAK8rE,WAAW,CAAE0vB,MAAO,cAAehsF,QAAS,cACjDxP,KAAKm/F,eAAe/uF,GAEpB,MAAMgvF,EAAgBpxF,OAAOC,KAAK+wF,GAAUt4F,OAC5C,MAAO,CAAEq1F,SAAS,EAAM+C,UAAWxD,EAAQ50F,OAAQ04F,gBACrD,CAOA,mBAAMF,GACJ,IACE,MAAM9D,QAAiBO,EAAAA,GAAAA,GAAc,8BACrC,IAAKP,EAAS56E,GAEZ,OADAuiB,QAAQC,KAAK,4BAA6Bo4D,EAASvsF,QAC5C,CAAC,EAEV,MAAMnP,QAAa07F,EAASU,OAE5B,OAAOp8F,EAAKs/F,UAAY,CAAC,CAC3B,CAAE,MAAOz1B,GAEP,OADAxmC,QAAQC,KAAK,4BAA6BumC,GACnC,CAAC,CACV,CACF,CAOA41B,cAAAA,CAAez/F,GAEb,MAAMo8F,EAAOhnE,KAAKC,UAAUr1B,EAAM,KAAM,GAGlC2/F,EAAO,IAAIC,KAAK,CAACxD,GAAO,CAAEx8F,KAAM,qBAGhCigG,EAAMC,IAAIC,gBAAgBJ,GAG1B1sF,EAAI+3B,SAASg1D,cAAc,KACjC/sF,EAAEgtF,KAAOJ,EAET5sF,EAAEitF,SAAW,kBAAiB,IAAIl6F,MAAOm6F,cAAc/4E,MAAM,KAAK,UAGlE4jB,SAASy4C,KAAK2c,YAAYntF,GAC1BA,EAAEotF,QAGFr1D,SAASy4C,KAAK6c,YAAYrtF,GAC1B6sF,IAAIS,gBAAgBV,EACtB,CAKAtD,KAAAA,GACMj8F,KAAK48F,WACP58F,KAAK48F,UAAUX,OAEnB,CAMAC,SAAAA,GACE,QAAOl8F,KAAK48F,WAAY58F,KAAK48F,UAAUV,WACzC,EAGF,UCzIA,MAAMgE,GAUJ99E,WAAAA,CAAYtU,EAAU,CAAC,GACrB9N,KAAKo8F,UAAYtuF,EAAQsuF,WAAa,GACtCp8F,KAAKq8F,WAAavuF,EAAQuuF,YAAc,EACxCr8F,KAAKs8F,WAAaxuF,EAAQwuF,YAAc,IACxCt8F,KAAK8rE,WAAah+D,EAAQg+D,YAAc,MAAS,GACjD9rE,KAAKiR,QAAUnD,EAAQmD,SAAW,MAAS,GAC3CjR,KAAKm7F,SAAU,CACjB,CAQA,aAAMv+D,CAAQxsB,GAIZ,GAHApQ,KAAKm7F,SAAU,GAGV/qF,IAAeA,EAAW1Q,KAC7B,MAAM,IAAIs6F,GACR,WACA,kBACA,EACA,cAIJ,MAAM,MAAE+E,EAAQ,CAAC,EAAC,SAAEC,EAAW,CAAC,GAAM5uF,EAAW1Q,KAC3CygG,EAAcnyF,OAAO+oD,QAAQgoC,GAC7BqB,EAAiBpyF,OAAO+oD,QAAQioC,GAEhCryF,EAAawzF,EAAYz5F,OACzB25F,EAAgBD,EAAe15F,OAC/B45F,EAAa3zF,EAAa0zF,EAEhC,IAAIE,EAAgB,EAChBC,EAAmB,EACnBC,EAAc,EACdC,EAAiB,EAErB,IAEE1gG,KAAK8rE,WAAW,CACd0vB,MAAO,kBACPhsF,QAAS,cACTH,QAAS,EACTC,MAAOgxF,IAGT,MAAMK,EAAa3gG,KAAK+8F,gBAAgBoD,EAAangG,KAAKo8F,WAE1D,IAAK,IAAI5nF,EAAI,EAAGA,EAAImsF,EAAWj6F,OAAQ8N,IAAK,CAC1C,GAAIxU,KAAKm7F,QACP,MAAM,IAAInB,GAAoB,QAAS,WAAW,EAAO,IAG3D,MAAMr2C,EAAQg9C,EAAWnsF,GACnBosF,EAAY5yF,OAAO6yF,YAAYl9C,GAE/B36B,QAAehpB,KAAKg9F,qBAAqB,QAAS4D,GACxDL,GAAiBv3E,EAAO83E,cACxBL,GAAez3E,EAAO+3E,YAEtB/gG,KAAK8rE,WAAW,CACd0vB,MAAO,kBACPhsF,QAAS,YAAY+wF,KAAiB5zF,OACtC0C,QAASkxF,EACTjxF,MAAOgxF,EACPlxF,WAAamxF,EAAgBD,EAAc,IAE/C,CAGAtgG,KAAK8rE,WAAW,CACd0vB,MAAO,qBACPhsF,QAAS,cACTH,QAASkxF,EACTjxF,MAAOgxF,IAGT,MAAMU,EAAgBhhG,KAAK+8F,gBAAgBqD,EAAgBpgG,KAAKo8F,WAEhE,IAAK,IAAI5nF,EAAI,EAAGA,EAAIwsF,EAAct6F,OAAQ8N,IAAK,CAC7C,GAAIxU,KAAKm7F,QACP,MAAM,IAAInB,GAAoB,QAAS,WAAW,EAAO,IAG3D,MAAMr2C,EAAQq9C,EAAcxsF,GACtBosF,EAAY5yF,OAAO6yF,YAAYl9C,GAE/B36B,QAAehpB,KAAKg9F,qBAAqB,WAAY4D,GAC3DJ,GAAoBx3E,EAAO83E,cAC3BJ,GAAkB13E,EAAO+3E,YAEzB/gG,KAAK8rE,WAAW,CACd0vB,MAAO,qBACPhsF,QAAS,YAAYgxF,KAAoBH,OACzChxF,QAASkxF,EAAgBC,EACzBlxF,MAAOgxF,EACPlxF,WAAY,GAAMoxF,EAAmBH,EAAiB,IAE1D,CAWA,OARArgG,KAAK8rE,WAAW,CACd0vB,MAAO,YACPhsF,QAAS,OACTH,QAASixF,EACThxF,MAAOgxF,EACPlxF,WAAY,MAGP,CACL2sF,SAAS,EACTwE,gBACAC,mBACAC,cACAC,iBACAO,gBAAiB7wF,EAAWgjF,UAGhC,CAAE,MAAO7pB,GACP,MAAMkyB,EAAalyB,aAAiBywB,GAChCzwB,EACA,IAAIywB,GACFzwB,EAAM/5D,SAAW,OACjB,iBACA,EACA,SAGN,MADAxP,KAAKiR,QAAQwqF,GACPA,CACR,CACF,CAKAsB,eAAAA,CAAgBhmC,EAASqlC,GACvB,MAAMU,EAAS,GACf,IAAK,IAAItoF,EAAI,EAAGA,EAAIuiD,EAAQrwD,OAAQ8N,GAAK4nF,EACvCU,EAAO91E,KAAK+vC,EAAQ/yC,MAAMxP,EAAGA,EAAI4nF,IAEnC,OAAOU,CACT,CAKA,0BAAME,CAAqB19F,EAAMI,GAC/B,IAAI29F,EAEJ,IAAK,IAAIC,EAAU,EAAGA,GAAWt9F,KAAKq8F,WAAYiB,IAChD,IACE,aAAat9F,KAAKu9F,YAAYj+F,EAAMI,EACtC,CAAE,MAAO6pE,GAGP,GAFA8zB,EAAY9zB,EAERA,aAAiBywB,KACA,gBAAfzwB,EAAM0wB,MACS,cAAf1wB,EAAM0wB,MACS,YAAf1wB,EAAM0wB,MACR,MAAM1wB,EAIV,GAAI+zB,EAAUt9F,KAAKq8F,WAAY,CAC7B,MAAMpuE,EAAQjuB,KAAKs8F,WAAartF,KAAKmS,IAAI,EAAGk8E,EAAU,SAChDt9F,KAAKw9F,MAAMvvE,EACnB,CACF,CAGF,MAAMovE,CACR,CAKA,iBAAME,CAAYj+F,EAAMI,GACtB,IACE,MAAM07F,QAAiBO,EAAAA,GAAAA,GAAc,kCAAmC,CACtE3uE,OAAQ,OACR2wE,QAAS,CAAE,eAAgB,oBAC3Bxa,KAAMruD,KAAKC,UAAU,CAAEz1B,OAAMI,WAG/B,IAAK07F,EAAS56E,GAAI,CAChB,IAAIo7E,EAAe,GACnB,IACE,MAAMC,QAAkBT,EAASU,OACjCF,EAAeC,EAAUtyB,OAAS,EACpC,CAAE,MACA,CAEF,MAAMvpE,KAAK49F,gBAAgBxC,EAASvsF,OAAQ+sF,EAC9C,CAEA,MAAM5yE,QAAeoyE,EAASU,OAE9B,IAAK9yE,EAAO+yE,QACV,MAAM,IAAI/B,GACRhxE,EAAOugD,OAAS,SAChB,wBACA,EACA,SAIJ,OAAOvgD,CACT,CAAE,MAAOugD,GACP,GAAIA,aAAiBywB,GACnB,MAAMzwB,EAER,GAAIA,aAAiBixB,WAAajxB,EAAM/5D,QAAQ+mB,SAAS,SACvD,MAAM,IAAIyjE,GACR,SACA,iBACA,EACA,cAGJ,MAAM,IAAIA,GACRzwB,EAAM/5D,SAAW,SACjB,wBACA,EACA,QAEJ,CACF,CAKAouF,eAAAA,CAAgB/uF,EAAQsrF,EAAU,IAChC,OAAQtrF,GACN,KAAK,IACH,OAAO,IAAImrF,GACT,aACA,eACA,EACA,cAEJ,KAAK,IACH,OAAO,IAAIA,GACT,aACA,aACA,EACA,cAEJ,KAAK,IACH,OAAO,IAAIA,GACT,WAAWG,IACX,gBACA,EACA,aAEJ,KAAK,IACL,QACE,OAAO,IAAIH,GACT,UAAUG,GAAWtrF,IACrB,gBACA,EACA,SAGR,CAKA2uF,KAAAA,CAAMkB,GACJ,OAAO,IAAIloD,QAAQvT,GAAW7U,WAAW6U,EAASy7D,GACpD,CAKAzC,KAAAA,GACEj8F,KAAKm7F,SAAU,CACjB,EAGF,UC3RA1uB,GAAQzH,SAASuQ,GAAY,GAAS,GAAQ0V,GAAemC,GAAa5U,GAAcR,GAAa,IACrG,MAAM,GAAS,MACf,SAAS,GAAYlzE,GACnB,OAAOvF,OAAOuF,GAAOC,SAAS,EAAG,IACnC,CACA,SAASm8F,GAAgBj8F,GACvB,MAAO,GAAGA,EAAKC,iBAAiB,GAAYD,EAAKE,WAAa,MAAM,GAAYF,EAAKG,YACvF,CACA,SAAS+7F,KACP,MAAMn6F,EAAU,IAAItB,KACpBsB,EAAQrB,SAAS,EAAG,EAAG,EAAG,GAC1B,MAAMoB,EAAY,IAAIrB,KAAKsB,EAAQL,UAAY,EAAI,IACnD,MAAO,CAACu6F,GAAgBn6F,GAAYm6F,GAAgBl6F,GACtD,CACA,QACE5H,KAAM,eACNgiG,WAAY,CACVtH,SAAQ,GACRC,KAAI,GACJsH,kBAAiB,GAEnB,IAAA3hG,GACE,MAAO,CACLsQ,SAAS,EACTC,YAAY,EACZE,SAAS,EACTI,WAAW,EACX7D,UAAW,CAAC,EACZO,QAAS,MAET4D,WAAY,CACVywF,QAAQ,EACRC,QAAQ,GAEVn0F,aAAc,UACdG,wBAAwB,EACxBG,eAAgByzF,KAEhBK,cAAe,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAE7FC,WAAY,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAE1FC,YAAa,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,WAEtG3yF,cAAc,EACd4yF,gBAAiB,GAEjBxyF,mBAAoB,CAClBE,QAAS,EACTC,MAAO,EACPE,QAAS,GACTJ,WAAY,GAEdO,gBAAiB,KACjBiyF,oBAAqB,KAErBC,iBAAkB,KAClBC,uBAAwB,KACxBC,wBAAyB,KAE7B,EACAniG,SAAU,CAER,gBAAAuO,GACE,MAAM6zF,EAAQhiG,KAAK0M,UAAUwB,cAAgB,CAAC,EAC9C,MAAO,CACL4wC,OAAQ9wC,OAAOC,KAAK+zF,GACpB1oE,SAAU,CAAC,CACT55B,KAAMsO,OAAOse,OAAO01E,GACpB5oE,gBAAiBp5B,KAAKwhG,cAAcx9E,MAAM,EAAGhW,OAAOC,KAAK+zF,GAAOt7F,QAChEo4B,YAAa,IAGnB,EAEA,aAAAnwB,GACE,MAAMszF,EAAkBjiG,KAAK4O,oBAC7B,MAAO,CACLkwC,OAAQ9wC,OAAOC,KAAKg0F,GACpB3oE,SAAU,CAAC,CACT55B,KAAMsO,OAAOse,OAAO21E,GACpB7oE,gBAAiBp5B,KAAKyhG,WAAWz9E,MAAM,EAAGhW,OAAOC,KAAKg0F,GAAiBv7F,QACvEo4B,YAAa,IAGnB,EAEA,mBAAAlwB,GACE,MAAMozF,EAAQhiG,KAAK0M,UAAUgC,WAAa,CAAC,EACrCuzF,EAAkB,CAAC,EACzB,IAAK,MAAOpzF,EAAQR,KAAUL,OAAO+oD,QAAQirC,GAAQ,CACnD,MAAME,EAA0B,UAAXrzF,EAAqB7O,KAAKhB,GAAG,qBAAuBgB,KAAKhB,GAAG,0BACjFijG,EAAgBC,IAAiBD,EAAgBC,IAAiB,GAAK7zF,CACzE,CACA,OAAO4zF,CACT,EAEA,iBAAAE,GACE,MAAMC,EAAQpiG,KAAK0M,UAAU21F,aAAe,CAAC,EACvCC,EAAUF,EAAME,SAAW,CAAC,EAClC,OAAOA,EAAQtiG,KAAKoN,eAAiB,CACnCm1F,OAAQ,GAEZ,EAEA,cAAAC,GACE,MAAMJ,EAAQpiG,KAAK0M,UAAU21F,aAAe,CAAC,EAC7C,OAAOD,EAAMtjD,QAAU,EACzB,EAEA,qBAAA2jD,GACE,MAAMC,EAAQ,IAAIh1E,IAIlB,OAHA1tB,KAAKwiG,eAAez1E,QAAQzf,IAC1BtN,KAAK2iG,uBAAuBr1F,GAAOyf,QAAQ9nB,GAAQy9F,EAAMphG,IAAI2D,EAAKM,SAE7Dm9F,EAAMr1F,KAAO,CACtB,EAEA,kBAAAu1F,GACE,OAAO5iG,KAAKwiG,eAAe3tF,IAAIvH,GAAStN,KAAK6iG,qBAAqBv1F,GACpE,EAEA,YAAAM,GACE,MAAMw0F,EAAQpiG,KAAK0M,UAAU21F,aAAe,CAAC,EAC7C,OAAQD,EAAMtjD,QAAU,IAAIp4C,OAAS,CACvC,EAEA,oBAAA+G,GACE,OAAO3N,OAAOC,WAAa,IAAM,QAAU,KAC7C,EAEA,oBAAA8N,GACE,MAAMu0F,EAAQpiG,KAAK0M,UAAU21F,aAAe,CAAC,EACvCE,EAASviG,KAAKmiG,kBAAkBI,QAAU,GAC1CO,EAAa,UACnB,MAAO,CACLhkD,OAAQ9+C,KAAK4iG,mBACbtpE,SAAU,CAAC,CACThsB,MAAOtN,KAAKhB,GAAG,0BACfU,KAAM0iG,EAAM9yF,OAAS,GACrB+pB,YAAaypE,EACb1pE,gBAAiBp5B,KAAK+iG,UAAUD,EAAY,IAC5CE,qBAAsBF,EACtBG,iBAAkBH,EAClBhkE,YAAa,EACbokE,YAAa,EACbC,iBAAkB,EAClB34D,QAAS,IACT3L,MAAM,MACF0jE,EAAO1tF,IAAI,CAACrW,EAAME,KACtB,MAAMgkB,EAAQ1iB,KAAKojG,cAAc1kG,GACjC,MAAO,CACL4O,MAAOtN,KAAKqjG,sBAAsB7kG,GAClCkB,KAAMlB,EAAKkB,MAAQ,GACnB25B,YAAa3W,EACb0W,gBAAiBp5B,KAAK+iG,UAAUrgF,EAAO,KACvCsgF,qBAAsBtgF,EACtBugF,iBAAkBvgF,EAClBoc,YAAa,EACbokE,YAAa,EACbC,iBAAkB,EAClB34D,QAAS,IACT3L,MAAM,MAId,EAEA,gBAAA9wB,GACE,MAAM27E,EAAY,UAClB,MAAO,CACL5uD,YAAY,EACZJ,qBAAqB,EACrBJ,YAAa,CACXC,KAAM,QACNC,WAAW,GAEbK,QAAS,CACP6wB,OAAQ,CACNh1B,SAAS,EACT64B,SAAU,SACVzQ,OAAQ,CACNy/B,eAAe,EACfD,SAAU,EACVD,UAAW,EACX/pD,QAAS,GACT5R,MAAOgnE,IAGXxG,QAAS,CACP9pD,gBAAiB,qBACjBuvD,WAAY,OACZtC,UAAW,OACX/xD,QAAS,GACTsJ,aAAc,EACdumD,eAAe,EACfvwC,UAAW,CACTpmC,MAAOggB,IACL,MAAM9uB,EAAQ8uB,IAAQ,IAAIotB,UAC1B,OAAO56C,KAAKwiG,eAAe9jG,IAAU,IAEvC4O,MAAOksB,IACL,MAAMoO,EAASpO,EAAQoO,QAAU,CAAC,EAC5B9iC,OAAqBgP,IAAb8zB,EAAOjhB,EAAkBihB,EAAOjhB,EAAI6S,EAAQqhB,IAC1D,MAAO,IAAIrhB,EAAQjK,QAAQjiB,UAAU9H,OAAOV,GAAS,GAAG8H,oBAAoB5M,KAAKhB,GAAG,+BAK5Fg8B,OAAQ,CACNtlB,EAAG,CACDshB,KAAM,CACJN,SAAS,GAEXhB,MAAO,CACLhT,MAAOgnE,EACPpwB,cAAe,EACfthC,UAAU,IAGdrR,EAAG,CACDiQ,aAAa,EACbI,KAAM,CACJtU,MAAO,6BAETgT,MAAO,CACLhT,MAAOgnE,EACPgC,UAAW,EACX9mE,SAAU9f,GAASU,OAAOV,GAAO8H,oBAK3C,EAEA,YAAAwB,GACE,MAAO,CACL0sB,YAAY,EACZJ,qBAAqB,EACrBiuB,OAAQ,MACR6C,YAAa,EACbyG,OAAQ,CACN39B,QAAS,IAEXuG,QAAS,CACP6wB,OAAQ,CACNh1B,SAAS,GAEXwsD,QAAS,CACP9pD,gBAAiB,qBACjBuvD,WAAY,OACZtC,UAAW,OACX/xD,QAAS,GACTsJ,aAAc,EACdumD,eAAe,EACf9vB,EAAG,IACHzgB,UAAW,CACTtmC,MAAOksB,IACL,MAAM10B,EAAQ00B,EAAQqhB,IAChBvrC,EAAQkqB,EAAQjK,QAAQ7vB,KAAKq1C,OAAO,CAACpiC,EAAGC,IAAMD,EAAIC,EAAG,GACrDxD,GAActK,EAAQwK,EAAQ,KAAKg0F,QAAQ,GACjD,MAAO,IAAIx+F,EAAM8H,qBAAqBwC,UAK9C0kB,UAAW,CACTi3B,eAAe,EACfK,cAAc,GAGpB,EAEA,sBAAA77C,GACE,IAAKvP,KAAK+O,eAAiB/O,KAAK4hG,oBAAqB,MAAO,GAC5D,GAAwC,IAApC5hG,KAAKmP,mBAAmBE,SAAwD,IAAvCrP,KAAKmP,mBAAmBC,WAAkB,MAAO,GAC9F,MAAMinC,EAAU3wC,KAAKwuC,MAAQl0C,KAAK4hG,oBAC5BhtD,EAAW50C,KAAKmP,mBAAmBC,WAAa,IACtD,GAAIwlC,GAAY,EAAG,MAAO,GAC1B,MAAM2uD,EAAiBltD,EAAUzB,EAC3BT,EAAYovD,EAAiBltD,EACnC,GAAIlC,GAAa,EAAG,OAAOn0C,KAAKhB,GAAG,6BACnC,MAAMwkG,EAAUv0F,KAAKsrD,KAAKpmB,EAAY,KACtC,GAAIqvD,EAAU,GAAI,OAAOxjG,KAAKhB,GAAG,oBAAqB,CACpDqP,MAAOm1F,IAET,MAAMC,EAAUx0F,KAAKsrD,KAAKipC,EAAU,IACpC,GAAIC,EAAU,GAAI,OAAOzjG,KAAKhB,GAAG,oBAAqB,CACpDqP,MAAOo1F,IAET,MAAMC,EAAQz0F,KAAK2Z,MAAM66E,EAAU,IAC7BE,EAAmBF,EAAU,GACnC,OAAOzjG,KAAKhB,GAAG,yBAA0B,CACvC0kG,QACAD,QAASE,GAEb,EAEA,gBAAA30F,GACE,MAAM40F,EAAW,CACf,SAAY5jG,KAAKhB,GAAG,2BACpB,QAAWgB,KAAKhB,GAAG,0BACnB,UAAagB,KAAKhB,GAAG,4BACrB,WAAcgB,KAAKhB,GAAG,6BACtB,SAAYgB,KAAKhB,GAAG,2BACpB,YAAegB,KAAKhB,GAAG,8BACvB,gBAAmBgB,KAAKhB,GAAG,iCAC3B,mBAAsBgB,KAAKhB,GAAG,oCAC9B,UAAagB,KAAKhB,GAAG,4BACrB,SAAYgB,KAAKhB,GAAG,4BAEtB,OAAO4kG,EAAS5jG,KAAK2hG,kBAAoB3hG,KAAK2hG,eAChD,GAEF,OAAApgG,GACEvB,KAAKyM,gBACP,EACApM,QAAS,CAEP,aAAAmO,CAAc9P,GACZ,OAAOsB,KAAKwhG,cAAc9iG,EAAQsB,KAAKwhG,cAAc96F,OACvD,EAEA,iBAAAoI,CAAkBpQ,GAChB,OAAOsB,KAAKyhG,WAAW/iG,EAAQsB,KAAKyhG,WAAW/6F,OACjD,EAEA,aAAA08F,CAAc1kG,GACZ,OAAOsB,KAAK0hG,YAAYhjG,EAAQsB,KAAK0hG,YAAYh7F,OACnD,EAEA,qBAAA28F,CAAsBd,GACpB,OAAIA,GAAQsB,SAA4B,cAAjBtB,GAAQnjG,KACtBY,KAAKhB,GAAG,2BAEVujG,GAAQnjG,MAAQY,KAAKhB,GAAG,oBACjC,EAEA,SAAA+jG,CAAU9vF,EAAKW,GACb,MAAMkgF,GAAc7gF,GAAO,IAAIyN,QAAQ,IAAK,IAC5C,GAA0B,IAAtBozE,EAAWptF,OACb,MAAO,qBAAqBkN,KAE9B,MAAMN,EAAIqN,SAASmzE,EAAW9vE,MAAM,EAAG,GAAI,IACrCzQ,EAAIoN,SAASmzE,EAAW9vE,MAAM,EAAG,GAAI,IACrCpR,EAAI+N,SAASmzE,EAAW9vE,MAAM,EAAG,GAAI,IAC3C,MAAO,QAAQ1Q,MAAMC,MAAMX,MAAMgB,IACnC,EAEA,sBAAA+uF,CAAuBr1F,GACrB,MAAM80B,EAAU7iC,OAAO+N,GAAS,IAAIhI,MAAM,uBAAyB,GACnE,OAAO88B,EAAQvtB,IAAIrW,IACjB,MAAO+G,EAAME,EAAOrB,GAAO5F,EAAKsoB,MAAM,KAAKjS,IAAIrP,QAC/C,MAAO,CACLD,OACAE,QACArB,QAGN,EAEA,oBAAAy+F,CAAqBv1F,GACnB,MAAMw2F,EAAQ9jG,KAAK2iG,uBAAuBr1F,GAC1C,GAAqB,IAAjBw2F,EAAMp9F,OAAc,OAAO4G,EAC/B,MAAMy2F,EAAmB,CAAC9+F,EAAM++F,KAC9B,MAAMC,EAAW,GAAGh/F,EAAKQ,SAASR,EAAKb,MACvC,OAAO4/F,EAAc,GAAG/+F,EAAKM,QAAQ0+F,IAAaA,GAEpD,GAAqB,IAAjBH,EAAMp9F,OACR,OAAOq9F,EAAiBD,EAAM,GAAI9jG,KAAKyiG,uBAEzC,MAAO17F,EAAWC,GAAW88F,EAC7B,IAAK9jG,KAAKyiG,sBACR,MAAO,GAAGsB,EAAiBh9F,GAAW,MAAUg9F,EAAiB/8F,GAAS,KAE5E,MAAMk9F,EAAWn9F,EAAUxB,OAASyB,EAAQzB,KAAOw+F,EAAiB/8F,GAAS,GAAS+8F,EAAiB/8F,GAAS,GAChH,MAAO,GAAG+8F,EAAiBh9F,GAAW,MAASm9F,GACjD,EAEA,mBAAA/2F,GACEnN,KAAKuN,wBAAyB,CAChC,EAEA,0BAAAI,CAA2B7I,GACpBiB,MAAM6O,QAAQ9P,IAA2B,IAAjBA,EAAM4B,QAAiB5B,EAAM,IAAOA,EAAM,KAGvE9E,KAAKuN,wBAAyB,EAC9BvN,KAAKyM,iBACP,EAEA,uBAAA03F,GAIE,OAHKp+F,MAAM6O,QAAQ5U,KAAK0N,iBAAkD,IAA/B1N,KAAK0N,eAAehH,SAC7D1G,KAAK0N,eAAiByzF,MAEjB,CACLp6F,UAAW/G,KAAK0N,eAAe,GAC/B1G,QAAShH,KAAK0N,eAAe,GAEjC,EAEA,oBAAMjB,GACJzM,KAAKgQ,SAAU,EACf,IACE,MAAM,UACJjJ,EAAS,QACTC,GACEhH,KAAKmkG,0BACHryC,EAAS,IAAI4pC,gBAAgB,CACjC0I,OAAQ,OACRC,eAAgB9kG,QAAO,IAAImG,MAAO4+F,qBAClCC,eAAgB,KAChBC,iBAAkB,IAClBC,eAAgB19F,EAChB29F,aAAc19F,IAEVo0F,QAAiB,EAAAO,GAAA,GAAc,oBAAoB7pC,EAAOhuC,aAAc,CAC5EkJ,OAAQ,QAEV,IAAIouE,EAAS56E,GAIX,MAAM,IAAIkmB,MAAM,WAJD,CACf,MAAMhnC,QAAa07F,EAASU,OAC5B97F,KAAK0M,UAAYhN,CACnB,CAGF,CAAE,MAAO6pE,GACPxmC,QAAQwmC,MAAM,YAAaA,GAC3BvpE,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,8BAC9B,CAAE,QACAgB,KAAKgQ,SAAU,CACjB,CACF,EAEA,kBAAME,GACJ,GAAIlQ,KAAK+O,aACP/O,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,sCADhC,CAIAgB,KAAKiQ,YAAa,EAClBjQ,KAAK+O,cAAe,EACpB/O,KAAK2P,gBAAkB,KACvB3P,KAAK4hG,oBAAsBl8F,KAAKwuC,MAChCl0C,KAAKmP,mBAAqB,CACxBE,QAAS,EACTC,MAAO,EACPE,QAAS,GACTJ,WAAY,GAIdpP,KAAK6hG,iBAAmB,IAAI,GAAe,CACzC/1B,WAAYl3B,GAAY50C,KAAK6kG,eAAejwD,GAC5C3jC,QAASs4D,GAASvpE,KAAK8kG,YAAYv7B,KAErC,IACE,MAAMvgD,QAAehpB,KAAK6hG,iBAAiBlF,UAG3C38F,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,2BAA4B,CACxDqP,MAAO2a,EAAOrc,WAAWC,oBAI3BwhB,WAAW,KACTpuB,KAAKyM,kBACJ,IACL,CAAE,MAAO88D,GAEP,GAAmB,YAAfA,EAAM0wB,KAAoB,CAC5B,MAAM8K,EAAex7B,EAAM35D,WAAa,GAAG25D,EAAM/5D,WAAW+5D,EAAM35D,aAAe25D,EAAM/5D,QACvFxP,KAAK2kG,SAASp7B,MAAMw7B,GACpB/kG,KAAK2P,gBAAkB,CACrBH,QAAS+5D,EAAM/5D,QACfI,WAAY25D,EAAM35D,WAClBC,YAAa05D,EAAM15D,YAEvB,CACF,CAAE,QACA7P,KAAKiQ,YAAa,EAClBjQ,KAAK+O,cAAe,EACpB/O,KAAK6hG,iBAAmB,KACxB7hG,KAAK4hG,oBAAsB,IAC7B,CA7CA,CA8CF,EAEA,gBAAMxxF,GACJ,GAAIpQ,KAAK+O,aACP/O,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,sCADhC,CAIAgB,KAAKmQ,SAAU,EACfnQ,KAAK+O,cAAe,EACpB/O,KAAK2P,gBAAkB,KACvB3P,KAAK4hG,oBAAsBl8F,KAAKwuC,MAChCl0C,KAAKmP,mBAAqB,CACxBE,QAAS,EACTC,MAAO,EACPE,QAAS,GACTJ,WAAY,GAIdpP,KAAK8hG,uBAAyB,IAAI,GAAgB,CAChDh2B,WAAYl3B,GAAY50C,KAAK6kG,eAAejwD,KAE9C,IACE,MAAM5rB,QAAehpB,KAAK8hG,uBAAuBlD,iBAG3CoG,EAAch8E,EAAOo2E,cAAgB,EAAIp/F,KAAKhB,GAAG,sCAAuC,CAC5F8/F,UAAW91E,EAAO81E,UAAUlyF,iBAC5BwyF,cAAep2E,EAAOo2E,gBACnBp/F,KAAKhB,GAAG,0BAA2B,CACtCqP,MAAO2a,EAAO81E,UAAUlyF,mBAE1B5M,KAAK2kG,SAAS5I,QAAQiJ,EACxB,CAAE,MAAOz7B,GAEP,GAAmB,YAAfA,EAAM0wB,KAAoB,CAC5B,MAAM8K,EAAex7B,EAAM35D,WAAa,GAAG25D,EAAM/5D,WAAW+5D,EAAM35D,aAAe25D,EAAM/5D,QACvFxP,KAAK2kG,SAASp7B,MAAMw7B,GACpB/kG,KAAK2P,gBAAkB,CACrBH,QAAS+5D,EAAM/5D,QACfI,WAAY25D,EAAM35D,WAClBC,YAAa05D,EAAM15D,YAEvB,CACF,CAAE,QACA7P,KAAKmQ,SAAU,EACfnQ,KAAK+O,cAAe,EACpB/O,KAAK8hG,uBAAyB,KAC9B9hG,KAAK4hG,oBAAsB,IAC7B,CA3CA,CA4CF,EAEA,iBAAApxF,GACMxQ,KAAKuQ,WACTvQ,KAAKU,MAAMukG,UAAUlF,OACvB,EAEA,sBAAMzvF,CAAiBm8B,GACrB,MAAMy4D,EAAOz4D,EAAM9mB,OAAOo5E,MAAM,GAChC,GAAKmG,EACL,GAAKA,EAAK9lG,KAAKqlB,SAAS,SAAxB,CAMA,UACQzkB,KAAKmlG,SAASnlG,KAAKhB,GAAG,mCAAoCgB,KAAKhB,GAAG,iCAAkC,CACxGomG,kBAAmBplG,KAAKhB,GAAG,8BAC3BqmG,iBAAkBrlG,KAAKhB,GAAG,kCAC1BM,KAAM,kBAEFU,KAAKslG,YAAYJ,EACzB,CAAE,MAAO37B,GACO,WAAVA,GACFxmC,QAAQwmC,MAAM,UAAWA,EAE7B,CAGA98B,EAAM9mB,OAAO7gB,MAAQ,EAjBrB,MAFE9E,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,4BAoBhC,EAEA,iBAAMsmG,CAAYJ,GAChB,GAAIllG,KAAK+O,aACP/O,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,sCADhC,CAIAgB,KAAKuQ,WAAY,EACjBvQ,KAAK+O,cAAe,EACpB/O,KAAK2P,gBAAkB,KACvB3P,KAAK4hG,oBAAsBl8F,KAAKwuC,MAChCl0C,KAAKmP,mBAAqB,CACxBE,QAAS,EACTC,MAAO,EACPE,QAAS,GACTJ,WAAY,GAEd,IAEE,MAAMm2F,QAAoBL,EAAKxtE,OAC/B,IAAItnB,EACJ,IACEA,EAAa0kB,KAAK+S,MAAM09D,EAC1B,CAAE,MAAOC,GACP,MAAM,IAAI9+D,MAAM1mC,KAAKhB,GAAG,+BAC1B,CAGAgB,KAAK+hG,wBAA0B,IAAI,GAAiB,CAClD3F,UAAW,IAEXtwB,WAAYl3B,GAAY50C,KAAK6kG,eAAejwD,GAC5C3jC,QAASs4D,GAASvpE,KAAK8kG,YAAYv7B,KAErC,MAAMvgD,QAAehpB,KAAK+hG,wBAAwBnlE,QAAQxsB,GAG1DpQ,KAAKuQ,WAAY,EACjBvQ,KAAK+O,cAAe,EACpB/O,KAAK+hG,wBAA0B,KAC/B/hG,KAAK4hG,oBAAsB,KAG3B5hG,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,2BAA4B,CACxD+/F,MAAO/1E,EAAOu3E,cACdvB,SAAUh2E,EAAOw3E,0BAIb,IAAIhqD,QAAQvT,GAAW7U,WAAW6U,EAAS,YAC3CjjC,KAAKkQ,cACb,CAAE,MAAOq5D,GAQP,GAPAxmC,QAAQwmC,MAAM,UAAWA,GAGzBvpE,KAAKuQ,WAAY,EACjBvQ,KAAK+O,cAAe,EACpB/O,KAAK+hG,wBAA0B,KAC/B/hG,KAAK4hG,oBAAsB,KACR,YAAfr4B,EAAM0wB,KAAoB,CAC5B,MAAM8K,EAAex7B,EAAM35D,WAAa,GAAG25D,EAAM/5D,WAAW+5D,EAAM35D,aAAe25D,EAAM/5D,QACvFxP,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,2BAA6B,KAAO+lG,GAChE/kG,KAAK2P,gBAAkB,CACrBH,QAAS+5D,EAAM/5D,QACfI,WAAY25D,EAAM35D,WAClBC,YAAa05D,EAAM15D,YAEvB,CACF,CA9DA,CA+DF,EAEA,UAAAhD,CAAWumF,GACT,IAAKA,EAAW,OAAOpzF,KAAKhB,GAAG,qBAC/B,MAAMiG,EAAO,IAAIS,KAAK0tF,GACtB,OAAOnuF,EAAK2H,eAAe,QAAS,CAClCrH,KAAM,UACNE,MAAO,UACPrB,IAAK,UACL4tF,KAAM,UACND,OAAQ,WAEZ,EAEA,aAAAtjF,CAAc3J,EAAOwK,GACnB,OAAKA,GAAmB,IAAVA,EACPL,KAAKC,MAAMpK,EAAQwK,EAAQ,KADA,CAEpC,EAEA,UAAAvC,CAAWqmF,GACT,IAAKA,EAAW,MAAO,GACvB,MAAMl/C,EAAMxuC,KAAKwuC,MACX0a,EAAO1a,EAAMk/C,EACbqQ,EAAUx0F,KAAK2Z,MAAMgmC,EAAO,KAC5B80C,EAAQz0F,KAAK2Z,MAAMgmC,EAAO,MAC1B62C,EAAOx2F,KAAK2Z,MAAMgmC,EAAO,OAC/B,OAAI62C,EAAO,EAAUzlG,KAAKhB,GAAG,oBAAqB,CAChDqP,MAAOo3F,IAEL/B,EAAQ,EAAU1jG,KAAKhB,GAAG,qBAAsB,CAClDqP,MAAOq1F,IAELD,EAAU,EAAUzjG,KAAKhB,GAAG,uBAAwB,CACtDqP,MAAOo1F,IAEFzjG,KAAKhB,GAAG,oBACjB,EAEA,gBAAAkS,CAAiB5R,GACfU,KAAK6Q,WAAWvR,IAAQ,CAC1B,EAEA,cAAAomG,CAAepmG,EAAM4lG,GACnB,OAAIllG,KAAK6Q,WAAWvR,OACf4lG,GAAM3zF,UAAUo0F,WACdT,EAAK3zF,SAASo0F,SAASpvE,SAAS,UAAY2uE,EAAK3zF,SAASo0F,SAASpvE,SAAS,UACrF,EAEA,YAAAvpB,GACElN,OAAO8lG,KAAK,2DAA4D,SAC1E,EAEA,WAAAh1F,CAAYs0F,GACV,IAAKA,EAAM,OAAO,EAElB,GAAIA,EAAK3zF,UAAUo0F,UAAUpvE,SAAS,SAAU,OAAO,EAEvD,MAAMsvE,EAAWX,EAAK3zF,UAAUC,UAAY0zF,EAAKn0F,IAAM,GACjD+0F,EAAYD,EAASE,UAAUF,EAAS9a,YAAY,KAAO,GAAGhqE,cAC9DilF,EAAkB,CAAC,MAAO,OAAQ,MAAO,MAAO,MAAO,OAAQ,MAAO,MAAO,OAAQ,MAAO,OAAQ,OAAQ,QAClH,OAAOA,EAAgBzvE,SAASuvE,EAClC,EAEA,WAAA30F,CAAY+zF,GACV,IAAKA,EAAM,OAAO,EAElB,GAAIA,EAAK3zF,UAAUo0F,UAAUpvE,SAAS,SAAU,OAAO,EAEvD,MAAMsvE,EAAWX,EAAK3zF,UAAUC,UAAY0zF,EAAKn0F,IAAM,GACjD+0F,EAAYD,EAASE,UAAUF,EAAS9a,YAAY,KAAO,GAAGhqE,cAC9DklF,EAAkB,CAAC,MAAO,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,OACxG,OAAOA,EAAgB1vE,SAASuvE,EAClC,EAEA,gBAAAn1F,CAAiBu0F,GACVA,GAAMn0F,IACXjR,OAAO8lG,KAAK,SAAWV,EAAKn0F,GAAK,cAAe,SAClD,EAEA,cAAA8zF,CAAejwD,GACb50C,KAAK2hG,gBAAkB/sD,EAAS4mD,MAChCx7F,KAAKmP,mBAAmBK,QAAUolC,EAASplC,SAAW,GACtDxP,KAAKmP,mBAAmBE,QAAUulC,EAASvlC,SAAW,EAG/B,aAAnBulC,EAAS4mD,OAEXx7F,KAAKmP,mBAAmBG,MAAQslC,EAAStlC,OAAS,EAE9CslC,EAAStlC,OAASslC,EAAStlC,MAAQ,EACrCtP,KAAKmP,mBAAmBC,WAAaH,KAAK8C,IAAI,GAAI6iC,EAASvlC,QAAUulC,EAAStlC,MAAQ,IAGtFtP,KAAKmP,mBAAmBC,WAAaH,KAAK8C,IAAI,GAAuC,GAAnC9C,KAAKmZ,MAAMwsB,EAASvlC,QAAU,KAEtD,YAAnBulC,EAAS4mD,OAElBx7F,KAAKmP,mBAAmBC,WAAa,GACrCpP,KAAKmP,mBAAmBG,MAAQslC,EAAStlC,OAAStP,KAAKmP,mBAAmBG,OAC9C,cAAnBslC,EAAS4mD,OAElBx7F,KAAKmP,mBAAmBG,MAAQslC,EAAStlC,OAAS,EAC9CslC,EAAStlC,OAASslC,EAAStlC,MAAQ,IACrCtP,KAAKmP,mBAAmBC,WAAa,GAAKwlC,EAASvlC,QAAUulC,EAAStlC,MAAQ,KAEpD,eAAnBslC,EAAS4mD,MAElBx7F,KAAKmP,mBAAmBC,WAAa,GACT,aAAnBwlC,EAAS4mD,MAElBx7F,KAAKmP,mBAAmBC,WAAa,GACT,gBAAnBwlC,EAAS4mD,MAElBx7F,KAAKmP,mBAAmBC,WAAa,GACT,oBAAnBwlC,EAAS4mD,OAElBx7F,KAAKmP,mBAAmBG,MAAQslC,EAAStlC,OAAS,EAClDtP,KAAKmP,mBAAmBC,WAAawlC,EAASxlC,YAAc,GAChC,uBAAnBwlC,EAAS4mD,OAElBx7F,KAAKmP,mBAAmBG,MAAQslC,EAAStlC,OAAS,EAClDtP,KAAKmP,mBAAmBC,WAAawlC,EAASxlC,YAAc,IAChC,cAAnBwlC,EAAS4mD,MAElBx7F,KAAKmP,mBAAmBC,WAAa,IACT,aAAnBwlC,EAAS4mD,QAElBx7F,KAAKmP,mBAAmBK,QAAUolC,EAASplC,QAE/C,EAEA,WAAAs1F,CAAYv7B,GACVxmC,QAAQwmC,MAAM,UAAWA,GACzBvpE,KAAK2P,gBAAkB,CACrBH,QAAS+5D,EAAM/5D,QACfI,WAAY25D,EAAM35D,WAClBC,YAAa05D,EAAM15D,YAEvB,EAEA,eAAAH,GACM1P,KAAK6hG,mBACP7hG,KAAK6hG,iBAAiB5F,QACtBj8F,KAAK2kG,SAASxhE,KAAKnjC,KAAKhB,GAAG,iCAEzBgB,KAAK8hG,yBACP9hG,KAAK8hG,uBAAuB7F,QAC5Bj8F,KAAK2kG,SAASxhE,KAAKnjC,KAAKhB,GAAG,iCAEzBgB,KAAK+hG,0BACP/hG,KAAK+hG,wBAAwB9F,QAC7Bj8F,KAAK2kG,SAASxhE,KAAKnjC,KAAKhB,GAAG,gCAE/B,EAEA,cAAA8Q,GACE9P,KAAK2P,gBAAkB,KACnB3P,KAAKiQ,YACPjQ,KAAKiQ,YAAa,EAClBjQ,KAAK+O,cAAe,EACpB/O,KAAKG,UAAU,KACbH,KAAKkQ,kBAEElQ,KAAKmQ,UACdnQ,KAAKmQ,SAAU,EACfnQ,KAAK+O,cAAe,EACpB/O,KAAKG,UAAU,KACbH,KAAKoQ,eAGX,EAEA,YAAAL,GACE/P,KAAK2P,gBAAkB,IACzB,ICvzBJ,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,wMCRA,MAAM,GAAa,CAAC,WACb,SAAS,GAAO/R,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACjDgoG,EAAyB,KAC/B,OAAO,WAAc,QAAoB,MAAO,CAC9C1oG,OAAO,QAAgB,CAAC,gBAAiB,CACvC,UAAWQ,EAAMmoG,UAEnB9nG,OAAO,QAAgB,CACrB4B,MAAOnC,EAAOmC,SAEf,EAAC,QAAoB,MAAO,CAC7BzC,MAAO,wBACPoB,QAASf,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAASmoG,gBAAkBnoG,EAASmoG,kBAAkBlnG,KACrG,EAAC,QAAoB,OAAQ,CAC9B1B,OAAO,QAAgB,CAAC,sBAAuB,CAC7C,kBAAmBM,EAAOgI,gBAE3B,QAAiB7H,EAASooG,cAAe,IAAI,QAAanoG,EAA8B,CACzFa,KAAM,eACNvB,MAAO,2BACH,QAAa,KAAa,CAC9B4B,KAAM,iBACL,CACDI,SAAS,QAAS,IAAM,EAAC,SAAgB,QAAoB,MAAO,CAClEhC,MAAO,yBACPoB,QAASf,EAAO,KAAOA,EAAO,IAAK,QAAe,OAAU,CAAC,WAC5D,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYC,EAAOgQ,QAASopC,KAC/E,WAAc,QAAoB,MAAO,CAC9Cz4C,IAAKy4C,EAAOpyC,MACZtH,OAAO,QAAgB,CAAC,uBAAwB,CAC9C,cAAeM,EAAOgI,aAAeoxC,EAAOpyC,SAE9ClG,QAASC,GAAUZ,EAASqoG,aAAapvD,EAAOpyC,QAC/C,EAAC,QAAYlH,EAAK2oG,OAAQ,SAAU,CACrCrvD,OAAQA,GACP,IAAM,CAACA,EAAOsvD,cAAe,WAAc,QAAaN,EAAwB,CACjFznG,IAAK,EACLa,KAAM43C,EAAOsvD,YACbhpG,OAAO,QAAgB,CAAC,cAAe05C,EAAOuvD,aAC7C,KAAM,EAAG,CAAC,OAAQ,WAAavvD,EAAOn4C,OAAQ,WAAc,QAAab,EAA8B,CACxGO,IAAK,EACLM,KAAMm4C,EAAOn4C,KACbvB,OAAO,QAAgB,CAAC,cAAe05C,EAAOuvD,aAC7C,KAAM,EAAG,CAAC,OAAQ,YAAa,QAAoB,IAAI,IAAO,QAAoB,OAAQ,MAAM,QAAiBvvD,EAAO5pC,OAAQ,KAAK,IAAQ,GAAI,MAClJ,OAAQ,KAAM,CAAC,CAAC,KAAQtP,EAAMmoG,YAClC7jG,EAAG,KACA,EACP,CC9CA,QACElD,KAAM,eACNgiG,WAAY,CACVsF,YAAW,MAEbrnG,MAAO,CACLyG,WAAY,CACVxG,KAAM,CAACC,OAAQiG,QACfhG,QAAS,IAEXsO,QAAS,CACPxO,KAAMyG,MACNswF,UAAU,GAGZsQ,YAAa,CACXrnG,KAAMC,OACNC,QAAS,IAEXS,MAAO,CACLX,KAAMC,OACNC,QAAS,UAGbwG,MAAO,CAAC,oBAAqB,UAC7B,IAAAtG,GACE,MAAO,CACLymG,QAAQ,EAEZ,EACAvmG,SAAU,CACR,mBAAAgnG,GACE,OAAO5mG,KAAK2mG,aAAe3mG,KAAKhB,GAAG,gBACrC,EACA,YAAAqnG,GACE,MAAMQ,EAAW7mG,KAAK8N,QAAQ64C,KAAKmgD,GAAOA,EAAIhiG,QAAU9E,KAAK8F,YAC7D,OAAO+gG,EAAWA,EAASv5F,MAAQtN,KAAK4mG,mBAC1C,GAEF,OAAArlG,GACEmpC,SAASlpC,iBAAiB,QAASxB,KAAK+mG,mBAC1C,EACA,aAAAC,GACEt8D,SAAShpC,oBAAoB,QAAS1B,KAAK+mG,mBAC7C,EACA1mG,QAAS,CACP,cAAA+lG,GACEpmG,KAAKmmG,QAAUnmG,KAAKmmG,MACtB,EACA,YAAAG,CAAaxhG,GACX9E,KAAKM,MAAM,oBAAqBwE,GAChC9E,KAAKM,MAAM,SAAUwE,GACrB9E,KAAKmmG,QAAS,CAChB,EACA,kBAAAY,CAAmBh0F,GACZ/S,KAAKinG,IAAIhmG,SAAS8R,EAAE4S,UACvB3lB,KAAKmmG,QAAS,EAElB,ICtDJ,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,UCRA,MAAM,GAAa,CACjB3oG,MAAO,mBAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CACjBA,MAAO,kBAEH,GAAa,CACjBA,MAAO,gBAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CACjBiB,IAAK,EACLjB,MAAO,uBAEH,GAAa,CACjBA,MAAO,gBAEH,GAAa,CACjBiB,IAAK,EACLjB,MAAO,iBAEH,GAAc,CAAC,cAAe,gBAC9B,GAAc,CAClBA,MAAO,eAEH,GAAc,CAClBA,MAAO,cAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBiB,IAAK,EACLjB,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBiB,IAAK,EACLjB,MAAO,aAEH,GAAc,CAAC,SACf,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBiB,IAAK,EACLjB,MAAO,aAEH,GAAc,CAAC,SACf,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAClBA,MAAO,aAEH,GAAc,CAAC,SACf,GAAc,CAClBiB,IAAK,EACLjB,MAAO,aAEH,GAAc,CAAC,SACf,GAAc,CAClBiB,IAAK,EACLjB,MAAO,cAEH,GAAc,CAClBA,MAAO,cAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBiB,IAAK,EACLjB,MAAO,aAEH,GAAc,CAClBA,MAAO,uBAEH,GAAc,CAClBiB,IAAK,EACLjB,MAAO,eACPa,MAAO,CACL,aAAc,MAGZ,GAAc,CAAC,aACf,GAAc,CAClBb,MAAO,gBAEH,GAAc,CAClBA,MAAO,eAEH,GAAc,CAClBA,MAAO,gBAEF,SAAS,GAAOI,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACjD2D,EAAwB,KACxBqlG,EAA0B,GAC1Bn7F,EAAuB,KACvBm6F,EAAyB,KACzBiB,EAAoB,KACpBC,EAAuB,MACvB96F,EAAyB,KACzB+6F,EAAuB,MACvBC,EAAuB,MACvBC,EAA0B,MAC1BC,EAAsB,MACtBC,EAA6B,MAC7BC,EAAqB,MACrBv7F,EAAuB,KACvBw7F,EAAkC,MAClCC,EAA6B,MAC7Bp7F,EAAqB,IAC3B,OAAO,UAAiB,WAAc,QAAoB,MAAO,GAAY,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAoB,KAAM,GAAY,EAAC,SAAiB,QAAiB5O,EAAKoB,GAAG,oBAAsB,IAAK,IAAI,QAAa6C,EAAuB,CACxQM,QAASvE,EAAKoB,GAAG,0BACjBoD,UAAW,SACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,gBAET8E,EAAG,GACF,EAAG,CAAC,eAAe,QAAoB,MAAO,GAAY,EAAC,QAAa4kG,EAAyB,CAClGphG,WAAY9H,EAAM6pG,cAClB,sBAAuBhqG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAM6pG,cAAgBhpG,GACjFiP,QAAS7P,EAAS6pG,cAClBnB,YAAa/oG,EAAKoB,GAAG,+BACrBiB,MAAO,SACN,KAAM,EAAG,CAAC,aAAc,UAAW,iBAAiB,QAAa8L,EAAsB,CACxFzM,KAAM,UACNV,QAASf,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAM+pG,eAAgB,GACnEvqG,MAAO,WACN,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,OACNV,MAAO,CACL,eAAgB,UAEhB,QAAiB,KAAM,QAAiBT,EAAKoB,GAAG,yBAA0B,KAC9EsD,EAAG,UACI,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYrE,EAAS+pG,iBAAkBxB,KAC9F,WAAc,QAAoB,MAAO,CAC9C/nG,IAAK+nG,EAAY1hG,MACjBtH,MAAO,iBACN,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAa0oG,EAAwB,CACvH5mG,KAAMknG,EAAY1hG,MAClBtH,OAAO,QAAgB,CAAC,aAAcS,EAASgqG,oBAAoBzB,EAAY1hG,UAC9E,KAAM,EAAG,CAAC,OAAQ,WAAW,QAAoB,OAAQ,MAAM,QAAiB0hG,EAAYl5F,OAAQ,IAAI,QAAa65F,EAAmB,CACzI95F,KAAM,QACN/N,KAAM,OACN9B,MAAO,iBACN,CACDgC,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAASiqG,eAAe1B,EAAY1hG,OAAO4B,QAAS,KAC/GpE,EAAG,GACF,QAASrE,EAASkqG,eAAe3B,EAAY1hG,SAAU,WAAc,QAAoB,MAAO,GAAY,EAAC,QAAoB,OAAQ,IAAY,QAAiBlH,EAAKoB,GAAG,0BAA2B,IAAI,QAAaooG,EAAsB,CACjPthG,WAAY7H,EAASmqG,YAAY5B,EAAY1hG,OAAOujG,YAAY7uC,QAChE,sBAAuB36D,GAAUZ,EAASmqG,YAAY5B,EAAY1hG,OAAOujG,YAAY7uC,QAAU36D,EAC/FwO,KAAM,QACN/J,SAAUrF,EAASqqG,cAClB,KAAM,EAAG,CAAC,aAAc,sBAAuB,iBAAkB,QAAoB,IAAI,KAASrqG,EAASiqG,eAAe1B,EAAY1hG,OAAO4B,OAAS,IAAK,WAAc,QAAoB,MAAO,GAAY,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYzI,EAASiqG,eAAe1B,EAAY1hG,OAAQ,CAACwJ,EAAS5P,MACrU,WAAc,QAAoB,MAAO,CAC9CD,IAAK6P,EAAQlP,MAAQV,EACrBlB,OAAO,QAAgB,CAAC,eAAgB,CAACgpG,EAAY1hG,MAAO,CAC1D,UAAawJ,EAAQkrD,QACrB,MAASlrD,EAAQi6F,UAEnBC,YAAa3pG,GAAUZ,EAASwqG,oBAAoB5pG,EAAQ2nG,EAAY1hG,MAAOpG,GAC/EgqG,aAAc7pG,GAAUZ,EAAS0qG,qBAAqBnC,EAAY1hG,MAAOpG,IACxE,EAAC,QAAoB,MAAO,CAC7BlB,MAAO,YACPorG,SAAS,EACTxqG,IAAK,QAAQooG,EAAY1hG,SAASpG,KACjC,KAAM,MAAM,QAAoB,MAAO,GAAa,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAoB,OAAQ,IAAa,QAAiB4P,EAAQlP,MAAQxB,EAAKoB,GAAG,6BAA8B,GAAIsP,EAAQi6F,QAAS,WAAc,QAAapB,EAAmB,CAClR1oG,IAAK,EACL4O,KAAM,QACN/N,KAAM,WACL,CACDE,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,0BAA2B,KAC9FsD,EAAG,MACC,QAAoB,IAAI,MAAS,QAAa8kG,EAAsB,CACxEthG,WAAYwI,EAAQkrD,QACpB,sBAAuB36D,GAAUyP,EAAQkrD,QAAU36D,EACnDwO,KAAM,QACNzO,QAASf,EAAO,KAAOA,EAAO,IAAK,QAAe,OAAU,CAAC,UAC7DyF,SAAUrF,EAASqqG,cAClB,KAAM,EAAG,CAAC,aAAc,sBAAuB,gBAAgB,QAAoB,MAAO,GAAa,EAAC,QAAoB,MAAO,GAAa,CAAuB,aAAtB9B,EAAY1hG,QAAwB,WAAc,QAAoB,KAAW,CACnOrG,IAAK,GACJ,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAaP,EAA8B,CACtFa,KAAM,QACNvB,MAAO,eACL,QAAoB,OAAQ,GAAa,SAAU,QAAiBS,EAAS4qG,SAASv6F,EAAQw6F,WAAY,KAAMx6F,EAAQy6F,SAAU,WAAc,QAAoB,MAAO,GAAa,EAAC,QAAa7qG,EAA8B,CACtOa,KAAM,WACNvB,MAAO,eACL,QAAoB,OAAQ,GAAa,aAAc,QAAiBS,EAAS4qG,SAASv6F,EAAQy6F,SAAU,OAAQ,QAAoB,IAAI,IAAQ,KAA6B,SAAtBvC,EAAY1hG,QAAoB,WAAc,QAAoB,MAAO,GAAa,EAAC,QAAa5G,EAA8B,CAC/Ra,KAAM,OACNvB,MAAO,eACL,QAAoB,OAAQ,CAC9BA,MAAO,YACPgQ,MAAOc,EAAQ06F,YACd,QAAiB16F,EAAQ06F,WAAaprG,EAAKoB,GAAG,qBAAsB,EAAG,OAAwC,OAAtBwnG,EAAY1hG,QAAkB,WAAc,QAAoB,KAAW,CACrKrG,IAAK,GACJ,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAaP,EAA8B,CACtFa,KAAM,SACNvB,MAAO,eACL,QAAoB,OAAQ,IAAa,QAAiB8Q,EAAQ26F,YAAcrrG,EAAKoB,GAAG,qBAAsB,KAAMsP,EAAQ46F,WAAY,WAAc,QAAoB,MAAO,GAAa,EAAC,QAAahrG,EAA8B,CAC5Oa,KAAM,OACNvB,MAAO,eACL,QAAoB,OAAQ,CAC9BA,MAAO,YACPgQ,MAAOc,EAAQ46F,WACd,QAAiB56F,EAAQ46F,UAAW,EAAG,QAAkB,QAAoB,IAAI,IAAQ,KAA6B,YAAtB1C,EAAY1hG,QAAuB,WAAc,QAAoB,KAAW,CACjLrG,IAAK,GACJ,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAaP,EAA8B,CACtFa,KAAM,QACNvB,MAAO,eACL,QAAoB,OAAQ,GAAa,SAAU,QAAiBS,EAAS4qG,SAASv6F,EAAQw6F,WAAY,MAAM,QAAoB,MAAO,GAAa,EAAC,QAAa5qG,EAA8B,CACtMa,KAAM,UACNvB,MAAO,eACL,QAAoB,OAAQ,GAAa,aAAc,QAAiBS,EAAS4qG,SAASv6F,EAAQ66F,YAAa,KAAM76F,EAAQ86F,UAAW,WAAc,QAAajC,EAAmB,CACxL1oG,IAAK,EACL4O,KAAM,QACN/N,KAAM,WACL,CACDE,SAAS,QAAS,IAAM,IAAK3B,EAAO,MAAQA,EAAO,IAAM,EAAC,QAAiB,SAAU,OACrFyE,EAAG,MACC,QAAoB,IAAI,IAAQ,KAA6B,gBAAtBkkG,EAAY1hG,QAA2B,WAAc,QAAoB,KAAW,CAC/HrG,IAAK,GACJ,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAaP,EAA8B,CACtFa,KAAM,WACNvB,MAAO,eACL,QAAoB,OAAQ,IAAa,QAAiB8Q,EAAQ+6F,MAAQzrG,EAAKoB,GAAG,qBAAsB,KAAMsP,EAAQg7F,YAAa,WAAc,QAAanC,EAAmB,CACnL1oG,IAAK,EACL4O,KAAM,QACN/N,KAAM,WACL,CACDE,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,0BAA2B,KAC9FsD,EAAG,MACC,QAAoB,IAAI,IAAQ,KAA6B,WAAtBkkG,EAAY1hG,QAAsB,WAAc,QAAoB,KAAW,CAC1HrG,IAAK,GACJ,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAaP,EAA8B,CACtFa,KAAM,SACNvB,MAAO,eACL,QAAoB,OAAQ,CAC9BA,MAAO,YACPgQ,MAAOc,EAAQi7F,UACd,QAAiBj7F,EAAQi7F,SAAW3rG,EAAKoB,GAAG,qBAAsB,EAAG,MAAgBsP,EAAQ06F,YAAa,WAAc,QAAoB,MAAO,GAAa,EAAC,QAAa9qG,EAA8B,CAC7Ma,KAAM,OACNvB,MAAO,eACL,QAAoB,OAAQ,CAC9BA,MAAO,YACPgQ,MAAOc,EAAQ06F,YACd,QAAiB16F,EAAQ06F,WAAY,EAAG,QAAkB,QAAoB,IAAI,IAAQ,MAAO,QAAoB,IAAI,KAAS16F,EAAQk7F,OAAOhwC,UAAW,WAAc,QAAoB,MAAO,GAAa,EAAC,QAAaltD,EAAwB,CACzP8C,WAAYnR,EAASwrG,mBAAmBn7F,GACxCO,OAAQ5Q,EAASyrG,eAAep7F,GAChC,eAAgB,GACf,KAAM,EAAG,CAAC,aAAc,YAAY,QAAoB,OAAQ,IAAa,QAAiBrQ,EAAS0rG,aAAar7F,IAAW,OAAQ,QAAoB,IAAI,MAAS,QAAoB,MAAO,GAAa,EAAC,QAAavC,EAAsB,CACrP2rB,KAAM,GACNp4B,KAAM,UACN+N,KAAM,QACNzO,QAASC,GAAUZ,EAAS2rG,iBAAiBpD,EAAY1hG,MAAOpG,IAC/D,CACDc,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,MACNV,MAAO,CACL,eAAgB,UAEhB,SAAiB,QAAiBT,EAAKoB,GAAG,qBAAsB,KACpEsD,EAAG,GACF,EAAG,CAAC,aAAa,QAAayJ,EAAsB,CACrD2rB,KAAM,GACNp4B,KAAM,UACN+N,KAAM,QACNzO,QAASC,GAAUZ,EAAS4rG,eAAerD,EAAY1hG,MAAOpG,IAC7D,CACDc,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,OACNV,MAAO,CACL,eAAgB,UAEhB,SAAiB,QAAiBT,EAAKoB,GAAG,sBAAuB,KACrEsD,EAAG,GACF,EAAG,CAAC,aAAa,QAAayJ,EAAsB,CACrD2rB,KAAM,GACNp4B,KAAM,SACN+N,KAAM,QACNzO,QAASC,GAAUZ,EAAS6rG,cAActD,EAAY1hG,MAAOpG,GAC7DuD,SAAUqM,EAAQi6F,OACjB,CACD/oG,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,YACNV,MAAO,CACL,eAAgB,UAEhB,SAAiB,QAAiBT,EAAKoB,GAAG,wBAAyB,KACvEsD,EAAG,GACF,EAAG,CAAC,UAAW,gBAAiB,GAAI,MACrC,WAAY,WAAc,QAAoB,MAAO,GAAa,EAAC,QAAapE,EAA8B,CAChHa,KAAM,QACNvB,MAAO,gBACL,QAAoB,OAAQ,MAAM,QAAiBI,EAAKoB,GAAG,uBAAwB,CACrFM,KAAMknG,EAAYl5F,SACf,UACH,OAAO,QAAanB,EAAsB,CAC5CrG,WAAY9H,EAAM+pG,cAClB,sBAAuBlqG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAM+pG,cAAgBlpG,GACnF2O,MAAO5P,EAAKoB,GAAG,4BACfxB,MAAO,iBACP,mBAAoB,GACpBusG,SAAU9rG,EAAS+rG,cAClB,CACD5mB,QAAQ,QAAS,IAAM,EAAC,QAAar3E,EAAsB,CACzDnN,QAASf,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAM+pG,eAAgB,IACpE,CACDvoG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,qBAAsB,KACzFsD,EAAG,IACyB,SAA1BtE,EAAMisG,WAAW3qG,OAAmB,WAAc,QAAayM,EAAsB,CACvFtN,IAAK,EACLa,KAAM,UACNV,QAASX,EAASisG,mBACjB,CACD1qG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,yBAA0B,KAC7FsD,EAAG,GACF,EAAG,CAAC,cAAe,QAAoB,IAAI,KAC9C9C,SAAS,QAAS,IAAM,EAAC,QAAakoG,EAAoB,CACxDyC,MAAOnsG,EAAMisG,WACb,iBAAkB,MAClB7rG,IAAK,UACLgsG,MAAOnsG,EAASosG,UACf,CACD7qG,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,8BACfyjC,KAAM,QACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAa8nG,EAAsB,CAC1DxhG,WAAY9H,EAAMisG,WAAW3qG,KAC7B,sBAAuBzB,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMisG,WAAW3qG,KAAOT,GACnF8nG,YAAa/oG,EAAKoB,GAAG,oCACrBX,MAAO,CACL,MAAS,QAEXiF,SAAUrF,EAASqsG,qBAClB,CACD9qG,SAAS,QAAS,IAAM,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYxB,EAAMusG,gBAAiBC,KAC3G,WAAc,QAAanD,EAAsB,CACtD5oG,IAAK+rG,EAAG1lG,MACRwI,MAAOk9F,EAAGl9F,MACVxI,MAAO0lG,EAAG1lG,OACT,CACDtF,SAAS,QAAS,IAAM,EAAC,QAAoB,OAAQ,GAAa,EAAC,QAAa0mG,EAAwB,CACtG5mG,KAAMkrG,EAAG1lG,MACTtH,OAAO,QAAgB,CAAC,qBAAsBS,EAASgqG,oBAAoBuC,EAAG1lG,UAC7E,KAAM,EAAG,CAAC,OAAQ,WAAW,QAAoB,OAAQ,MAAM,QAAiB0lG,EAAGl9F,OAAQ,OAC9FhL,EAAG,GACF,KAAM,CAAC,QAAS,YACjB,QACJA,EAAG,GACF,EAAG,CAAC,aAAc,cAAe,eACpCA,EAAG,GACF,EAAG,CAAC,UAAqC,SAA1BtE,EAAMisG,WAAW3qG,OAAmB,WAAc,QAAoB,MAAO,GAAa,EAAC,QAAapB,EAA8B,CACtJa,KAAM,cACNV,MAAO,CACL,eAAgB,UAEhB,QAAoB,OAAQ,CAC9BosG,UAAW7sG,EAAKoB,GAAG,2BAClB,KAAM,EAAG,SAAmB,WAAc,QAAoB,KAAW,CAC1EP,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxC9kE,KAAM,QACL,CACDn1B,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,+BAAiC,IAAK,IAAI,QAAa6C,EAAuB,CAC7IM,QAASvE,EAAKoB,GAAG,qCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,uBACNvB,MAAO,0BAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAW7qG,KAC7B,sBAAuBvB,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMisG,WAAW7qG,KAAOP,GACnF8nG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,IACyB,aAA1BtE,EAAMisG,WAAW3qG,OAAuB,WAAc,QAAoB,KAAW,CACvFb,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,YACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWnB,SAC7B,sBAAuBjrG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMisG,WAAWnB,SAAWjqG,GACvFS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,kCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,yBACfyjC,KAAM,UACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWlB,OAC7B,sBAAuBlrG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMisG,WAAWlB,OAASlqG,GACrFS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,gCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWS,SAC7B,sBAAuB7sG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMisG,WAAWS,SAAW7rG,GACvF8nG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAY,KAAiC,OAA1BtE,EAAMisG,WAAW3qG,OAAiB,WAAc,QAAoB,KAAW,CACvGb,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,YACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWf,SAC7B,sBAAuBrrG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMisG,WAAWf,SAAWrqG,GACvF8nG,YAAa/oG,EAAKoB,GAAG,kCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,wBAA0B,IAAK,IAAI,QAAa6C,EAAuB,CACtIM,QAASvE,EAAKoB,GAAG,0BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWU,UAC7B,sBAAuB9sG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMisG,WAAWU,UAAY9rG,GACxF8nG,YAAa/oG,EAAKoB,GAAG,mCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,wBACfyjC,KAAM,cACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWhB,WAC7B,sBAAuBprG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWhB,WAAapqG,GAC3F8nG,YAAa/oG,EAAKoB,GAAG,oCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,0BACfyjC,KAAM,UACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWW,OAC7B,sBAAuB/sG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWW,OAAS/rG,GACvF8nG,YAAa/oG,EAAKoB,GAAG,sCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,yBACfyjC,KAAM,eACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWY,YAC7B,sBAAuBhtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWY,YAAchsG,GAC5FS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACfyjC,KAAM,mBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWa,gBAC7B,sBAAuBjtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWa,gBAAkBjsG,GAChGS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,yCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,wBAA0B,IAAK,IAAI,QAAa6C,EAAuB,CACtIM,QAASvE,EAAKoB,GAAG,0BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMisG,WAAWc,UAC7B,sBAAuBltG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWc,UAAYlsG,IACzF,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,yBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMisG,WAAWT,MAAMhwC,QACnC,sBAAuB37D,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWT,MAAMhwC,QAAU36D,IAC7F,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,UAAWtE,EAAMisG,WAAWT,OAAOhwC,UAAW,WAAc,QAAoB,KAAW,CAChG/6D,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMisG,WAAWT,MAAMwB,QACnC,sBAAuBntG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWT,MAAMwB,QAAUnsG,GAC9FkT,IAAK,GACLgxD,KAAM,EACN2oB,UAAW,GACV,KAAM,EAAG,CAAC,iBACbppF,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMisG,WAAWT,MAAMyB,UACnC,sBAAuBptG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWT,MAAMyB,UAAYpsG,GAChGkT,IAAK,GACLD,IAAK,IACLixD,KAAM,GACL,KAAM,EAAG,CAAC,iBACbzgE,EAAG,GACF,EAAG,CAAC,WAAY,MAAO,QAAoB,IAAI,IAAQ,KAAiC,YAA1BtE,EAAMisG,WAAW3qG,OAAsB,WAAc,QAAoB,KAAW,CACnJb,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,YACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWnB,SAC7B,sBAAuBjrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWnB,SAAWjqG,GACzFS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,kCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,4BACfyjC,KAAM,aACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWd,UAC7B,sBAAuBtrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWd,UAAYtqG,GAC1FS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,mCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWS,SAC7B,sBAAuB7sG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWS,SAAW7rG,GACzF8nG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,0BAA4B,IAAK,IAAI,QAAa6C,EAAuB,CACxIM,QAASvE,EAAKoB,GAAG,sBACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMisG,WAAWb,QAC7B,sBAAuBvrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWb,QAAUvqG,IACvF,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACD,QAAoB,MAAO,GAAa,EAAC,QAAapE,EAA8B,CACtFa,KAAM,uBACNV,MAAO,CACL,eAAgB,UAEhB,QAAiB,KAAM,QAAiBT,EAAKoB,GAAG,6BAA8B,MAAO,KAAiC,gBAA1BhB,EAAMisG,WAAW3qG,OAA0B,WAAc,QAAoB,KAAW,CACtLb,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,sBACfyjC,KAAM,QACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWZ,KAC7B,sBAAuBxrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWZ,KAAOxqG,GACrF8nG,YAAa/oG,EAAKoB,GAAG,kCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,yBACfyjC,KAAM,SACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWiB,MAC7B,sBAAuBrtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWiB,MAAQrsG,GACtFS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,0BAA4B,IAAK,IAAI,QAAa6C,EAAuB,CACxIM,QAASvE,EAAKoB,GAAG,4BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMisG,WAAWX,UAC7B,sBAAuBzrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWX,UAAYzqG,IACzF,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACA,KAAiC,WAA1BtE,EAAMisG,WAAW3qG,OAAqB,WAAc,QAAoB,KAAW,CAC7Fb,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,WACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWV,QAC7B,sBAAuB1rG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWV,QAAU1qG,GACxF8nG,YAAa/oG,EAAKoB,GAAG,uCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWkB,SAC7B,sBAAuBttG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWkB,SAAWtsG,GACzF8nG,YAAa/oG,EAAKoB,GAAG,wCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWmB,SAC7B,sBAAuBvtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWmB,SAAWvsG,GACzFS,KAAM,WACN,gBAAiB,GACjBqnG,YAAa/oG,EAAKoB,GAAG,wCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,wBAA0B,IAAK,IAAI,QAAa6C,EAAuB,CACtIM,QAASvE,EAAKoB,GAAG,gCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWjB,UAC7B,sBAAuBnrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWjB,UAAYnqG,GAC1F8nG,YAAa/oG,EAAKoB,GAAG,yCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMisG,WAAWoB,YAC7B,sBAAuBxtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWoB,YAAcxsG,GAC5FS,KAAM,WACNgsG,SAAU,CACRC,QAAS,GAEX5E,YAAa/oG,EAAKoB,GAAG,uCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,oCAAsC,IAAK,IAAI,QAAa6C,EAAuB,CAClJM,QAASvE,EAAKoB,GAAG,sCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMisG,WAAWuB,gBAC7B,sBAAuB3tG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWuB,gBAAkB3sG,IAC/F,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,yBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMisG,WAAWT,MAAMhwC,QACnC,sBAAuB37D,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWT,MAAMhwC,QAAU36D,IAC7F,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,UAAWtE,EAAMisG,WAAWT,OAAOhwC,UAAW,WAAc,QAAoB,KAAW,CAChG/6D,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMisG,WAAWT,MAAMwB,QACnC,sBAAuBntG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWT,MAAMwB,QAAUnsG,GAC9FkT,IAAK,GACLgxD,KAAM,EACN2oB,UAAW,GACV,KAAM,EAAG,CAAC,iBACbppF,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMisG,WAAWT,MAAMyB,UACnC,sBAAuBptG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMisG,WAAWT,MAAMyB,UAAYpsG,GAChGkT,IAAK,GACLD,IAAK,IACLixD,KAAM,GACL,KAAM,EAAG,CAAC,iBACbzgE,EAAG,GACF,EAAG,CAAC,WAAY,MAAO,QAAoB,IAAI,IAAQ,MAAO,QAAoB,IAAI,IAAQ,OACjGA,EAAG,GACF,EAAG,CAAC,QAAS,YAChBA,EAAG,GACF,EAAG,CAAC,aAAc,QAAS,cAAc,QAAa6J,EAAsB,CAC7ErG,WAAY9H,EAAMytG,iBAClB,sBAAuB5tG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMytG,iBAAmB5sG,GACtF2O,MAAO5P,EAAKoB,GAAG,8BAA+B,CAC5CI,KAAMpB,EAAM0tG,gBAAgBtsG,MAAQ,KAEtC5B,MAAO,iBACPusG,SAAU9rG,EAAS0tG,iBAClB,CACDvoB,QAAQ,QAAS,IAAM,EAAC,QAAar3E,EAAsB,CACzDnN,QAASf,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMytG,kBAAmB,IACvE,CACDjsG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,uBAAwB,KAC3FsD,EAAG,KACD,QAAayJ,EAAsB,CACrCzM,KAAM,UACNV,QAASX,EAAS2tG,oBACjB,CACDpsG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,sBAAuB,KAC1FsD,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAaooG,EAA4B,CAChEiE,OAAQ,EACRt0E,OAAQ,IACP,CACD/3B,SAAS,QAAS,IAAM,EAAC,QAAamoG,EAAiC,CACrEr6F,MAAO1P,EAAKoB,GAAG,gCACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBtsG,MAAO,KACxFkD,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,gCACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAAS6tG,oBAAoB9tG,EAAM+tG,qBAAsB,KACpHzpG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa2nG,EAAmB,CACvD7nG,KAAMtB,EAAM0tG,gBAAgBlyC,QAAU,UAAY,QACjD,CACDh6D,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBlyC,QAAU57D,EAAKoB,GAAG,qBAAuBpB,EAAKoB,GAAG,uBAAwB,KAC1JsD,EAAG,GACF,EAAG,CAAC,WACPA,EAAG,GACF,EAAG,CAAC,UAAWtE,EAAM0tG,gBAAgBnD,QAAS,WAAc,QAAaZ,EAAiC,CAC3GlpG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa2nG,EAAmB,CACvD7nG,KAAM,WACL,CACDE,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,0BAA2B,KAC9FsD,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,YAAa,QAAoB,IAAI,GAAoC,aAA7BtE,EAAM+tG,qBAAqC,WAAc,QAAoB,KAAW,CACzIttG,IAAK,GACJ,EAAC,QAAakpG,EAAiC,CAChDr6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAAS4qG,SAAS7qG,EAAM0tG,gBAAgB5C,SAAU,KAAM,KACnHxmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAAS4qG,SAAS7qG,EAAM0tG,gBAAgB3C,OAAQ,IAAK,KAChHzmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBhB,UAAY9sG,EAAKoB,GAAG,qBAAsB,KAC3HsD,EAAG,GACF,EAAG,CAAC,WAAY,KAAoC,SAA7BtE,EAAM+tG,qBAAiC,WAAc,QAAapE,EAAiC,CAC3HlpG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,wBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD,cAAexpG,EAAM0tG,gBAAgB1C,WAAaprG,EAAKoB,GAAG,oBAC1DgtG,SAAU,IACT,KAAM,EAAG,CAAC,kBACb1pG,EAAG,GACF,EAAG,CAAC,WAA0C,OAA7BtE,EAAM+tG,qBAA+B,WAAc,QAAoB,KAAW,CACpGttG,IAAK,GACJ,EAAC,QAAakpG,EAAiC,CAChDr6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD,cAAexpG,EAAM0tG,gBAAgBxC,SACrC8C,SAAU,IACT,KAAM,EAAG,CAAC,kBACb1pG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,wBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD,cAAexpG,EAAM0tG,gBAAgBf,WAAa/sG,EAAKoB,GAAG,oBAC1DgtG,SAAU,IACT,KAAM,EAAG,CAAC,kBACb1pG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,yBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBzC,YAAa,KAC9F3mG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBd,QAAS,KAC1FtoG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,wBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBX,UAAYntG,EAAKoB,GAAG,yBAA2BpB,EAAKoB,GAAG,6BAA8B,KACtKsD,EAAG,GACF,EAAG,CAAC,WAAY,KAAoC,YAA7BtE,EAAM+tG,qBAAoC,WAAc,QAAoB,KAAW,CAC/GttG,IAAK,GACJ,EAAC,QAAakpG,EAAiC,CAChDr6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAAS4qG,SAAS7qG,EAAM0tG,gBAAgB5C,SAAU,KAAM,KACnHxmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAAS4qG,SAAS7qG,EAAM0tG,gBAAgBvC,UAAW,IAAK,KACnH7mG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBhB,UAAY9sG,EAAKoB,GAAG,qBAAsB,KAC3HsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBtC,QAAUxrG,EAAKoB,GAAG,yBAA2BpB,EAAKoB,GAAG,6BAA8B,KACpKsD,EAAG,GACF,EAAG,CAAC,WAAY,KAAoC,gBAA7BtE,EAAM+tG,qBAAwC,WAAc,QAAoB,KAAW,CACnHttG,IAAK,GACJ,EAAC,QAAakpG,EAAiC,CAChDr6F,MAAO1P,EAAKoB,GAAG,uBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBrC,MAAO,KACxF/mG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBpC,UAAY1rG,EAAKoB,GAAG,yBAA2BpB,EAAKoB,GAAG,6BAA8B,KACtKsD,EAAG,GACF,EAAG,CAAC,WAAY,KAAoC,WAA7BtE,EAAM+tG,qBAAmC,WAAc,QAAoB,KAAW,CAC9GttG,IAAK,GACJ,EAAC,QAAakpG,EAAiC,CAChDr6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD,cAAexpG,EAAM0tG,gBAAgBnC,QACrCyC,SAAU,IACT,KAAM,EAAG,CAAC,kBACb1pG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,wBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD,cAAexpG,EAAM0tG,gBAAgB1C,WAAaprG,EAAKoB,GAAG,oBAC1DgtG,SAAU,IACT,KAAM,EAAG,CAAC,kBACb1pG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBP,UAAYvtG,EAAKoB,GAAG,qBAAsB,KAC3HsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD,cAAevpG,EAASguG,cAAcjuG,EAAM0tG,gBAAgB/N,SAC5Dr+F,KAAM,WACNgsG,SAAU,CACRC,QAAS,GAEXS,SAAU,IACT,KAAM,EAAG,CAAC,kBACb1pG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,oCACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,SAA2D,IAA1CxB,EAAM0tG,gBAAgBF,gBAA4B5tG,EAAKoB,GAAG,yBAA2BpB,EAAKoB,GAAG,6BAA8B,KACtLsD,EAAG,GACF,EAAG,CAAC,WAAY,MAAO,QAAoB,IAAI,GAAOtE,EAAM0tG,gBAAgBlC,OAAOhwC,UAAW,WAAc,QAAoB,KAAW,CAC5I/6D,IAAK,GACJ,EAAC,QAAakpG,EAAiC,CAChDr6F,MAAO1P,EAAKoB,GAAG,yBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBlC,OAAOwB,SAAW,MAAO,KAC1G1oG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,CAC9Dr6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBxB,EAAM0tG,gBAAgBlC,OAAOyB,WAAa,IAAK,KAC1G3oG,EAAG,GACF,EAAG,CAAC,WAAW,QAAaqlG,EAAiC,KAAM,CACpEr6F,OAAO,QAAS,IAAM,EAAC,QAAoB,OAAQ,GAAa,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,2BAA6B,IAAK,IAAI,QAAa+M,EAAsB,CAClLmgG,KAAM,GACN5sG,KAAM,UACNV,QAASX,EAASkuG,aAClB3uG,MAAO,eACN,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,WACNvB,OAAO,QAAgB,CACrB,UAAWQ,EAAMouG,gBAElB,KAAM,EAAG,CAAC,YACb9pG,EAAG,GACF,EAAG,CAAC,gBACP9C,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAa8M,EAAwB,CACrG8C,WAAYnR,EAASwrG,mBAAmBzrG,EAAM0tG,gBAC9C78F,OAAQ5Q,EAASyrG,eAAe1rG,EAAM0tG,gBACtC,eAAgB,GAChB,eAAe,EACfp2E,OAAQ,IAAMr3B,EAAS0rG,aAAa3rG,EAAM0tG,iBACzC,KAAM,EAAG,CAAC,aAAc,SAAU,YAAY,QAAoB,MAAO,CAC1EluG,OAAO,QAAgB,CAAC,aAAc,CACpC,gBAAiBS,EAASouG,gBAAgBruG,EAAM0tG,qBAEjD,QAAiBztG,EAASquG,mBAAmBtuG,EAAM0tG,iBAAkB,OACxEppG,EAAG,KACA,MAAO,QAAoB,IAAI,KACpCA,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,aAAc,QAAS,cAAc,QAAa6J,EAAsB,CAC7ErG,WAAY9H,EAAMuuG,eAClB,sBAAuB1uG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMuuG,eAAiB1tG,GACpF2O,MAAO5P,EAAKoB,GAAG,4BAA6B,CAC1CI,KAAMpB,EAAMwuG,aAAaptG,MAAQ,KAEnC5B,MAAO,iBACP,mBAAoB,GACpBusG,SAAU9rG,EAASwuG,eAClB,CACDrpB,QAAQ,QAAS,IAAM,EAAC,QAAar3E,EAAsB,CACzDnN,QAASf,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMuuG,gBAAiB,IACrE,CACD/sG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,qBAAsB,KACzFsD,EAAG,KACD,QAAayJ,EAAsB,CACrCzM,KAAM,UACNV,QAASX,EAASyuG,oBACjB,CACDltG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,0BAA2B,KAC9FsD,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAakoG,EAAoB,CACxDyC,MAAOnsG,EAAMwuG,YACb,iBAAkB,MAClBpuG,IAAK,WACLgsG,MAAOnsG,EAAS0uG,WACf,CACDntG,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7D9kE,KAAM,QACL,CACDn1B,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,+BAAiC,IAAK,IAAI,QAAa6C,EAAuB,CAC7IM,QAASvE,EAAKoB,GAAG,wCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,uBACNvB,MAAO,0BAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYptG,KAC9B,sBAAuBvB,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYptG,KAAOP,GACtFoD,SAAU,IACT,KAAM,EAAG,CAAC,iBACbK,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYhzC,QAC9B,sBAAuB37D,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhzC,QAAU36D,IACxF,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,UAAwC,aAA7BtE,EAAM+tG,qBAAqC,WAAc,QAAoB,KAAW,CACxGttG,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,YACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY1D,SAC9B,sBAAuBjrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY1D,SAAWjqG,GAC1FoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,yBACfyjC,KAAM,UACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYzD,OAC9B,sBAAuBlrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYzD,OAASlqG,GACxFoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY9B,SAC9B,sBAAuB7sG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY9B,SAAW7rG,GAC1F8nG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAY,KAAoC,SAA7BtE,EAAM+tG,qBAAiC,WAAc,QAAoB,KAAW,CAC5GttG,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,wBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYxD,UAC9B,sBAAuBnrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYxD,UAAYnqG,IAC1F,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,yBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYhD,MAAMhwC,QACpC,sBAAuB37D,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMhwC,QAAU36D,GAC/FyE,SAAUzF,EAAO,MAAQA,EAAO,IAAMslB,GAAOllB,EAAS2uG,qBAAqBzpF,EAAKnlB,EAAMwuG,eACrF,KAAM,EAAG,CAAC,iBACblqG,EAAG,GACF,EAAG,CAAC,UAAWtE,EAAMwuG,YAAYhD,OAAOhwC,UAAW,WAAc,QAAoB,KAAW,CACjG/6D,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMwuG,YAAYhD,MAAMwB,QACpC,sBAAuBntG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMwB,QAAUnsG,GAC/FkT,IAAK,GACLgxD,KAAM,EACN2oB,UAAW,GACV,KAAM,EAAG,CAAC,iBACbppF,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMwuG,YAAYhD,MAAMyB,UACpC,sBAAuBptG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMyB,UAAYpsG,GACjGkT,IAAK,GACLD,IAAK,IACLixD,KAAM,GACL,KAAM,EAAG,CAAC,iBACbzgE,EAAG,GACF,EAAG,CAAC,WAAY,MAAO,QAAoB,IAAI,IAAQ,KAAoC,OAA7BtE,EAAM+tG,qBAA+B,WAAc,QAAoB,KAAW,CACjJttG,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,YACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYtD,SAC9B,sBAAuBrrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYtD,SAAWrqG,GAC1FoD,SAAUjE,EAAMwuG,YAAYjE,OAC3B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,wBAA0B,IAAK,IAAI,QAAa6C,EAAuB,CACtIM,QAASvE,EAAKoB,GAAG,0BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY7B,UAC9B,sBAAuB9sG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY7B,UAAY9rG,GAC3F8nG,YAAa/oG,EAAKoB,GAAG,mCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,wBACfyjC,KAAM,cACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYvD,WAC9B,sBAAuBprG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYvD,WAAapqG,GAC5FoD,SAAUjE,EAAMwuG,YAAYjE,OAC3B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,0BACfyjC,KAAM,UACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY5B,OAC9B,sBAAuB/sG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY5B,OAAS/rG,GACxFoD,SAAUjE,EAAMwuG,YAAYjE,OAC3B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,yBACfyjC,KAAM,eACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY3B,YAC9B,sBAAuBhtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY3B,YAAchsG,GAC7FoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACfyjC,KAAM,mBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY1B,gBAC9B,sBAAuBjtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY1B,gBAAkBjsG,GACjGoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,wBAA0B,IAAK,IAAI,QAAa6C,EAAuB,CACtIM,QAASvE,EAAKoB,GAAG,0BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYzB,UAC9B,sBAAuBltG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYzB,UAAYlsG,GAC3FoD,SAAUjE,EAAMwuG,YAAYjE,OAC3B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,yBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYhD,MAAMhwC,QACpC,sBAAuB37D,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMhwC,QAAU36D,GAC/FyE,SAAUzF,EAAO,MAAQA,EAAO,IAAMslB,GAAOllB,EAAS2uG,qBAAqBzpF,EAAKnlB,EAAMwuG,eACrF,KAAM,EAAG,CAAC,iBACblqG,EAAG,GACF,EAAG,CAAC,UAAWtE,EAAMwuG,YAAYhD,OAAOhwC,UAAW,WAAc,QAAoB,KAAW,CACjG/6D,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMwuG,YAAYhD,MAAMwB,QACpC,sBAAuBntG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMwB,QAAUnsG,GAC/FkT,IAAK,GACLgxD,KAAM,EACN2oB,UAAW,GACV,KAAM,EAAG,CAAC,iBACbppF,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMwuG,YAAYhD,MAAMyB,UACpC,sBAAuBptG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMyB,UAAYpsG,GACjGkT,IAAK,GACLD,IAAK,IACLixD,KAAM,GACL,KAAM,EAAG,CAAC,iBACbzgE,EAAG,GACF,EAAG,CAAC,WAAY,MAAO,QAAoB,IAAI,IAAQ,KAAoC,YAA7BtE,EAAM+tG,qBAAoC,WAAc,QAAoB,KAAW,CACtJttG,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,YACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY1D,SAC9B,sBAAuBjrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY1D,SAAWjqG,GAC1FoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,4BACfyjC,KAAM,aACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYrD,UAC9B,sBAAuBtrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYrD,UAAYtqG,GAC3FoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAY9B,SAC9B,sBAAuB7sG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAY9B,SAAW7rG,GAC1F8nG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,0BAA4B,IAAK,IAAI,QAAa6C,EAAuB,CACxIM,QAASvE,EAAKoB,GAAG,sBACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYpD,QAC9B,sBAAuBvrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYpD,QAAUvqG,IACxF,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACA,KAAoC,gBAA7BtE,EAAM+tG,qBAAwC,WAAc,QAAoB,KAAW,CACrGttG,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,sBACfyjC,KAAM,QACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYnD,KAC9B,sBAAuBxrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYnD,KAAOxqG,GACtFoD,SAAUjE,EAAMwuG,YAAYjE,OAC3B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,yBACfyjC,KAAM,SACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYtB,MAC9B,sBAAuBrtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYtB,MAAQrsG,GACvFoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,0BAA4B,IAAK,IAAI,QAAa6C,EAAuB,CACxIM,QAASvE,EAAKoB,GAAG,4BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYlD,UAC9B,sBAAuBzrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYlD,UAAYzqG,IAC1F,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACA,KAAoC,WAA7BtE,EAAM+tG,qBAAmC,WAAc,QAAoB,KAAW,CAChGttG,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,WACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYjD,QAC9B,sBAAuB1rG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYjD,QAAU1qG,GACzFoD,SAAUjE,EAAMwuG,YAAYjE,OAC3B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYrB,SAC9B,sBAAuBttG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYrB,SAAWtsG,GAC1FoD,SAAUjE,EAAMwuG,YAAYjE,OAC3B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYpB,SAC9B,sBAAuBvtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYpB,SAAWvsG,GAC1FoD,SAAUjE,EAAMwuG,YAAYjE,MAC5BjpG,KAAM,WACN,gBAAiB,IAChB,KAAM,EAAG,CAAC,aAAc,eAC3BgD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,wBAA0B,IAAK,IAAI,QAAa6C,EAAuB,CACtIM,QAASvE,EAAKoB,GAAG,gCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYxD,UAC9B,sBAAuBnrG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYxD,UAAYnqG,GAC3F8nG,YAAa/oG,EAAKoB,GAAG,yCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMwuG,YAAYnB,YAC9B,sBAAuBxtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYnB,YAAcxsG,GAC7FS,KAAM,WACNgsG,SAAU,CACRC,QAAS,GAEX5E,YAAa/oG,EAAKoB,GAAG,uCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,oCAAsC,IAAK,IAAI,QAAa6C,EAAuB,CAClJM,QAASvE,EAAKoB,GAAG,sCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNvB,MAAO,uBAET8E,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYhB,gBAC9B,sBAAuB3tG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhB,gBAAkB3sG,IAChG,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,yBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMwuG,YAAYhD,MAAMhwC,QACpC,sBAAuB37D,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMhwC,QAAU36D,GAC/FyE,SAAUzF,EAAO,MAAQA,EAAO,IAAMslB,GAAOllB,EAAS2uG,qBAAqBzpF,EAAKnlB,EAAMwuG,eACrF,KAAM,EAAG,CAAC,iBACblqG,EAAG,GACF,EAAG,CAAC,UAAWtE,EAAMwuG,YAAYhD,OAAOhwC,UAAW,WAAc,QAAoB,KAAW,CACjG/6D,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMwuG,YAAYhD,MAAMwB,QACpC,sBAAuBntG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMwB,QAAUnsG,GAC/FkT,IAAK,GACLgxD,KAAM,EACN2oB,UAAW,GACV,KAAM,EAAG,CAAC,iBACbppF,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAMwuG,YAAYhD,MAAMyB,UACpC,sBAAuBptG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMwuG,YAAYhD,MAAMyB,UAAYpsG,GACjGkT,IAAK,GACLD,IAAK,IACLixD,KAAM,GACL,KAAM,EAAG,CAAC,iBACbzgE,EAAG,GACF,EAAG,CAAC,WAAY,MAAO,QAAoB,IAAI,IAAQ,MAAO,QAAoB,IAAI,KACzFA,EAAG,GACF,EAAG,CAAC,QAAS,YAChBA,EAAG,GACF,EAAG,CAAC,aAAc,QAAS,gBAAiB,CAAC,CAACkK,EAAoBxO,EAAMgS,UAC7E,CCr8CA,QACEoxF,WAAY,CACVsF,YAAW,KACXmG,aAAY,IAEd,IAAAntG,GACE,MAAO,CAELmoG,cAAe,GAEfiF,SAAU,CAAC,CACThoG,MAAO,WACPwI,MAAO,YACN,CACDxI,MAAO,OACPwI,MAAO,iBACN,CACDxI,MAAO,KACPwI,MAAO,MACN,CACDxI,MAAO,UACPwI,MAAO,WACN,CACDxI,MAAO,cACPwI,MAAO,eACN,CACDxI,MAAO,SACPwI,MAAO,WAGTi9F,gBAAiB,CAAC,CAChBzlG,MAAO,WACPwI,MAAO,YACN,CACDxI,MAAO,OACPwI,MAAO,iBACN,CACDxI,MAAO,KACPwI,MAAO,MACN,CACDxI,MAAO,UACPwI,MAAO,WACN,CACDxI,MAAO,cACPwI,MAAO,eACN,CACDxI,MAAO,SACPwI,MAAO,WAGTy/F,iBAAkB,CAChB1E,YAAa,CACX7uC,SAAS,GAEXszC,SAAU,IAEZE,aAAc,CACZF,SAAU,IAEZG,WAAY,CACV5E,YAAa,CACX7uC,SAAS,GAEXszC,SAAU,IAEZI,gBAAiB,CACf7E,YAAa,CACX7uC,SAAS,GAEXszC,SAAU,IAEZK,oBAAqB,CACnB9E,YAAa,CACX7uC,SAAS,GAEXszC,SAAU,IAEZM,eAAgB,CACd/E,YAAa,CACX7uC,SAAS,GAEXszC,SAAU,IAGZ/E,eAAe,EACf0D,kBAAkB,EAClBc,gBAAgB,EAEhBR,mBAAoB,GACpBsB,qBAAsB,EACtB3B,eAAgB,KAChBc,YAAa,CAAC,EAEdvC,WAAY,CACV3qG,KAAM,GACNF,KAAM,GACNo6D,SAAS,EAETsvC,SAAU,GACVC,OAAQ,GACR2B,SAAU,GAEVxB,SAAU,GACVyB,UAAW,GACX1B,WAAY,GACZ2B,OAAQ,OACRC,YAAa,GACbC,gBAAiB,GACjBC,WAAW,EACXvB,MAAO,CACLhwC,SAAS,EACTwxC,QAAS,GACTC,UAAW,IAGb9B,UAAW,GACXC,SAAS,EAETC,KAAM,GACN6B,MAAO,GACP5B,WAAW,EAEXC,QAAS,GACT4B,SAAU,GACVC,SAAU,GACVpC,UAAW,GACXqC,YAAa,GACbG,iBAAiB,GAGnB8B,WAAY,CAAC,EACblB,cAAc,EAEdp8F,SAAS,EAEb,EACApQ,SAAU,CAER,aAAAkoG,GACE,MAAO,CAAC,CACNhjG,MAAO,GACPwI,MAAOtN,KAAKhB,GAAG,kBACXgB,KAAK8sG,SAASj4F,IAAI21F,IAAM,CAC5B1lG,MAAO0lG,EAAG1lG,MACVwI,MAAOk9F,EAAGl9F,MACVk5F,YAAagE,EAAG1lG,MAChB2hG,UAAWzmG,KAAKioG,oBAAoBuC,EAAG1lG,UAE3C,EAEA,gBAAAkjG,GACE,OAAKhoG,KAAK6nG,cAGH7nG,KAAK8sG,SAAS/lE,OAAOyjE,GAAMA,EAAG1lG,QAAU9E,KAAK6nG,eAF3C7nG,KAAK8sG,QAGhB,EACA,QAAAzC,GACE,MAAO,CACL/qG,KAAM,CAAC,CACL+2F,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,WAEX53D,KAAM,CAAC,CACLi3F,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,QACR,CACDu2C,QAAS,gCACT/9F,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,SAEX8xC,SAAU,CAAC,CACTzS,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,iCACjBg4D,QAAS,SAEX+xC,OAAQ,CAAC,CACP1S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,+BACjBg4D,QAAS,SAEXmyC,UAAW,CAAC,CACV9S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,kCACjBg4D,QAAS,SAEXkyC,SAAU,CAAC,CACT7S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,iCACjBg4D,QAAS,SAEXiyC,WAAY,CAAC,CACX5S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,mCACjBg4D,QAAS,SAEX4zC,OAAQ,CAAC,CACPvU,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,qCACjBg4D,QAAS,SAEX6zC,YAAa,CAAC,CACZxU,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,SAEX8zC,gBAAiB,CAAC,CAChBzU,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,wCACjBg4D,QAAS,SAEXqyC,KAAM,CAAC,CACLhT,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,iCACjBg4D,QAAS,SAEXk0C,MAAO,CAAC,CACN7U,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,SAEXuyC,QAAS,CAAC,CACRlT,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,sCACjBg4D,QAAS,SAGf,EACA,SAAA21C,GACE,MAAO,CACLvtG,KAAM,CAAC,CACLi3F,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,QACR,CACDu2C,QAAS,gCACT/9F,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,SAEX8xC,SAAU,CAAC,CACTzS,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,iCACjBg4D,QAAS,SAEX+xC,OAAQ,CAAC,CACP1S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,+BACjBg4D,QAAS,SAEXmyC,UAAW,CAAC,CACV9S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,kCACjBg4D,QAAS,SAEXkyC,SAAU,CAAC,CACT7S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,iCACjBg4D,QAAS,SAEXiyC,WAAY,CAAC,CACX5S,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,mCACjBg4D,QAAS,SAEX4zC,OAAQ,CAAC,CACPvU,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,qCACjBg4D,QAAS,SAEX6zC,YAAa,CAAC,CACZxU,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,SAEX8zC,gBAAiB,CAAC,CAChBzU,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,wCACjBg4D,QAAS,SAEXqyC,KAAM,CAAC,CACLhT,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,iCACjBg4D,QAAS,SAEXk0C,MAAO,CAAC,CACN7U,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,oCACjBg4D,QAAS,SAEXuyC,QAAS,CAAC,CACRlT,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,sCACjBg4D,QAAS,SAGf,GAEF32D,QAAS,CAEP,mBAAAooG,CAAoBh8D,EAAO+5D,EAAa9nG,GACtC,MAAM8uG,EAAO/gE,EAAMghE,cACb7uE,EAAO4uE,EAAKnhE,wBACZ32B,EAAI+2B,EAAMH,QAAU1N,EAAKnQ,KACzB9H,EAAI8lB,EAAMF,QAAU3N,EAAKrK,IACzBm5E,EAAS,QAAQlH,KAAe9nG,IAChCivG,EAAS3tG,KAAKU,MAAMgtG,GACtBC,GAAUA,EAAO,KACnBA,EAAO,GAAGtvG,MAAMuoF,QAAU,IAC1B+mB,EAAO,GAAGtvG,MAAMowB,KAAO,GAAG/Y,MAC1Bi4F,EAAO,GAAGtvG,MAAMk2B,IAAM,GAAG5N,MAE7B,EACA,oBAAAgiF,CAAqBnC,EAAa9nG,GAChC,MAAMgvG,EAAS,QAAQlH,KAAe9nG,IAChCivG,EAAS3tG,KAAKU,MAAMgtG,GACtBC,GAAUA,EAAO,KACnBA,EAAO,GAAGtvG,MAAMuoF,QAAU,IAE9B,EACA,mBAAAqhB,CAAoB3oG,GAClB,MAAO,iBAAiBA,GAC1B,EAEA,mBAAAwsG,CAAoBxsG,GAClB,MAAMgP,EAAUtO,KAAK8sG,SAASnmD,KAAK9zC,GAAKA,EAAE/N,QAAUxF,GACpD,OAAOgP,EAAUA,EAAQhB,MAAQhO,CACnC,EAEA,cAAA4oG,CAAe5oG,GACb,OAAOU,KAAKooG,YAAY9oG,IAAOwtG,UAAY,EAC7C,EAEA,WAAA1E,CAAY9oG,GACV,MAAMuV,EAAM,CACV+4F,SAAU5tG,KAAK+sG,iBACfc,KAAM7tG,KAAKgtG,aACXc,GAAI9tG,KAAKitG,WACTc,QAAS/tG,KAAKktG,gBACdc,YAAahuG,KAAKmtG,oBAClBc,OAAQjuG,KAAKotG,gBAEf,OAAOv4F,EAAIvV,EACb,EAEA,cAAA6oG,CAAe7oG,GACb,MAAO,CAAC,WAAY,KAAM,UAAW,cAAe,UAAUi3B,SAASj3B,EACzE,EAEA,QAAAupG,CAASnxE,EAAMw2E,EAAa,GAC1B,OAAKx2E,EACDA,EAAKhxB,QAAuB,EAAbwnG,EAAuB,OACnCx2E,EAAK1T,MAAM,EAAGkqF,GAAc,OAASx2E,EAAK1T,OAAOkqF,GAFtCluG,KAAKhB,GAAG,mBAG5B,EACA,aAAAitG,CAActO,GACZ,OAAKA,GAA8B,kBAAZA,GAAwD,IAAhC3vF,OAAOC,KAAK0vF,GAASj3F,OAC3D1G,KAAKhB,GAAG,oBAEM,kBAAZ2+F,EACFA,EAEF7oE,KAAKC,UAAU4oE,EAAS,KAAM,EACvC,EACA,aAAAwQ,CAAcxQ,GACZ,OAAKA,EACkB,kBAAZA,EAA6BA,EACjC7oE,KAAKC,UAAU4oE,EAAS,KAAM,GAFhB,EAGvB,EACA,gBAAAyQ,CAAiB12E,GACf,IAAKA,IAASA,EAAKl0B,OAAQ,MAAO,CAAC,EACnC,IACE,MAAMokC,EAAS9S,KAAK+S,MAAMnQ,GAC1B,OAAKkQ,GAA4B,kBAAXA,GAAuB7hC,MAAM6O,QAAQgzB,GAClD,KAEFA,CACT,CAAE,MAAO2hC,GACP,OAAO,IACT,CACF,EAEA,gBAAAqgC,CAAiBtqG,EAAMZ,GACrBsB,KAAK+rG,mBAAqBzsG,EAC1BU,KAAKqtG,oBAAsB3uG,EAC3BsB,KAAK0rG,eAAiB1rG,KAAKkoG,eAAe5oG,GAAMZ,GAChDsB,KAAKyrG,kBAAmB,CAC1B,EAEA,cAAA5B,CAAevqG,EAAMZ,GACnBsB,KAAK+rG,mBAAqBzsG,EAC1BU,KAAKqtG,oBAAsB3uG,EAC3B,MAAM4P,EAAUtO,KAAKkoG,eAAe5oG,GAAMZ,GAC1CsB,KAAKwsG,YAAc13E,KAAK+S,MAAM/S,KAAKC,UAAUzmB,IAChC,WAAThP,IACFU,KAAKwsG,YAAYnB,YAAcrrG,KAAKmuG,cAAcnuG,KAAKwsG,YAAY7O,SACnE39F,KAAKwsG,YAAYhB,iBAAuD,IAArCxrG,KAAKwsG,YAAYhB,iBAGjDxrG,KAAKwsG,YAAYhD,QACpBxpG,KAAKwsG,YAAYhD,MAAQ,CACvBhwC,SAAS,EACTwxC,QAAS,GACTC,UAAW,KAGfjrG,KAAKusG,gBAAiB,CACxB,EAEA,kBAAAX,GACE5rG,KAAKyrG,kBAAmB,EACxBzrG,KAAK6pG,eAAe7pG,KAAK+rG,mBAAoB/rG,KAAKqtG,oBACpD,EAEA,YAAArD,GACEhqG,KAAKiqG,WAAa,CAChB3qG,KAAM,GACNF,KAAM,GACNo6D,SAAS,EACTsvC,SAAU,GACVC,OAAQ,GACR2B,SAAU,GACVxB,SAAU,GACVD,WAAY,GACZ2B,OAAQ,OACRC,YAAa,GACbC,gBAAiB,GACjBC,WAAW,EACXvB,MAAO,CACLhwC,SAAS,EACTwxC,QAAS,GACTC,UAAW,IAEb9B,UAAW,GACXC,SAAS,EACTC,KAAM,GACN6B,MAAO,GACP5B,WAAW,EACXC,QAAS,GACT4B,SAAU,GACVC,SAAU,GACVpC,UAAW,GACXqC,YAAa,GACbG,iBAAiB,EAErB,EAEA,eAAAG,GACE3rG,KAAK0rG,eAAiB,IACxB,EAEA,aAAAe,GACEzsG,KAAKwsG,YAAc,CAAC,CACtB,EAEA,mBAAAlC,GAEE,MAAM,KACJhrG,EAAI,KACJF,GACEY,KAAKiqG,WACTjqG,KAAKiqG,WAAa,CAChB3qG,OACAF,OACAo6D,SAAS,EACTsvC,SAAU,GACVC,OAAQ,GACR2B,SAAU,GACVxB,SAAU,GACVyB,UAAW,GACX1B,WAAY,GACZ2B,OAAQ,OACRC,YAAa,GACbC,gBAAiB,GACjBC,WAAW,EACXvB,MAAO,CACLhwC,SAAS,EACTwxC,QAAS,GACTC,UAAW,IAEb9B,UAAW,GACXC,SAAS,EACTC,KAAM,GACN6B,MAAO,GACP5B,WAAW,EACXC,QAAS,GACT4B,SAAU,GACVC,SAAU,GACVpC,UAAW,GACXqC,YAAa,GACbG,iBAAiB,EAErB,EAEA,iBAAAtB,GACElqG,KAAKU,MAAM2tG,QAAQC,SAAS/rF,IAC1B,IAAKA,EAAO,OACZ,MAAM,KACJjjB,EAAI,KACJF,GACEY,KAAKiqG,WACHjL,EAAWh/F,KAAKooG,YAAY9oG,GAG5BivG,EAAgB,CAAC,eAAgB,SAAU,SAAU,cAAe,kBAAmB,cAC7F,GAAIA,EAAch4E,SAASn3B,GAEzB,YADAY,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,2BAKhC,MAAMwvG,EAAcxP,EAAS8N,SAAS7kC,KAAKuiC,GAAMA,EAAGprG,OAASA,GAC7D,GAAIovG,EAEF,YADAxuG,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,4BAGhC,IAAIyvG,EAAiB,CACnB19F,GAAIiuF,EAAS8N,SAASpmG,OAAS,EAC/BtH,KAAMY,KAAKiqG,WAAW7qG,KACtBE,KAAMA,EACNovG,SAAU,WACVl1C,SAAS,EACT+uC,OAAO,GAIT,GAAa,aAATjpG,EACF0O,OAAO8T,OAAO2sF,EAAgB,CAC5B3F,SAAU9oG,KAAKiqG,WAAWnB,SAC1BC,OAAQ/oG,KAAKiqG,WAAWlB,OACxB2B,SAAU1qG,KAAKiqG,WAAWS,gBAEvB,GAAa,OAATprG,EACT0O,OAAO8T,OAAO2sF,EAAgB,CAC5BvF,SAAUlpG,KAAKiqG,WAAWf,SAC1ByB,UAAW3qG,KAAKiqG,WAAWU,UAC3B1B,WAAYjpG,KAAKiqG,WAAWhB,WAC5B2B,OAAQ5qG,KAAKiqG,WAAWW,OACxBC,YAAa7qG,KAAKiqG,WAAWY,YAC7BC,gBAAiB9qG,KAAKiqG,WAAWa,gBACjCC,UAAW/qG,KAAKiqG,WAAWc,UAC3BvB,MAAO,IACFxpG,KAAKiqG,WAAWT,cAGlB,GAAa,YAATlqG,EACT0O,OAAO8T,OAAO2sF,EAAgB,CAC5B3F,SAAU9oG,KAAKiqG,WAAWnB,SAC1BK,UAAWnpG,KAAKiqG,WAAWd,UAC3BuB,SAAU1qG,KAAKiqG,WAAWS,SAC1BtB,QAASppG,KAAKiqG,WAAWb,eAEtB,GAAa,gBAAT9pG,EACT0O,OAAO8T,OAAO2sF,EAAgB,CAC5BpF,KAAMrpG,KAAKiqG,WAAWZ,KACtB6B,MAAOlrG,KAAKiqG,WAAWiB,MACvB5B,UAAWtpG,KAAKiqG,WAAWX,iBAExB,GAAa,WAAThqG,EAAmB,CAC5B,MAAMq+F,EAAU39F,KAAKouG,iBAAiBpuG,KAAKiqG,WAAWoB,aACtD,GAAgB,OAAZ1N,EAEF,YADA39F,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,mCAGhCgP,OAAO8T,OAAO2sF,EAAgB,CAC5BlF,QAASvpG,KAAKiqG,WAAWV,QACzB4B,SAAUnrG,KAAKiqG,WAAWkB,SAC1BC,SAAUprG,KAAKiqG,WAAWmB,SAC1BpC,UAAWhpG,KAAKiqG,WAAWjB,UAC3BrL,UACA6N,iBAAqD,IAApCxrG,KAAKiqG,WAAWuB,gBACjChC,MAAO,IACFxpG,KAAKiqG,WAAWT,QAGzB,CACAxK,EAAS8N,SAAS9lF,KAAKynF,GACvBzuG,KAAK+nG,eAAgB,EAErB/nG,KAAKsoG,gBAET,EAEA,kBAAAoE,GACE1sG,KAAKU,MAAMiuG,SAASL,SAAS/rF,IAC3B,IAAKA,EAAO,OACZ,MAAMy8E,EAAWh/F,KAAKooG,YAAYpoG,KAAK+rG,oBACjC6C,EAAe5uG,KAAKqtG,oBACpBwB,EAAe7P,EAAS8N,SAAS8B,IAAexvG,MAAQY,KAAKwsG,YAAYptG,KACzE0vG,EAAgB,IACjB9uG,KAAKwsG,YACRptG,KAAMyvG,GAER,GAAgC,WAA5B7uG,KAAK+rG,mBAAiC,CACxC,MAAMpO,EAAU39F,KAAKouG,iBAAiBU,EAAczD,aACpD,GAAgB,OAAZ1N,EAEF,YADA39F,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,mCAGhC8vG,EAAcnR,QAAUA,EACxBmR,EAActD,iBAAoD,IAAlCsD,EAActD,uBACvCsD,EAAczD,WACvB,CACArM,EAAS8N,SAAS9sG,KAAKqtG,qBAAuByB,EAC9C9uG,KAAKusG,gBAAiB,EAEtBvsG,KAAKsoG,gBAET,EAEA,aAAAwB,CAAcxqG,EAAMZ,GAClB,MAAM4P,EAAUtO,KAAKkoG,eAAe5oG,GAAMZ,GACtC4P,EAAQi6F,MACVvoG,KAAK2kG,SAASC,QAAQ5kG,KAAKhB,GAAG,uCAGhCgB,KAAKmlG,SAASnlG,KAAKhB,GAAG,kCAAmCgB,KAAKhB,GAAG,kBAAmB,CAClFomG,kBAAmBplG,KAAKhB,GAAG,kBAC3BqmG,iBAAkBrlG,KAAKhB,GAAG,iBAC1BM,KAAM,YACLo4C,KAAK,KACN,MAAMsnD,EAAWh/F,KAAKooG,YAAY9oG,GAClC0/F,EAAS8N,SAASx/E,OAAO5uB,EAAO,GAEhCsgG,EAAS8N,SAAS//E,QAAQ,CAACvuB,EAAMgW,KAC/BhW,EAAKuS,GAAKyD,EAAI,IAGhBxU,KAAKsoG,iBACJyG,MAAM,OACX,EACA,YAAAzG,GAEE,MAAMtJ,EAAW,CACf4O,SAAU5tG,KAAK+sG,iBACfc,KAAM7tG,KAAKgtG,aACXc,GAAI9tG,KAAKitG,WACTc,QAAS/tG,KAAKktG,gBACdc,YAAahuG,KAAKmtG,oBAClBc,OAAQjuG,KAAKotG,iBAEf,EAAAzR,GAAA,GAAc,+BAAgC,CAC5C3uE,OAAQ,OACR2wE,QAAS,CACP,eAAgB,oBAElBxa,KAAMruD,KAAKC,UAAUiqE,KACpBtnD,KAAK,KACN13C,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,6BAElC,EAEA,kBAAMmtG,GACJnsG,KAAKosG,cAAe,EACpB,IAEE,MAAMhR,QAAiB,EAAAO,GAAA,GAAc,oBAAqB,CACxD3uE,OAAQ,SAEJttB,QAAa07F,EAASU,OAC5B,GAAIp8F,EAAKq8F,QACP/7F,KAAKstG,WAAa5tG,EAAKwO,cAAgB,CAAC,MACnC,CAEL,MAAM8gG,QAAoB,EAAArT,GAAA,GAAc,qBAClCsT,QAAgBD,EAAYlT,OAC9BmT,EAAQlT,UACV/7F,KAAKstG,WAAa2B,EAAQ3B,YAAc,CAAC,EAE7C,CACF,CAAE,MAAO/jC,GACPxmC,QAAQwmC,MAAM,iCAAkCA,EAClD,CAAE,QACAvpE,KAAKosG,cAAe,CACtB,CACF,EAEA,oBAAM8C,GACJ,IACE,MAAM9T,QAAiB,EAAAO,GAAA,GAAc,qBAC/Bj8F,QAAa07F,EAASU,OACxBp8F,EAAKq8F,UACP/7F,KAAKstG,WAAa5tG,EAAK4tG,YAAc,CAAC,EAE1C,CAAE,MAAO/jC,GACPxmC,QAAQwmC,MAAM,8BAA+BA,EAC/C,CACF,EAEA,gBAAA4lC,CAAiB7gG,GACf,MAAM0zF,EAAQhiG,KAAKstG,WAAWh/F,EAAQlP,MACtC,OAAK4iG,GACGA,EAAMoN,QAAU,GAAK,KADV,CAErB,EAEA,kBAAA3F,CAAmBn7F,GACjB,MAAM+gG,EAASrvG,KAAKmvG,iBAAiB7gG,GAC/B08F,EAAU18F,EAAQk7F,OAAOwB,SAAW,GACpC57F,EAAaigG,EAASrE,EAAU,IACtC,OAAO/7F,KAAK8C,IAAI,IAAK9C,KAAKC,MAAmB,GAAbE,GAAmB,GACrD,EAEA,cAAAs6F,CAAep7F,GACb,MAAMc,EAAapP,KAAKypG,mBAAmBn7F,GACrC28F,EAAY38F,EAAQk7F,OAAOyB,WAAa,GAC9C,OAAI77F,GAAc67F,EAAkB,YAChC77F,GAAc,GAAW,UACtB,SACT,EAEA,YAAAu6F,CAAar7F,GACX,MAAM+gG,EAASrvG,KAAKmvG,iBAAiB7gG,GAC/B08F,EAAU18F,EAAQk7F,OAAOwB,SAAW,GAC1C,MAAO,GAAGqE,EAAO/L,QAAQ,QAAQ0H,MACnC,EAEA,eAAAqB,CAAgB/9F,GACd,MAAMc,EAAapP,KAAKypG,mBAAmBn7F,GACrC28F,EAAY38F,EAAQk7F,OAAOyB,WAAa,GAC9C,OAAO77F,GAAc67F,CACvB,EAEA,kBAAAqB,CAAmBh+F,GACjB,MAAMc,EAAapP,KAAKypG,mBAAmBn7F,GACrC28F,EAAY38F,EAAQk7F,OAAOyB,WAAa,GAC9C,OAAI77F,GAAc67F,EACT,eAAeA,cAEpB77F,GAAc,GACT,gBAEF,QACT,EAEA,0BAAMw9F,CAAqBpzC,EAASlrD,GAClC,GAAIkrD,GAAWlrD,EAAQlP,KAAM,CAE3B,MAAM4iG,EAAQhiG,KAAKstG,WAAWh/F,EAAQlP,MACjC4iG,GAEHhiG,KAAKmlG,SAASnlG,KAAKhB,GAAG,8BAA+BgB,KAAKhB,GAAG,4BAA6B,CACxFomG,kBAAmBplG,KAAKhB,GAAG,iCAC3BqmG,iBAAkBrlG,KAAKhB,GAAG,gCAC1BM,KAAM,SACLo4C,KAAK43D,gBACAtvG,KAAKuvG,qBACVR,MAAM,KACP/uG,KAAK2kG,SAASxhE,KAAKnjC,KAAKhB,GAAG,8BAGjC,CACF,EAEA,sBAAMuwG,GACJvvG,KAAKosG,cAAe,EACpB,IACEpsG,KAAK2kG,SAASxhE,KAAKnjC,KAAKhB,GAAG,+BAC3B,MAAMo8F,QAAiB,EAAAO,GAAA,GAAc,oBAAqB,CACxD3uE,OAAQ,SAEJttB,QAAa07F,EAASU,OACxBp8F,EAAKq8F,SACP/7F,KAAKstG,WAAa5tG,EAAKwO,cAAgB,CAAC,EACxClO,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,qCAE9BgB,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,kCAAoCU,EAAK6pE,OAAS,IAElF,CAAE,MAAOA,GACPxmC,QAAQwmC,MAAM,+BAAgCA,GAC9CvpE,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,kCAC9B,CAAE,QACAgB,KAAKosG,cAAe,CACtB,CACF,GAEF,OAAA7qG,GACEvB,KAAKgQ,SAAU,GAEf,EAAA2rF,GAAA,GAAc,gCAAgCjkD,KAAK0jD,GAAYA,EAASU,QAAQpkD,KAAKh4C,IACnFM,KAAK+sG,iBAAmBrtG,EAAKkuG,SAEzBluG,EAAKmuG,MAAQnuG,EAAKmuG,KAAKf,WACzBptG,EAAKmuG,KAAKf,SAAWptG,EAAKmuG,KAAKf,SAASj4F,IAAIvG,IAAW,IAClDA,EACHk7F,MAAOl7F,EAAQk7F,OAAS,CACtBhwC,SAAS,EACTwxC,QAAS,GACTC,UAAW,QAIjBjrG,KAAKgtG,aAAettG,EAAKmuG,KAErBnuG,EAAKouG,IAAMpuG,EAAKouG,GAAGhB,WACrBptG,EAAKouG,GAAGhB,SAAWptG,EAAKouG,GAAGhB,SAASj4F,IAAIvG,IAAW,IAC9CA,EACHk7F,MAAOl7F,EAAQk7F,OAAS,CACtBhwC,SAAS,EACTwxC,QAAS,GACTC,UAAW,QAIjBjrG,KAAKitG,WAAavtG,EAAKouG,GAEnBpuG,EAAKquG,SAAWruG,EAAKquG,QAAQjB,WAC/BptG,EAAKquG,QAAQjB,SAAWptG,EAAKquG,QAAQjB,SAASj4F,IAAIvG,IAAW,IACxDA,EACHo8F,SAAUp8F,EAAQo8F,UAAY,OAGlC1qG,KAAKktG,gBAAkBxtG,EAAKquG,SAAW,CACrC1F,YAAa,CAAC,EACdyE,SAAU,IAGRptG,EAAKsuG,aAAetuG,EAAKsuG,YAAYlB,WACvCptG,EAAKsuG,YAAYlB,SAAWptG,EAAKsuG,YAAYlB,SAASj4F,IAAIvG,IAAW,IAChEA,EACHg7F,UAAWh7F,EAAQg7F,YAAa,MAGpCtpG,KAAKmtG,oBAAsBztG,EAAKsuG,aAAe,CAC7C3F,YAAa,CAAC,EACdyE,SAAU,IAGRptG,EAAKuuG,QAAUvuG,EAAKuuG,OAAOnB,WAC7BptG,EAAKuuG,OAAOnB,SAAWptG,EAAKuuG,OAAOnB,SAASj4F,IAAIvG,IAAW,IACtDA,EACH68F,SAAU78F,EAAQ68F,UAAY,GAC9BC,SAAU98F,EAAQ88F,UAAY,GAC9BpC,UAAW16F,EAAQ06F,WAAa,GAChCrL,QAASrvF,EAAQqvF,SAAW,CAAC,EAC7B6N,iBAA6C,IAA5Bl9F,EAAQk9F,gBACzBhC,MAAOl7F,EAAQk7F,OAAS,CACtBhwC,SAAS,EACTwxC,QAAS,GACTC,UAAW,QAIjBjrG,KAAKotG,eAAiB1tG,EAAKuuG,QAAU,CACnC5F,YAAa,CAAC,EACdyE,SAAU,IAGZ9sG,KAAKkvG,mBACJM,QAAQ,KACTxvG,KAAKgQ,SAAU,GAEnB,GCv1BF,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,qBCRA,MAAM,GAAa,CACjBxS,MAAO,aAEF,SAAS,GAAOI,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACvD,OAAO,WAAc,QAAa,KAAa,CAC7CkB,KAAM,WACL,CACDI,SAAS,QAAS,IAAM,EAAC,SAAgB,QAAoB,MAAO,CAClEhC,OAAO,QAAgB,CAAC,oBAAqB,CAC3C,aAAcM,EAAOkS,WAEvBpR,QAASf,EAAO,KAAOA,EAAO,GAAK,IAAIqB,IAASjB,EAASwxG,aAAexxG,EAASwxG,eAAevwG,KAC/F,CAACpB,EAAOkS,UAAW,WAAc,QAAa9R,EAA8B,CAC7EO,IAAK,EACLM,KAAM,UACN2wG,KAAM,QACD,WAAc,QAAaxxG,EAA8B,CAC9DO,IAAK,EACLM,KAAM,WACH,QAAoB,OAAQ,IAAY,QAAiBjB,EAAOkS,QAAUpS,EAAKoB,GAAG,uBAAyBpB,EAAKoB,GAAG,sBAAuB,IAAK,GAAI,CAAC,CAAC,KAAQhB,EAAMk2B,aACxK5xB,EAAG,GAEP,CCxBA,QACElD,KAAM,qBACN4G,MAAO,CAAC,SACR3G,MAAO,CACL2Q,QAAS,CACP1Q,KAAMG,QACND,SAAS,GAEXw0B,KAAM,CACJ10B,KAAMG,QACND,SAAS,IAGb,IAAAE,GACE,MAAO,CACLw0B,SAAS,EAEb,EACAh0B,MAAO,CACL8zB,KAAM,CACJptB,WAAW,EACX,OAAAC,CAAQsc,GACFA,EAEFiL,WAAW,KACTpuB,KAAKk0B,SAAU,GACd,KAEHl0B,KAAKk0B,SAAU,CAEnB,IAGJ7zB,QAAS,CACP,WAAAovG,GACOzvG,KAAKgQ,SACRhQ,KAAKM,MAAM,QAEf,IC/BJ,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,sCCRA,MAAM,GAAa,CACjB9C,MAAO,qBAEH,GAAa,CACjBA,MAAO,kBAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CACjBA,MAAO,gBAEH,GAAa,CACjBa,MAAO,CACL,QAAW,OACX,IAAO,MACP,MAAS,SAGP,GAAa,CACjBb,MAAO,gBAEH,GAAa,CACjBa,MAAO,CACL,QAAW,OACX,IAAO,MACP,MAAS,SAGP,GAAa,CACjBb,MAAO,4BAEH,GAAa,CACjBA,MAAO,iBAEH,GAAc,CAClBA,MAAO,yBAEH,GAAc,CAClBA,MAAO,sBAEH,GAAc,CAClBA,MAAO,sBAEH,GAAc,CAClBA,MAAO,iBAEH,GAAc,CAClBA,MAAO,sBAEH,GAAc,CAClBA,MAAO,sBAEH,GAAc,CAClBA,MAAO,sBAEH,GAAc,CAClBA,MAAO,sBAEH,GAAc,CAClBA,MAAO,qCAEH,GAAc,CAClBA,MAAO,kBAEH,GAAc,CAClBA,MAAO,eAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBA,MAAO,oBAEH,GAAc,CAClBA,MAAO,oBAEH,GAAc,CAClBA,MAAO,kBAEH,GAAc,CAClBA,MAAO,eAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBA,MAAO,kBAEH,GAAc,CAClBA,MAAO,kBAEH,GAAc,CAClBa,MAAO,CACL,QAAW,OACX,IAAO,OACP,MAAS,SAGP,GAAc,CAClBb,MAAO,iBAEH,GAAc,CAClBa,MAAO,CACL,QAAW,OACX,IAAO,OACP,MAAS,SAGP,GAAc,CAClBb,MAAO,iBAEH,GAAc,CAClBA,MAAO,gBAEH,GAAc,CAClBa,MAAO,CACL,gBAAiB,OACjB,MAAS,YAGP,GAAc,CAClBb,MAAO,iBAEF,SAAS,GAAOI,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMupG,EAAsB,MACtBmI,EAAyB,MACzBpI,EAA0B,MAC1BG,EAAqB,MACrBxpG,GAA+B,QAAkB,qBACjD6N,EAAuB,KACvB6jG,EAA6B,MAC7BzI,EAAoB,KACpB0I,EAAsB,MACtBhuG,EAAwB,KACxBulG,EAAuB,MACvBC,EAAuB,MACvBC,EAAuB,MACvBG,EAA6B,MAC7BqI,EAAgC,GAChCC,EAA+B,MAC/B5jG,EAAuB,KACvBK,EAAqB,IAC3B,OAAO,UAAiB,WAAc,QAAoB,MAAO,GAAY,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAoB,KAAM,IAAY,QAAiB5O,EAAKoB,GAAG,+BAAgC,IAAI,QAAoB,KAAM,IAAY,QAAiBpB,EAAKoB,GAAG,yBAA0B,IAAI,QAAa0oG,EAAoB,CACrVyC,MAAOnsG,EAAMgyG,aAAaC,KAC1B7F,MAAOnsG,EAASiyG,cAChB9xG,IAAK,eACL,cAAe,SACd,CACDoB,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,8BACfyjC,KAAM,YACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAagoG,EAAqB,CACjG1hG,WAAY9H,EAAMgyG,aAAaC,KAAKE,SACpC,sBAAuBtyG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMgyG,aAAaC,KAAKE,SAAWtxG,GAC9FS,KAAM,WACN,gBAAiB,GACjB8wG,QAASnyG,EAASoyG,oBAClBC,aAAc,eACd3J,YAAa3oG,EAAMgyG,aAAaC,KAAKM,aAAe3yG,EAAKoB,GAAG,iCAAmC,GAC/FiD,SAAUjE,EAAMwyG,mBACf,KAAM,EAAG,CAAC,aAAc,UAAW,cAAe,aAAcxyG,EAAMgyG,aAAaC,KAAKM,eAAgB,WAAc,QAAaZ,EAAwB,CAC5JlxG,IAAK,EACLqH,WAAY9H,EAAMwyG,kBAClB,sBAAuB3yG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMwyG,kBAAoB3xG,GACrFyE,SAAUrF,EAASwyG,yBAClB,CACDjxG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,8BAA+B,KAClGsD,EAAG,GACF,EAAG,CAAC,aAAc,eAAgB,QAAoB,IAAI,OAC7DA,EAAG,GACF,EAAG,CAAC,WAAW,QAAa,KAAa,CAC1ClD,KAAM,aACNm7B,KAAM,UACL,CACD/6B,SAAS,QAAS,IAAM,CAACxB,EAAM0yG,sBAAuB,WAAc,QAAanJ,EAAyB,CACxGj6F,MAAO1P,EAAKoB,GAAG,+BACfyjC,KAAM,yBACNhkC,IAAK,gBACJ,CACDe,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMgyG,aAAaC,KAAKU,uBACpC,sBAAuB9yG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMgyG,aAAaC,KAAKU,uBAAyB9xG,GAC5GS,KAAM,WACN,gBAAiB,GACjBgxG,aAAc,gBACb,KAAM,EAAG,CAAC,iBACbhuG,EAAG,GACF,EAAG,CAAC,YAAa,QAAoB,IAAI,KAC5CA,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,QAAS,WAAW,QAAoB,KAAM,IAAY,QAAiB1E,EAAKoB,GAAG,0BAA2B,IAAI,QAAa0oG,EAAoB,CACxJyC,MAAOnsG,EAAMgyG,aAAaY,MAC1BxG,MAAOnsG,EAAS4yG,eAChBzyG,IAAK,gBACL,cAAe,SACd,CACDoB,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,6BACfyjC,KAAM,iBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMgyG,aAAaY,MAAME,cACrC,sBAAuBjzG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMgyG,aAAaY,MAAME,cAAgBjyG,GACpGyxG,aAAc,eACdruG,SAAUjE,EAAM+yG,oBACf,KAAM,EAAG,CAAC,aAAc,eAC3BzuG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACfyjC,KAAM,iBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAagoG,EAAqB,CACjG1hG,WAAY9H,EAAMgyG,aAAaY,MAAMI,cACrC,sBAAuBnzG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMgyG,aAAaY,MAAMI,cAAgBnyG,GACpGS,KAAM,WACN,gBAAiB,GACjB8wG,QAASnyG,EAASgzG,qBAClBX,aAAc,eACd3J,YAAa3oG,EAAMgyG,aAAaY,MAAML,aAAe3yG,EAAKoB,GAAG,iCAAmC,GAChGiD,SAAUjE,EAAM+yG,oBACf,KAAM,EAAG,CAAC,aAAc,UAAW,cAAe,aAAc/yG,EAAMgyG,aAAaY,MAAML,eAAgB,WAAc,QAAaZ,EAAwB,CAC7JlxG,IAAK,EACLqH,WAAY9H,EAAM+yG,mBAClB,sBAAuBlzG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAM+yG,mBAAqBlyG,GACtFyE,SAAUrF,EAASizG,0BAClB,CACD1xG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,8BAA+B,KAClGsD,EAAG,GACF,EAAG,CAAC,aAAc,eAAgB,QAAoB,IAAI,OAC7DA,EAAG,GACF,EAAG,CAAC,WAAW,QAAa,KAAa,CAC1ClD,KAAM,aACNm7B,KAAM,UACL,CACD/6B,SAAS,QAAS,IAAM,CAACxB,EAAMmzG,uBAAwB,WAAc,QAAa5J,EAAyB,CACzGj6F,MAAO1P,EAAKoB,GAAG,+BACfyjC,KAAM,0BACNhkC,IAAK,iBACJ,CACDe,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMgyG,aAAaY,MAAMQ,wBACrC,sBAAuBvzG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMgyG,aAAaY,MAAMQ,wBAA0BvyG,GAC9GS,KAAM,WACN,gBAAiB,GACjBgxG,aAAc,gBACb,KAAM,EAAG,CAAC,iBACbhuG,EAAG,GACF,EAAG,CAAC,YAAa,QAAoB,IAAI,KAC5CA,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,QAAS,WAAW,QAAoB,KAAM,GAAY,EAAC,SAAiB,QAAiB1E,EAAKoB,GAAG,mCAAqC,IAAK,IAAI,QAAoB,IAAK,GAAY,EAAC,QAAa+M,EAAsB,CACjOzM,KAAM,UACN+N,KAAM,QACNzO,QAASf,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMqzG,uBAAwB,GAC3EnkG,OAAQ,IACP,CACD1N,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,WAERuD,EAAG,SACG,QAAoB,MAAO,GAAa,EAAC,UAAiB,WAAc,QAAautG,EAAqB,CAChHnwG,KAAM1B,EAAMszG,UACZ9zG,MAAO,eACN,CACDgC,SAAS,QAAS,IAAM,EAAC,QAAaowG,EAA4B,CAChEntE,KAAM,OACNn1B,MAAO1P,EAAKoB,GAAG,yBACf,eAAgB,UACf,CACDQ,SAAS,QAASw5B,GAAS,EAAC,QAAoB,MAAO,IAAa,QAAiBA,EAAM0mD,IAAItgF,MAAO,KACtGkD,EAAG,GACF,EAAG,CAAC,WAAW,QAAastG,EAA4B,CACzDntE,KAAM,QACNn1B,MAAO1P,EAAKoB,GAAG,0BACf,eAAgB,UACf,CACDQ,SAAS,QAASw5B,GAAS,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAoB,OAAQ,IAAa,QAAiBA,EAAM0mD,IAAIwrB,OAAQ,OACjJ5oG,EAAG,GACF,EAAG,CAAC,WAAW,QAAastG,EAA4B,CACzDntE,KAAM,cACNn1B,MAAO1P,EAAKoB,GAAG,2BACf,eAAgB,UACf,CACDQ,SAAS,QAASw5B,GAAS,EAAC,QAAoB,MAAO,GAAa,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYA,EAAM0mD,IAAI6xB,YAAaC,KACvJ,WAAc,QAAarK,EAAmB,CACnD1oG,IAAK+yG,EACLnkG,KAAM,QACN7P,MAAO,kBACN,CACDgC,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAASwzG,kBAAkBD,IAAQ,KAC9FlvG,EAAG,GACF,QACD,UACJA,EAAG,GACF,EAAG,CAAC,WAAW,QAAastG,EAA4B,CACzDntE,KAAM,YACNn1B,MAAO1P,EAAKoB,GAAG,yBACf,eAAgB,UACf,CACDQ,SAAS,QAASw5B,GAAS,EAAC,QAAoB,MAAO,IAAa,QAAiB/6B,EAASyzG,WAAW14E,EAAM0mD,IAAIiyB,YAAa,KAChIrvG,EAAG,GACF,EAAG,CAAC,WAAW,QAAastG,EAA4B,CACzDtiG,MAAO1P,EAAKoB,GAAG,sBACf,eAAgB,SAChBiB,MAAO,MACN,CACDT,SAAS,QAASw5B,GAAS,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAamuE,EAAmB,CACnG7nG,KAA8D,WAAxDrB,EAAS2zG,eAAe54E,EAAM0mD,IAAImyB,WAAWhjG,OAAsB,UAAY,SACrFxB,KAAM,SACL,CACD7N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiBvB,EAAS2zG,eAAe54E,EAAM0mD,IAAImyB,WAAWvkG,OAAQ,KAChHhL,EAAG,GACF,KAAM,CAAC,aACVA,EAAG,GACF,EAAG,CAAC,WAAW,QAAastG,EAA4B,CACzDtiG,MAAO1P,EAAKoB,GAAG,yBACf,eAAgB,UACf,CACDQ,SAAS,QAASw5B,GAAS,EAAC,QAAoB,MAAO,IAAa,QAAiB/6B,EAAS2zG,eAAe54E,EAAM0mD,IAAImyB,WAAWC,aAAc,KAChJxvG,EAAG,GACF,EAAG,CAAC,WAAW,QAAastG,EAA4B,CACzDtiG,MAAO1P,EAAKoB,GAAG,yBACfupG,MAAO,QACP,eAAgB,UACf,CACD/oG,SAAS,QAASw5B,GAAS,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAajtB,EAAsB,CACtGvO,MAAO,gBACP6P,KAAM,QACNzO,QAASC,GAAUZ,EAAS8zG,UAAU/4E,EAAM0mD,MAC3C,CACDlgF,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,wBAAyB,KAC5FsD,EAAG,GACF,EAAG,CAAC,aAAa,QAAayJ,EAAsB,CACrDvO,MAAO,gBACP6P,KAAM,QACN/N,KAAM,SACNV,QAASC,GAAUZ,EAAS+zG,YAAYh5E,EAAM0mD,IAAI3uE,KACjD,CACDvR,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,0BAA2B,KAC9FsD,EAAG,GACF,EAAG,CAAC,gBACPA,EAAG,GACF,EAAG,CAAC,YACPA,EAAG,GACF,EAAG,CAAC,UAAW,CAAC,CAACkK,EAAoBxO,EAAMi0G,qBAAqB,QAAoB,MAAO,GAAa,EAAC,QAAoB,KAAM,IAAa,QAAiBr0G,EAAKoB,GAAG,iCAAkC,IAAI,QAAoB,KAAM,GAAa,EAAC,SAAiB,QAAiBpB,EAAKoB,GAAG,4BAA8B,IAAK,IAAI,QAAa6C,EAAuB,CAC7WM,QAASvE,EAAKoB,GAAG,kCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,eAAe,QAAaolG,EAAoB,CACrDyC,MAAOnsG,EAAMk0G,eAAeC,SAC5B,cAAe,SACd,CACD3yG,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMk0G,eAAeC,SAAS34C,QAC1C,sBAAuB37D,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMk0G,eAAeC,SAAS34C,QAAU36D,IAClG,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,8BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa8nG,EAAsB,CAC1DxhG,WAAY9H,EAAMk0G,eAAeC,SAAS7jG,QAC1C,sBAAuBzQ,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMk0G,eAAeC,SAAS7jG,QAAUzP,GACnG8nG,YAAa/oG,EAAKoB,GAAG,yCACpB,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa6nG,EAAsB,CAC1D/5F,MAAO,sBACPxI,MAAO,yBACL,QAAauiG,EAAsB,CACrC/5F,MAAO,SACPxI,MAAO,aAETxC,EAAG,GACF,EAAG,CAAC,aAAc,kBACrBA,EAAG,GACF,EAAG,CAAC,UAAqD,wBAA1CtE,EAAMk0G,eAAeC,SAAS7jG,UAAqC,WAAc,QAAai5F,EAAyB,CACvI9oG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,uBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMk0G,eAAeC,SAASC,sBAC1C,sBAAuBv0G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk0G,eAAeC,SAASC,sBAAwBvzG,IAClH,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,YAAa,QAAoB,IAAI,GAAiD,WAA1CtE,EAAMk0G,eAAeC,SAAS7jG,UAAwB,WAAc,QAAai5F,EAAyB,CAC3J9oG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,wBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMk0G,eAAeC,SAASE,YAC1C,sBAAuBx0G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk0G,eAAeC,SAASE,YAAcxzG,GACzG8nG,YAAa,8BACZ,KAAM,EAAG,CAAC,iBACbrkG,EAAG,GACF,EAAG,CAAC,YAAa,QAAoB,IAAI,KAC5CA,EAAG,GACF,EAAG,CAAC,WAAW,QAAoB,KAAM,GAAa,EAAC,SAAiB,QAAiB1E,EAAKoB,GAAG,wBAA0B,IAAK,IAAI,QAAa6C,EAAuB,CACzKM,QAASvE,EAAKoB,GAAG,8BACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,eAAe,QAAaolG,EAAoB,CACrDyC,MAAOnsG,EAAMk0G,eAAeI,QAC5B,cAAe,SACd,CACD9yG,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,8BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMk0G,eAAeI,QAAQ94C,QACzC,sBAAuB37D,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk0G,eAAeI,QAAQ94C,QAAU36D,IACnG,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,+BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa8nG,EAAsB,CAC1DxhG,WAAY9H,EAAMk0G,eAAeI,QAAQhkG,QACzC,sBAAuBzQ,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk0G,eAAeI,QAAQhkG,QAAUzP,GACpG8nG,YAAa/oG,EAAKoB,GAAG,0CACpB,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa6nG,EAAsB,CAC1D/5F,MAAO1P,EAAKoB,GAAG,yBACf8F,MAAO,aACN,KAAM,EAAG,CAAC,YACbxC,EAAG,GACF,EAAG,CAAC,aAAc,kBACrBA,EAAG,GACF,EAAG,CAAC,UAAoD,cAAzCtE,EAAMk0G,eAAeI,QAAQhkG,UAA2B,WAAc,QAAoB,KAAW,CACrH7P,IAAK,GACJ,EAAC,QAAa8oG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,wBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMk0G,eAAeI,QAAQC,UAAUhT,IACnD,sBAAuB1hG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk0G,eAAeI,QAAQC,UAAUhT,IAAM1gG,GAC1G8nG,YAAa,8BACZ,KAAM,EAAG,CAAC,iBACbrkG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAa,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYxB,EAAMk0G,eAAeI,QAAQC,UAAUzgD,OAAQ,CAAComC,EAAOx5F,MACpL,WAAc,QAAoB,MAAO,CAC9CD,IAAKC,EACLlB,MAAO,mBACN,EAAC,QAAagqG,EAAqB,CACpC1hG,WAAYoyF,EAAMz5F,IAClB,sBAAuBI,GAAUq5F,EAAMz5F,IAAMI,EAC7C8nG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,sBAAuB,iBAAiB,QAAawoG,EAAqB,CACnG1hG,WAAYoyF,EAAMpzF,MAClB,sBAAuBjG,GAAUq5F,EAAMpzF,MAAQjG,EAC/C8nG,YAAa/oG,EAAKoB,GAAG,sCACpB,KAAM,EAAG,CAAC,aAAc,sBAAuB,iBAAiB,QAAa+M,EAAsB,CACpGzM,KAAM,SACNmQ,MAAO,GACPvC,OAAQ,GACRtO,QAASC,GAAUZ,EAASu0G,mBAAmB9zG,GAC/CuD,SAAUjE,EAAMk0G,eAAeI,QAAQC,UAAUzgD,OAAOprD,QAAU,GACjE,CACDlH,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,gBAERuD,EAAG,GACF,EAAG,CAAC,UAAW,iBAChB,OAAO,QAAayJ,EAAsB,CAC5CzM,KAAM,UACNmQ,MAAO,GACP7Q,QAASX,EAASw0G,iBACjB,CACDjzG,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,UACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,8BAA+B,KAC9FsD,EAAG,GACF,EAAG,CAAC,gBACPA,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,KAAM,CAC5Dj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,+BAAiC,IAAK,IAAI,QAAa6C,EAAuB,CAC7IM,QAASvE,EAAKoB,GAAG,iCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAa,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYxB,EAAMk0G,eAAeI,QAAQC,UAAUG,eAAgB,CAACz/D,EAAOv0C,MAC5L,WAAc,QAAoB,MAAO,CAC9CD,IAAKC,EACLlB,MAAO,sBACN,EAAC,QAAagqG,EAAqB,CACpC1hG,WAAY9H,EAAMk0G,eAAeI,QAAQC,UAAUG,eAAeh0G,GAClE,sBAAuBG,GAAUb,EAAMk0G,eAAeI,QAAQC,UAAUG,eAAeh0G,GAASG,EAChG8nG,YAAa/oG,EAAKoB,GAAG,6CACpB,KAAM,EAAG,CAAC,aAAc,sBAAuB,iBAAiB,QAAa+M,EAAsB,CACpG0D,MAAO,GACPvC,OAAQ,GACRtO,QAASC,GAAUZ,EAAS00G,yBAAyBj0G,GAAQ,GAC7DuD,SAAoB,IAAVvD,GACT,CACDc,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,eAERuD,EAAG,GACF,EAAG,CAAC,UAAW,cAAc,QAAayJ,EAAsB,CACjE0D,MAAO,GACPvC,OAAQ,GACRtO,QAASC,GAAUZ,EAAS00G,yBAAyBj0G,EAAO,GAC5DuD,SAAUvD,IAAUV,EAAMk0G,eAAeI,QAAQC,UAAUG,eAAehsG,OAAS,GAClF,CACDlH,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,iBAERuD,EAAG,GACF,EAAG,CAAC,UAAW,cAAc,QAAayJ,EAAsB,CACjEzM,KAAM,SACNmQ,MAAO,GACPvC,OAAQ,GACRtO,QAASC,GAAUZ,EAAS20G,2BAA2Bl0G,IACtD,CACDc,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,gBAERuD,EAAG,GACF,EAAG,CAAC,gBACL,OAAO,QAAayJ,EAAsB,CAC5CzM,KAAM,UACNmQ,MAAO,GACP7Q,QAASX,EAAS40G,yBACjB,CACDrzG,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,UACJ,QAAoB,OAAQ,MAAM,QAAiBnB,EAAKoB,GAAG,iCAAkC,KACjGsD,EAAG,GACF,EAAG,CAAC,gBACPA,EAAG,KACA,MAAO,QAAoB,IAAI,KACpCA,EAAG,GACF,EAAG,CAAC,aAAa,QAAoB,MAAO,GAAa,EAAC,QAAoB,KAAM,IAAa,QAAiB1E,EAAKoB,GAAG,iCAAkC,IAAI,QAAoB,KAAM,IAAa,QAAiBpB,EAAKoB,GAAG,6BAA8B,IAAI,QAAa0oG,EAAoB,CACpSyC,MAAOnsG,EAAM80G,eACb,cAAe,SACd,CACDtzG,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,KAAM,CACnEj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,+BAAiC,IAAK,IAAI,QAAa6C,EAAuB,CAC7IM,QAASvE,EAAKoB,GAAG,qCACjBoD,UAAW,MACX,cAAe,IACd,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAM80G,eAAeC,eACjC,sBAAuBl1G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAM80G,eAAeC,eAAiBl0G,IAClG,KAAM,EAAG,CAAC,iBACbyD,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,WAAW,QAAoB,KAAM,IAAa,QAAiB1E,EAAKoB,GAAG,8BAA+B,IAAI,QAAa0oG,EAAoB,CACpJyC,MAAOnsG,EAAM80G,eACb1I,MAAOnsG,EAAS+0G,YAChB50G,IAAK,aACL,cAAe,SACd,CACDoB,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,KAAM,CACnEj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,gCAAkC,IAAK,IAAI,QAAa6C,EAAuB,CAC9IM,QAASvE,EAAKoB,GAAG,sCACjBoD,UAAW,MACX,cAAe,IACd,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAM80G,eAAeG,cACjC,sBAAuBp1G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAM80G,eAAeG,cAAgBp0G,IACjG,KAAM,EAAG,CAAC,iBACbyD,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,QAAS,WAAW,QAAoB,KAAM,IAAa,QAAiB1E,EAAKoB,GAAG,sCAAuC,IAAI,QAAa0oG,EAAoB,CACrKyC,MAAOnsG,EAAM80G,eACb,cAAe,SACd,CACDtzG,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,KAAM,CACnEj6F,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiB1P,EAAKoB,GAAG,2BAA6B,IAAK,IAAI,QAAa6C,EAAuB,CACzIM,QAASvE,EAAKoB,GAAG,iCACjBoD,UAAW,OACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAM80G,eAAeI,cACjC,sBAAuBr1G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAM80G,eAAeI,cAAgBr0G,IACjG,KAAM,EAAG,CAAC,iBACbyD,EAAG,KACD,QAAailG,EAAyB,CACxCj6F,MAAO1P,EAAKoB,GAAG,iCACfyjC,KAAM,qBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAM80G,eAAeK,kBACjC,sBAAuBt1G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAM80G,eAAeK,kBAAoBt0G,GACtGkT,IAAK,EACLD,IAAK,KACLixD,KAAM,EACN2oB,UAAW,EACX,oBAAqB,SACpB,KAAM,EAAG,CAAC,gBAAgB,QAAoB,OAAQ,IAAa,QAAiB9tF,EAAKoB,GAAG,kCAAmC,KAClIsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,kCACfyjC,KAAM,sBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAaioG,EAA4B,CAChE3hG,WAAY9H,EAAM80G,eAAeM,mBACjC,sBAAuBv1G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAM80G,eAAeM,mBAAqBv0G,GACvGkT,IAAK,EACLD,IAAK,KACLixD,KAAM,EACN2oB,UAAW,EACX,oBAAqB,SACpB,KAAM,EAAG,CAAC,gBAAgB,QAAoB,OAAQ,IAAa,QAAiB9tF,EAAKoB,GAAG,kCAAmC,KAClIsD,EAAG,GACF,EAAG,CAAC,YACPA,EAAG,GACF,EAAG,CAAC,aAAa,QAAawtG,EAA+B,CAC9D97E,MAAOh2B,EAAMgS,QACbpR,QAASX,EAASqqG,cACjB,KAAM,EAAG,CAAC,OAAQ,aAAa,QAAan8F,EAAsB,CACnErG,WAAY9H,EAAMqzG,sBAClB,sBAAuBxzG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMqzG,sBAAwBxyG,GAC3F2O,MAAO5P,EAAKoB,GAAG,gCACfiB,MAAOhC,EAASo1G,aACf,CACDjwB,QAAQ,QAAS,IAAM,EAAC,QAAoB,OAAQ,GAAa,EAAC,QAAar3E,EAAsB,CACnGnN,QAASf,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMqzG,uBAAwB,IAC5E,CACD7xG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,kBAAmB,KACtFsD,EAAG,KACD,QAAayJ,EAAsB,CACrCzM,KAAM,UACNV,QAASX,EAASq1G,aACjB,CACD9zG,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,0BAA2B,KAC9FsD,EAAG,GACF,EAAG,CAAC,gBACP9C,SAAS,QAAS,IAAM,EAAC,QAAakoG,EAAoB,CACxDyC,MAAOnsG,EAAMu1G,SACbnJ,MAAOnsG,EAASu1G,WAChBp1G,IAAK,YACL,cAAe,SACd,CACDoB,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,8BACfyjC,KAAM,QACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMu1G,SAASn0G,KAC3B,sBAAuBvB,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMu1G,SAASn0G,KAAOP,GACnF8nG,YAAa/oG,EAAKoB,GAAG,qCACpB,KAAM,EAAG,CAAC,aAAc,kBAC3BsD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,gCACfyjC,KAAM,eACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAauwG,EAA8B,CAClEjqG,WAAY9H,EAAMu1G,SAAShC,YAC3B,sBAAuB1zG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMu1G,SAAShC,YAAc1yG,IACzF,CACDW,SAAS,QAAS,IAAM,EAAC,QAAamwG,EAAwB,CAC5DriG,MAAO,UACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,2BAA4B,KAC/FsD,EAAG,KACD,QAAaqtG,EAAwB,CACvCriG,MAAO,UACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,2BAA4B,KAC/FsD,EAAG,KACD,QAAaqtG,EAAwB,CACvCriG,MAAO,QACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,yBAA0B,KAC7FsD,EAAG,KACD,QAAaqtG,EAAwB,CACvCriG,MAAO,UACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,2BAA4B,KAC/FsD,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,iBACPA,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMu1G,SAASE,YAC3B,sBAAuB51G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMu1G,SAASE,YAAc50G,GAC1FyE,SAAUrF,EAASy1G,2BAClB,KAAM,EAAG,CAAC,aAAc,eAC3BpxG,EAAG,GACF,EAAG,CAAC,UAAYtE,EAAMu1G,SAASE,aA+Bd,QAAoB,IAAI,KA/BK,WAAc,QAAalM,EAAyB,CACnG9oG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,mBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAaioG,EAA4B,CACzG3hG,WAAY9H,EAAMu1G,SAASI,gBAC3B,sBAAuB91G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMu1G,SAASI,gBAAkB90G,GAC9FkT,IAAK,EACLgxD,KAAM,EACN,oBAAqB,QACrB1kE,MAAO,CACL,KAAQ,MAET,KAAM,EAAG,CAAC,gBAAgB,QAAaipG,EAAsB,CAC9DxhG,WAAY9H,EAAMu1G,SAASK,eAC3B,sBAAuB/1G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMu1G,SAASK,eAAiB/0G,GAC7FR,MAAO,CACL,MAAS,UAEV,CACDmB,SAAS,QAAS,IAAM,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYxB,EAAM61G,gBAAiB/M,KAC3G,WAAc,QAAaO,EAAsB,CACtD5oG,IAAKqoG,EAAIhiG,MACTwI,MAAO1P,EAAKoB,GAAG8nG,EAAIgN,UACnBhvG,MAAOgiG,EAAIhiG,OACV,KAAM,EAAG,CAAC,QAAS,YACpB,QACJxC,EAAG,GACF,EAAG,CAAC,mBACPA,EAAG,GACF,EAAG,CAAC,WAA6CtE,EAAMu1G,SAASE,aAS/C,QAAoB,IAAI,KATsC,WAAc,QAAalM,EAAyB,CACpI9oG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,mCACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMu1G,SAASQ,WAC3B,sBAAuBl2G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMu1G,SAASQ,WAAal1G,IACxF,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,aACPA,EAAG,GACF,EAAG,CAAC,QAAS,YAChBA,EAAG,GACF,EAAG,CAAC,aAAc,QAAS,WAAW,QAAa6J,EAAsB,CAC1ErG,WAAY9H,EAAMg2G,oBAClB,sBAAuBn2G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMg2G,oBAAsBn1G,GACzF2O,MAAO5P,EAAKoB,GAAG,8BACfiB,MAAOhC,EAASo1G,aACf,CACDjwB,QAAQ,QAAS,IAAM,EAAC,QAAoB,OAAQ,GAAa,EAAC,QAAar3E,EAAsB,CACnGnN,QAASf,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMg2G,qBAAsB,IAC1E,CACDx0G,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,kBAAmB,KACtFsD,EAAG,KACD,QAAayJ,EAAsB,CACrCzM,KAAM,UACNV,QAASX,EAASg2G,aACjB,CACDz0G,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,0BAA2B,KAC9FsD,EAAG,GACF,EAAG,CAAC,gBACP9C,SAAS,QAAS,IAAM,EAAC,QAAakoG,EAAoB,CACxDyC,MAAOnsG,EAAMk2G,aACb9J,MAAOnsG,EAASk2G,eAChB/1G,IAAK,gBACL,cAAe,SACd,CACDoB,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,+BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMk2G,aAAa90G,KAC/B,sBAAuBvB,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk2G,aAAa90G,KAAOP,GACvFoD,SAAU,IACT,KAAM,EAAG,CAAC,iBACbK,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,gCACfyjC,KAAM,eACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAauwG,EAA8B,CAClEjqG,WAAY9H,EAAMk2G,aAAa3C,YAC/B,sBAAuB1zG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk2G,aAAa3C,YAAc1yG,IAC7F,CACDW,SAAS,QAAS,IAAM,EAAC,QAAamwG,EAAwB,CAC5DriG,MAAO,UACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,2BAA4B,KAC/FsD,EAAG,KACD,QAAaqtG,EAAwB,CACvCriG,MAAO,UACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,2BAA4B,KAC/FsD,EAAG,KACD,QAAaqtG,EAAwB,CACvCriG,MAAO,QACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,yBAA0B,KAC7FsD,EAAG,KACD,QAAaqtG,EAAwB,CACvCriG,MAAO,UACN,CACD9N,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,2BAA4B,KAC/FsD,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,iBACPA,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,4BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMk2G,aAAaT,YAC/B,sBAAuB51G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk2G,aAAaT,YAAc50G,GAC9FyE,SAAUrF,EAASm2G,yBAClB,KAAM,EAAG,CAAC,aAAc,eAC3B9xG,EAAG,GACF,EAAG,CAAC,UAAYtE,EAAMk2G,aAAaT,aA+BlB,QAAoB,IAAI,KA/BS,WAAc,QAAalM,EAAyB,CACvG9oG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,2BACfyjC,KAAM,mBACL,CACDjjC,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAaioG,EAA4B,CACzG3hG,WAAY9H,EAAMk2G,aAAaP,gBAC/B,sBAAuB91G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk2G,aAAaP,gBAAkB90G,GAClGkT,IAAK,EACLgxD,KAAM,EACN,oBAAqB,QACrB1kE,MAAO,CACL,KAAQ,MAET,KAAM,EAAG,CAAC,gBAAgB,QAAaipG,EAAsB,CAC9DxhG,WAAY9H,EAAMk2G,aAAaN,eAC/B,sBAAuB/1G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk2G,aAAaN,eAAiB/0G,GACjGR,MAAO,CACL,MAAS,UAEV,CACDmB,SAAS,QAAS,IAAM,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYxB,EAAM61G,gBAAiB/M,KAC3G,WAAc,QAAaO,EAAsB,CACtD5oG,IAAKqoG,EAAIhiG,MACTwI,MAAO1P,EAAKoB,GAAG8nG,EAAIgN,UACnBhvG,MAAOgiG,EAAIhiG,OACV,KAAM,EAAG,CAAC,QAAS,YACpB,QACJxC,EAAG,GACF,EAAG,CAAC,mBACPA,EAAG,GACF,EAAG,CAAC,WAA6CtE,EAAMk2G,aAAaT,aASnD,QAAoB,IAAI,KAT0C,WAAc,QAAalM,EAAyB,CACxI9oG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,mCACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMk2G,aAAaH,WAC/B,sBAAuBl2G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMk2G,aAAaH,WAAal1G,IAC5F,KAAM,EAAG,CAAC,iBACbyD,EAAG,GACF,EAAG,CAAC,aACPA,EAAG,GACF,EAAG,CAAC,QAAS,YAChBA,EAAG,GACF,EAAG,CAAC,aAAc,QAAS,WAAW,QAAa6J,EAAsB,CAC1ErG,WAAY9H,EAAMq2G,sBAClB,sBAAuBx2G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMq2G,sBAAwBx1G,GAC3F2O,MAAO5P,EAAKoB,GAAG,iCACfiB,MAAOhC,EAASo1G,aACf,CACDjwB,QAAQ,QAAS,IAAM,EAAC,QAAoB,OAAQ,GAAa,EAAC,QAAar3E,EAAsB,CACnGzM,KAAM,UACNV,QAASf,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMq2G,uBAAwB,IAC5E,CACD70G,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,yBAA0B,KAC7FsD,EAAG,QAEL9C,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,GAAa,EAAC,QAAoB,IAAK,GAAa,EAAC,QAAatB,EAA8B,CAClJa,KAAM,uBACNV,MAAO,CACL,eAAgB,UAEhB,QAAiB,KAAM,QAAiBT,EAAKoB,GAAG,oCAAqC,MAAM,QAAa0oG,EAAoB,CAC9H,cAAe,SACd,CACDloG,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,+BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAoB,OAAQ,MAAM,QAAiBxB,EAAMs2G,aAAal1G,MAAO,KACtGkD,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,0BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMs2G,aAAapJ,MAC/B,sBAAuBrtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMs2G,aAAapJ,MAAQrsG,GACxFmtG,SAAU,IACT,CACDuI,QAAQ,QAAS,IAAM,EAAC,QAAaxoG,EAAsB,CACzDnN,QAASX,EAASu2G,WACjB,CACDh1G,SAAS,QAAS,IAAM,EAAC,SAAiB,QAAiB5B,EAAKoB,GAAG,wBAAyB,KAC5FsD,EAAG,GACF,EAAG,CAAC,cACPA,EAAG,GACF,EAAG,CAAC,iBACPA,EAAG,GACF,EAAG,CAAC,YACPA,EAAG,QAELA,EAAG,GACF,EAAG,CAAC,aAAc,QAAS,aAAc,CAAC,CAACkK,EAAoBxO,EAAMgS,UAC1E,C,SCl8BA,MAAMykG,GAAiB,CACrBxgG,EAAG,IACHkB,EAAG,IACHtD,EAAG,KACHiB,EAAG,OAWE,SAAS4hG,GAAiBC,EAAU7vG,EAAOgnF,GAChD,IAAKtmF,OAAO2e,SAASrf,IAAUA,GAAS,EACtC,MAAM,IAAI4hC,MAAM,eAGlB,MAAMzZ,EAA2B,kBAAb0nF,EAAwB,IAAIjvG,KAAKivG,GAAY,IAAIjvG,KAAKivG,EAAShuG,WAEnF,GAAI8tG,GAAe3oB,GACjB,OAAO,IAAIpmF,KAAKunB,EAAKtmB,UAAY7B,EAAQ2vG,GAAe3oB,IAAO+T,cAGjE,GAAa,MAAT/T,EAEF,OADA7+D,EAAK2nF,YAAY3nF,EAAK4nF,cAAgB/vG,GAC/BmoB,EAAK4yE,cAGd,GAAa,MAAT/T,EAEF,OADA7+D,EAAK6nF,eAAe7nF,EAAK8nF,iBAAmBjwG,GACrCmoB,EAAK4yE,cAGd,MAAM,IAAIn5D,MAAM,YAAYolD,IAC9B,CAQA,SAASkpB,GAAkBC,GACzB,MAAMhwG,EAAO,IAAIS,KAAKuvG,GAChB1vG,EAAON,EAAKC,cACZO,EAAQlG,OAAO0F,EAAKE,WAAa,GAAGJ,SAAS,EAAG,KAChDX,EAAM7E,OAAO0F,EAAKG,WAAWL,SAAS,EAAG,KACzC2+F,EAAQnkG,OAAO0F,EAAKiwG,YAAYnwG,SAAS,EAAG,KAC5C0+F,EAAUlkG,OAAO0F,EAAKkwG,cAAcpwG,SAAS,EAAG,KAChDy+F,EAAUjkG,OAAO0F,EAAKmwG,cAAcrwG,SAAS,EAAG,KACtD,MAAO,GAAGQ,KAAQE,KAASrB,KAAOs/F,KAASD,KAAWD,GACxD,CAQO,SAASoO,GAAeC,EAAW39D,EAAM,IAAIxuC,MAClD,GAAkB,OAAdmsG,QAAoC/9F,IAAd+9F,EACxB,MAAO,CACLhjG,OAAQ,SACRvB,MAAO,KACPwkG,YAAa,QAIjB,MAAMuD,EAAc,IAAI3vG,KAAKmsG,GACvByD,EAAcphE,aAAexuC,KAAOwuC,EAAM,IAAIxuC,KAAKwuC,GACnDqhE,EAAgBP,GAAkBnD,GAExC,OAAIyD,EAAY3uG,UAAY0uG,EAAY1uG,UAC/B,CACLkI,OAAQ,UACRvB,MAAO,MACPwkG,YAAayD,GAIV,CACL1mG,OAAQ,SACRvB,MAAO,KACPwkG,YAAayD,EAEjB,CCxFA,QACEnU,WAAY,CACVoU,mBAAkB,IAEpB,IAAA91G,GACE,MAAO,CACLswG,aAAc,CACZC,KAAM,CAAC,EACPW,MAAO,CAAC,GAEVsB,eAAgB,CACdC,SAAU,CAAC,EACXG,QAAS,CACP94C,SAAS,EACTlrD,QAAS,YACTikG,UAAW,CACThT,IAAK,GACLztC,OAAQ,CAAC,CACPrzD,IAAK,KACLqG,MAAO,SAET4tG,eAAgB,MAItBI,eAAgB,CAAC,EACjBxB,UAAW,GAGXthG,SAAS,EACTiiG,cAAc,EAEdwD,gBAAiB,GAEjBC,iBAAkB,GAGlBhF,qBAAqB,EAErBS,sBAAsB,EAEtBX,mBAAmB,EAEnBO,oBAAoB,EAIpBM,uBAAuB,EACvB2C,qBAAqB,EACrBK,uBAAuB,EACvBR,gBAAiB,CAAC,CAChBC,SAAU,8BACVhvG,MAAO,KACN,CACDgvG,SAAU,8BACVhvG,MAAO,KACN,CACDgvG,SAAU,4BACVhvG,MAAO,KACN,CACDgvG,SAAU,2BACVhvG,MAAO,KACN,CACDgvG,SAAU,6BACVhvG,MAAO,KACN,CACDgvG,SAAU,4BACVhvG,MAAO,MAETyuG,SAAU,CACRn0G,KAAM,GACNu2G,MAAO,GACPpE,YAAa,GACbkC,aAAa,EACbE,gBAAiB,EACjBC,eAAgB,IAChBG,YAAY,GAEdG,aAAc,CACZnjG,GAAI,GACJ3R,KAAM,GACNu2G,MAAO,GACPpE,YAAa,GACbkC,aAAa,EACbE,gBAAiB,EACjBC,eAAgB,IAChBG,YAAY,GAEdO,aAAc,CACZl1G,KAAM,GACN8rG,MAAO,IAGb,EACAtrG,SAAU,CACR,WAAAyzG,GACE,OAAOvzG,OAAOC,WAAa,IAAM,MAAQ,KAC3C,EACA,aAAAmwG,GACE,MAAO,CACLC,SAAU,CAAC,CACTyF,UAAW,CAACC,EAAM/wG,EAAO8f,KACvB,MAAMkxF,EAAmB,CAAC,IAAK,IAAK,IAAK,IAAK,KACxCC,EAAkBD,EAAiB7tC,KAAK+tC,GAAQlxG,GAASA,EAAMyxB,SAASy/E,IAC1ED,EACFnxF,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,qCAE3B4lB,KAGJoyC,QAAS,SAEX25C,uBAAwB,CAAC,CACvBiF,UAAW,CAACC,EAAM/wG,EAAO8f,KAClB9f,EAEMA,IAAU9E,KAAKgwG,aAAaC,KAAKE,SAC1CvrF,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,kCAE3B4lB,IAJAA,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,wCAO/Bg4D,QAAS,SAGf,EACA,cAAA65C,GACE,MAAO,CACLO,wBAAyB,CAAC,CACxBwE,UAAW,CAACC,EAAM/wG,EAAO8f,KAClB9f,EAEMA,IAAU9E,KAAKgwG,aAAaY,MAAMI,cAC3CpsF,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,kCAE3B4lB,IAJAA,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,uCAO/Bg4D,QAAS,SAGf,EACA,WAAAg8C,GACE,MAAMiD,EAAwB,CAACJ,EAAM/wG,EAAO8f,MACrCpf,OAAO0wG,UAAUpxG,IAAUA,EAAQ,GAAKA,EAAQ,KACnD8f,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,sCAE3B4lB,KAGJ,MAAO,CACLuuF,kBAAmB,CAAC,CAClByC,UAAWK,EACXj/C,QAAS,WAEXo8C,mBAAoB,CAAC,CACnBwC,UAAWK,EACXj/C,QAAS,WAGf,EACA,UAAAw8C,GACE,MAAO,CACLp0G,KAAM,CAAC,CACLi3F,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,iCACjBg4D,QAAS,SAEXu6C,YAAa,CAAC,CACZlb,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,mCACjBg4D,QAAS,WAEX28C,gBAAiB,CAAC,CAChBiC,UAAW,CAACC,EAAM/wG,EAAO8f,KAClB5kB,KAAKuzG,SAASE,aAAiB3uG,KAASA,GAAS,GAGpD8f,IAFAA,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,sCAK/Bg4D,QAAS,SAGf,EACA,cAAAm9C,GACE,MAAO,CACL5C,YAAa,CAAC,CACZlb,UAAU,EACV7mF,QAASxP,KAAKhB,GAAG,mCACjBg4D,QAAS,WAEX28C,gBAAiB,CAAC,CAChBiC,UAAW,CAACC,EAAM/wG,EAAO8f,KAClB5kB,KAAKk0G,aAAaT,aAAiB3uG,KAASA,GAAS,GAGxD8f,IAFAA,EAAS,IAAI8hB,MAAM1mC,KAAKhB,GAAG,sCAK/Bg4D,QAAS,SAGf,GAEF32D,QAAS,CACP,wBAAA81G,CAAyBnX,EAAW,CAAC,GACnC,MAAMsT,EAAUtT,EAASsT,SAAW,CAAC,EAC/BC,EAAYD,EAAQC,WAAa,CAAC,EAClCzgD,EAAS/rD,MAAM6O,QAAQ29F,EAAUzgD,SAAWygD,EAAUzgD,OAAOprD,OAAS,EAAI6rG,EAAUzgD,OAAOj9C,IAAIqjF,IAAS,CAC5Gz5F,IAAKy5F,GAAOz5F,KAAO,GACnBqG,MAAOozF,GAAOpzF,OAAS,MACnB,CAAC,CACLrG,IAAK,KACLqG,MAAO,SAEH4tG,EAAiB3sG,MAAM6O,QAAQ29F,EAAUG,gBAAkBH,EAAUG,eAAe79F,IAAIo+B,GACvE,kBAAVA,EAA2BA,EAC/BA,GAAOykC,MAAQ,IACnB,GACL,MAAO,IACFsnB,EACHmT,SAAUnT,EAASmT,UAAY,CAAC,EAChCG,QAAS,CACP94C,QAAS84C,EAAQ94C,UAAW,EAC5BlrD,QAASgkG,EAAQhkG,SAAW,YAC5BikG,UAAW,CACThT,IAAKgT,EAAUhT,KAAO,GACtBztC,SACA4gD,mBAIR,EACA,eAAAD,GACEzyG,KAAKkyG,eAAeI,QAAQC,UAAUzgD,OAAO9qC,KAAK,CAChDvoB,IAAK,GACLqG,MAAO,IAEX,EACA,kBAAA0tG,CAAmB9zG,GACbsB,KAAKkyG,eAAeI,QAAQC,UAAUzgD,OAAOprD,QAAU,GAC3D1G,KAAKkyG,eAAeI,QAAQC,UAAUzgD,OAAOxkC,OAAO5uB,EAAO,EAC7D,EACA,uBAAAm0G,GACE7yG,KAAKkyG,eAAeI,QAAQC,UAAUG,eAAe1rF,KAAK,GAC5D,EACA,0BAAA4rF,CAA2Bl0G,GACzBsB,KAAKkyG,eAAeI,QAAQC,UAAUG,eAAeplF,OAAO5uB,EAAO,EACrE,EACA,wBAAAi0G,CAAyBj0G,EAAO8wC,GAC9B,MAAM4mE,EAASp2G,KAAKkyG,eAAeI,QAAQC,UAAUG,eAC/C2D,EAAc33G,EAAQ8wC,EAC5B,GAAI6mE,EAAc,GAAKA,GAAeD,EAAO1vG,OAAQ,OACrD,MAAOusC,GAASmjE,EAAO9oF,OAAO5uB,EAAO,GACrC03G,EAAO9oF,OAAO+oF,EAAa,EAAGpjE,EAChC,EACA,mBAAAo9D,GACMrwG,KAAKgwG,aAAaC,KAAKE,WAAanwG,KAAKy1G,gBAC3Cz1G,KAAK0wG,qBAAsB,EAE3B1wG,KAAK0wG,qBAAsB,CAE/B,EACA,oBAAAO,GACMjxG,KAAKgwG,aAAaY,MAAMI,gBAAkBhxG,KAAK01G,iBACjD11G,KAAKmxG,sBAAuB,EAE5BnxG,KAAKmxG,sBAAuB,CAEhC,EACA,uBAAAV,CAAwB6F,GAClBA,IACFt2G,KAAKgwG,aAAaC,KAAKE,SAAW,GAClCnwG,KAAK0wG,qBAAsB,EAE/B,EACA,wBAAAQ,CAAyBoF,GACnBA,IACFt2G,KAAKgwG,aAAaY,MAAMI,cAAgB,GACxChxG,KAAKgwG,aAAaY,MAAME,cAAgB,GACxC9wG,KAAKmxG,sBAAuB,EAEhC,EAEA,iBAAAM,CAAkB8E,GAChB,MAAMC,EAAgB,CACpB,OAAUx2G,KAAKhB,GAAG,0BAClB,OAAUgB,KAAKhB,GAAG,0BAClB,KAAQgB,KAAKhB,GAAG,wBAChB,OAAUgB,KAAKhB,GAAG,2BAEpB,OAAOw3G,EAAcD,IAAeA,CACtC,EACA,UAAA7E,CAAW+E,GACT,OAAO,IAAI/wG,KAAK+wG,GAAY7pG,eAAe,QAC7C,EACA,mBAAM8pG,GACJ12G,KAAKiyG,cAAe,EACpB,IACE,MAAM7W,QAAiB,EAAAO,GAAA,GAAc,yBAC/Bj8F,QAAa07F,EAASU,OAC5B97F,KAAKsxG,UAAY5xG,EAAKi3G,QAAU,EAClC,CAAE,MAAOptC,GACPvpE,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,+BAC9B,CAAE,QACAgB,KAAKiyG,cAAe,CACtB,CACF,EACA,WAAAqB,GACEtzG,KAAKU,MAAMk2G,UAAUtI,SAASgB,UAC5B,GAAK/sF,EACL,IACEviB,KAAKuzG,SAASoC,MAAQ,QAEtB,IAAI9D,EAAY,KACZkC,GAAa,EACZ/zG,KAAKuzG,SAASE,cACjB5B,EAAY6C,GAAiB,IAAIhvG,KAAQ1F,KAAKuzG,SAASI,gBAAiB3zG,KAAKuzG,SAASK,gBACtFG,EAAa/zG,KAAKuzG,SAASQ,YAE7B,MAAM3Y,QAAiB,EAAAO,GAAA,GAAc,wBAAyB,CAC5D3uE,OAAQ,OACR2wE,QAAS,CACP,eAAgB,oBAElBxa,KAAMruD,KAAKC,UAAU,CACnB31B,KAAMY,KAAKuzG,SAASn0G,KACpBu2G,MAAO31G,KAAKuzG,SAASoC,MACrBpE,YAAavxG,KAAKuzG,SAAShC,YAC3BM,YACAkC,iBAGEr0G,QAAa07F,EAASU,OACxBV,EAAS56E,IACXxgB,KAAKs0G,aAAe,CAClBl1G,KAAMM,EAAKN,KACX8rG,MAAOxrG,EAAKwrG,OAEdlrG,KAAKqxG,uBAAwB,EAC7BrxG,KAAKq0G,uBAAwB,EAC7Br0G,KAAKuzG,SAAW,CACdn0G,KAAM,GACNu2G,MAAO,GACPpE,YAAa,GACbkC,aAAa,EACbE,gBAAiB,EACjBC,eAAgB,IAChBG,YAAY,SAER/zG,KAAK02G,gBACX12G,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,oCAE9BgB,KAAK2kG,SAASp7B,MAAM7pE,EAAK6pE,OAASvpE,KAAKhB,GAAG,iCAE9C,CAAE,MAAOuqE,GACPvpE,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,iCAC9B,GAEJ,EACA,SAAA+yG,CAAU7G,GACR,MAAM2L,EAAoC,OAApB3L,EAAM2G,gBAA0C/9F,IAApBo3F,EAAM2G,UACxD7xG,KAAKk0G,aAAe,CAClBnjG,GAAIm6F,EAAMn6F,GACV3R,KAAM8rG,EAAM9rG,KACZu2G,MAAOzK,EAAMyK,MACbpE,YAAa,IAAIrG,EAAMqG,aACvBkC,aAAcoD,EACdlD,gBAAiB,EACjBC,eAAgB,IAChBG,WAAY7I,EAAM6I,aAAc,GAElC/zG,KAAKg0G,qBAAsB,CAC7B,EACA,WAAAC,GACEj0G,KAAKU,MAAMo2G,cAAcxI,SAASgB,UAChC,GAAK/sF,EACL,IACE,IAAIsvF,EAAY,KACZkC,GAAa,EACZ/zG,KAAKk0G,aAAaT,cACrB5B,EAAY6C,GAAiB,IAAIhvG,KAAQ1F,KAAKk0G,aAAaP,gBAAiB3zG,KAAKk0G,aAAaN,gBAC9FG,EAAa/zG,KAAKk0G,aAAaH,YAEjC,MAAM3Y,QAAiB,EAAAO,GAAA,GAAc,wBAAyB,CAC5D3uE,OAAQ,MACR2wE,QAAS,CACP,eAAgB,oBAElBxa,KAAMruD,KAAKC,UAAU,CACnBgiF,QAAS/2G,KAAKk0G,aAAanjG,GAC3BwgG,YAAavxG,KAAKk0G,aAAa3C,YAC/BM,YACAkC,iBAGEr0G,QAAa07F,EAASU,OACxBV,EAAS56E,IACXxgB,KAAKg0G,qBAAsB,QACrBh0G,KAAK02G,gBACX12G,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,oCAE9BgB,KAAK2kG,SAASp7B,MAAM7pE,EAAK6pE,OAASvpE,KAAKhB,GAAG,iCAE9C,CAAE,MAAOuqE,GACPvpE,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,iCAC9B,GAEJ,EACA,iBAAMgzG,CAAY+E,GAChB,UACQ/2G,KAAKmlG,SAASnlG,KAAKhB,GAAG,kCAAmCgB,KAAKhB,GAAG,uCAAwC,CAC7GomG,kBAAmBplG,KAAKhB,GAAG,oCAC3BqmG,iBAAkBrlG,KAAKhB,GAAG,wCAC1BM,KAAM,YAER,MAAM87F,QAAiB,EAAAO,GAAA,GAAc,4BAA4Bob,IAAW,CAC1E/pF,OAAQ,WAEJttB,QAAa07F,EAASU,OACxBV,EAAS56E,UACLxgB,KAAK02G,gBACX12G,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,oCAE9BgB,KAAK2kG,SAASp7B,MAAM7pE,EAAK6pE,OAASvpE,KAAKhB,GAAG,iCAE9C,CAAE,MAAOuqE,GACO,WAAVA,GACFvpE,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,iCAEhC,CACF,EACA,eAAMw1G,GACJ,UACQwC,UAAUC,UAAUC,UAAUl3G,KAAKs0G,aAAapJ,OACtDlrG,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,2BAChC,CAAE,MAAOuqE,GACPvpE,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,0BAC9B,CACF,EACA,yBAAA00G,CAA0BvwF,GACpBA,IACFnjB,KAAKuzG,SAASQ,YAAa,EAE/B,EACA,uBAAAK,CAAwBjxF,GAClBA,IACFnjB,KAAKk0G,aAAaH,YAAa,EAEnC,EACA,cAAAnC,CAAeC,GACb,OAAOD,GAAeC,EACxB,EACA,YAAAvJ,GAEE,IAAI6O,EAAqB,GAGzBA,EAAmBnwF,KAAK,IAAIwvB,QAAQvT,IAClCjjC,KAAKU,MAAM02G,aAAa9I,SAAS/rF,IAC/B0gB,EAAQ1gB,QAKZ40F,EAAmBnwF,KAAK,IAAIwvB,QAAQvT,IAClCjjC,KAAKU,MAAM22G,cAAc/I,SAAS/rF,IAChC0gB,EAAQ1gB,QAKZ40F,EAAmBnwF,KAAK,IAAIwvB,QAAQvT,IAClCjjC,KAAKU,MAAM42G,WAAWhJ,SAAS/rF,IAC7B0gB,EAAQ1gB,QAKZi0B,QAAQoB,IAAIu/D,GAAoBz/D,KAAK6/D,IACnC,MAAMC,EAAUD,EAAQE,MAAMl1F,GAASA,GACvC,IAAKi1F,EACH,OAIF,GAAIx3G,KAAK8yG,eAAeK,kBAAoB,IAAM3tG,OAAO0wG,UAAUl2G,KAAK8yG,eAAeK,oBAAsBnzG,KAAK8yG,eAAeK,kBAAoB,MAAQnzG,KAAK8yG,eAAeM,mBAAqB,IAAM5tG,OAAO0wG,UAAUl2G,KAAK8yG,eAAeM,qBAAuBpzG,KAAK8yG,eAAeM,mBAAqB,KAE/S,YADApzG,KAAK2kG,SAASp7B,MAAMvpE,KAAKhB,GAAG,qCAG9B,MAAMggG,EAAW,CACf0Y,KAAM13G,KAAKgwG,aACX2H,OAAQ33G,KAAKkyG,eACb0F,OAAQ53G,KAAK8yG,uBAGR9T,EAAS0Y,KAAKzH,KAAKU,8BACnB3R,EAAS0Y,KAAK9G,MAAMQ,wBAGvBpxG,KAAKwwG,oBACPxR,EAAS0Y,KAAKzH,KAAK4H,QAAS,EAC5B7Y,EAAS0Y,KAAKzH,KAAKE,SAAW,IAE5BnwG,KAAK+wG,qBACP/R,EAAS0Y,KAAK9G,MAAMiH,QAAS,EAC7B7Y,EAAS0Y,KAAK9G,MAAMI,cAAgB,KAEtC,EAAArV,GAAA,GAAc,iCAAkC,CAC9C3uE,OAAQ,OACR2wE,QAAS,CACP,eAAgB,oBAElBxa,KAAMruD,KAAKC,UAAUiqE,KACpBtnD,KAAKxqB,GAAOA,EAAI4uE,QAAQpkD,KAAKh4C,IAE9B,GAAIA,EAAKo4G,qBAAsB,CAC7B,MAAMC,EAAM/3G,KAAKhB,GAAG,2CAMpB,OALAgB,KAAK2kG,SAASC,QAAQmT,QACtB3pF,WAAW,KACTpuB,KAAKg4G,OAAOC,OAAO,oBAAoB,GACvCj4G,KAAKk4G,QAAQlxF,KAAK,gBACjB,KAEL,CACAhnB,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,8BAE9BgB,KAAKgwG,aAAaC,KAAKE,SAAW,GAClCnwG,KAAKgwG,aAAaY,MAAMI,cAAgB,GACxChxG,KAAKy1G,gBAAkB,GACvBz1G,KAAK01G,iBAAmB,GAEpB1W,EAAS0Y,KAAKzH,KAAKE,WAAanR,EAAS0Y,KAAKzH,KAAK4H,OACrD73G,KAAKgwG,aAAaC,KAAKM,cAAe,EAC7BvR,EAAS0Y,KAAKzH,KAAK4H,SAC5B73G,KAAKgwG,aAAaC,KAAKM,cAAe,GAEpCvR,EAAS0Y,KAAK9G,MAAMI,gBAAkBhS,EAAS0Y,KAAK9G,MAAMiH,OAC5D73G,KAAKgwG,aAAaY,MAAML,cAAe,EAC9BvR,EAAS0Y,KAAK9G,MAAMiH,SAC7B73G,KAAKgwG,aAAaY,MAAML,cAAe,GAEzCvwG,KAAK0wG,qBAAsB,EAC3B1wG,KAAKmxG,sBAAuB,EAC5BnxG,KAAKwwG,mBAAoB,EACzBxwG,KAAK+wG,oBAAqB,IACzBhC,MAAM,SAIb,GAEF,OAAAxtG,GACEvB,KAAKgQ,SAAU,GAEf,EAAA2rF,GAAA,GAAc,kCAAkCjkD,KAAK0jD,GAAYA,EAASU,QAAQpkD,KAAKh4C,IACrFM,KAAKgwG,aAAetwG,EAAKg4G,KACzB13G,KAAKkyG,eAAiBlyG,KAAKm2G,yBAAyBz2G,EAAKi4G,QACzD33G,KAAK8yG,eAAiBpzG,EAAKk4G,OAG3B53G,KAAKy1G,gBAAkB,GACvBz1G,KAAK01G,iBAAmB,GACxB11G,KAAKgwG,aAAaC,KAAKU,uBAAyB,GAChD3wG,KAAKgwG,aAAaY,MAAMQ,wBAA0B,GAGlDpxG,KAAK02G,kBACJlH,QAAQ,KACTxvG,KAAKgQ,SAAU,GAEnB,GC7jBF,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,UCRA,MAAM,GAAa,CACjBxS,MAAO,iBAEH,GAAa,CACjBA,MAAO,eAEF,SAAS,GAAOI,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACjD2D,EAAwB,KACxBwlG,EAAuB,MACvBC,EAAuB,MACvBF,EAAuB,MACvBI,EAAsB,MACtBD,EAA0B,MAC1BG,EAAqB,MACrBoI,EAAgC,GAChCtjG,EAAqB,IAC3B,OAAO,UAAiB,WAAc,QAAoB,MAAO,GAAY,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYvO,EAASk6G,gBAAiB,CAACC,EAAeC,MACnL,WAAc,QAAoB,MAAO,CAC9C55G,IAAK45G,EACL76G,MAAO,kBACN,EAAC,QAAoB,KAAM,IAAY,QAAiB66G,GAAe,IAAI,QAAa3Q,EAAoB,CAC7GyC,MAAOnsG,EAAMghG,SACb,cAAe,SACd,CACDx/F,SAAS,QAAS,IAAM,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAY44G,EAAe,CAACE,EAAS55G,MAC7G,WAAc,QAAa6oG,EAAyB,CACzD9oG,IAAK65G,EAAQvnG,IACZ,CACDzD,OAAO,QAAS,IAAM,EAAC,SAAiB,QAAiBrP,EAASs6G,UAAUD,EAAS,UAAY,IAAK,GAAIA,EAAQp1B,UAAW,WAAc,QAAarhF,EAAuB,CAC7KpD,IAAK,EACL0D,QAASlE,EAASs6G,UAAUD,EAAS,WACrCl2G,UAAW,MACX,cAAe,IACd,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,cAAe,QAAoB,IAAI,KAC9C9C,SAAS,QAAS,IAAM,CAAkB,WAAjB84G,EAAQh5G,OAAqB,WAAc,QAAagoG,EAAsB,CACrG7oG,IAAK,EACLqH,WAAYwyG,EAAQxzG,MACpB,sBAAuBjG,GAAUy5G,EAAQxzG,MAAQjG,EACjDoD,SAAUq2G,EAAQ/P,MAClB5B,YAAa1oG,EAASs6G,UAAUD,EAAS,eACzCj6G,MAAO,CACL,MAAS,SAEV,CACDmB,SAAS,QAAS,IAAM,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAY84G,EAAQxqG,QAASopC,KACrG,WAAc,QAAamwD,EAAsB,CACtD5oG,IAAKy4C,EAAOpyC,MACZwI,MAAOrP,EAASu6G,gBAAgBthE,GAChCpyC,MAAOoyC,EAAOpyC,OACb,KAAM,EAAG,CAAC,QAAS,YACpB,QACJxC,EAAG,GACF,KAAM,CAAC,aAAc,sBAAuB,WAAY,iBAAoC,gBAAjBg2G,EAAQh5G,OAA0B,WAAc,QAAagoG,EAAsB,CAC/J7oG,IAAK,EACLqH,WAAYwyG,EAAQxzG,MACpB,sBAAuBjG,GAAUy5G,EAAQxzG,MAAQjG,EACjDoD,UAAWhE,EAASw6G,sBAA+D,IAAvCx6G,EAASy6G,mBAAmBhyG,OACxEigG,YAAa/oG,EAAKoB,GAAG,oCACrB25G,UAAW,GACXt6G,MAAO,CACL,MAAS,SAEV,CACDmB,SAAS,QAAS,IAAM,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYvB,EAASy6G,mBAAoBlO,KACjH,WAAc,QAAanD,EAAsB,CACtD5oG,IAAK+rG,EAAGprG,KACRkO,MAAOk9F,EAAGprG,KACV0F,MAAO0lG,EAAGprG,MACT,KAAM,EAAG,CAAC,QAAS,YACpB,QACJkD,EAAG,GACF,EAAG,CAAC,aAAc,sBAAuB,WAAY,iBAAoC,YAAjBg2G,EAAQh5G,OAAsB,WAAc,QAAa8nG,EAAsB,CACxJ3oG,IAAK,EACLqH,WAAYwyG,EAAQxzG,MACpB,sBAAuBjG,GAAUy5G,EAAQxzG,MAAQjG,EACjDoD,SAAUq2G,EAAQ/P,OACjB,KAAM,EAAG,CAAC,aAAc,sBAAuB,cAAiC,aAAjB+P,EAAQh5G,OAAuB,WAAc,QAAakoG,EAAqB,CAC/I/oG,IAAK,EACLqH,WAAYwyG,EAAQxzG,MACpB,sBAAuBjG,GAAUy5G,EAAQxzG,MAAQjG,EACjDS,KAAM,WACNgsG,SAAU,CACRC,QAAS,GAEXx3E,OAAQ,WACR9xB,SAAUq2G,EAAQ/P,MAClB5B,YAAa1oG,EAASs6G,UAAUD,EAAS,gBACxC,KAAM,EAAG,CAAC,aAAc,sBAAuB,WAAY,mBAAoB,WAAc,QAAa9Q,EAAqB,CAChI/oG,IAAK,EACLqH,WAAYwyG,EAAQxzG,MACpB,sBAAuBjG,GAAUy5G,EAAQxzG,MAAQjG,EACjDoD,SAAUq2G,EAAQ/P,MAClB5B,YAAa1oG,EAASs6G,UAAUD,EAAS,gBACxC,KAAM,EAAG,CAAC,aAAc,sBAAuB,WAAY,mBAC9Dh2G,EAAG,GACF,QACD,QACJA,EAAG,GACF,KAAM,CAAC,cACR,OAAO,QAAawtG,EAA+B,CACrD97E,MAAOh2B,EAAMgS,QACbpR,QAASX,EAASqqG,cACjB,KAAM,EAAG,CAAC,OAAQ,eAAgB,CAAC,CAAC97F,EAAoBxO,EAAMgS,UACnE,C,cCzGA,IACEoxF,WAAY,CACVoU,mBAAkB,IAEpB,IAAA91G,GACE,MAAO,CACLs/F,SAAU,CACRpoD,OAAQ,IAGV5mC,SAAS,EAET4oG,kBAAmB,CAAC,EAExB,EACAh5G,SAAU,CACR,IAAAi5G,GACE,MAA6B,OAAtB74G,KAAK84G,MAAMlkF,MACpB,EAEA,eAAAujF,GACE,MAAM5xD,EAAU,CAAC,EAUjB,OATIvmD,KAAKg/F,SAASpoD,QAChB52C,KAAKg/F,SAASpoD,OAAO7pB,QAAQurF,IAC3B,MAAMS,EAAW/4G,KAAK64G,KAAOP,EAAQU,aAAeV,EAAQS,UAAY/4G,KAAKhB,GAAG,yBAA2Bs5G,EAAQS,UAAY/4G,KAAKhB,GAAG,yBAClIunD,EAAQwyD,KACXxyD,EAAQwyD,GAAY,IAEtBxyD,EAAQwyD,GAAU/xF,KAAKsxF,KAGpB/xD,CACT,EAEA,oBAAAkyD,GACE,MAAMQ,EAAiBj5G,KAAKg/F,SAASpoD,QAAQ+P,KAAK1yC,GAAc,yBAATA,EAAElD,IACzD,OAAOkoG,GAAgBn0G,OAAS,EAClC,EAEA,kBAAA4zG,GACE,OAAO14G,KAAK44G,kBAAkB54G,KAAKy4G,uBAAyB,EAC9D,GAEFv4G,MAAO,CAEL,oBAAAu4G,CAAqBS,EAAQC,GAC3B,GAAID,IAAWC,EAAQ,CACrB,MAAMC,EAAqBp5G,KAAKg/F,SAASpoD,QAAQ+P,KAAK1yC,GAAc,uBAATA,EAAElD,IAC7D,GAAIqoG,EAAoB,CACtB,MAAMC,EAAiBr5G,KAAK44G,kBAAkBM,IAAW,GACpDG,EAAepxC,KAAKuiC,GAAMA,EAAGprG,OAASg6G,EAAmBt0G,SAC5Ds0G,EAAmBt0G,MAAQ,GAE/B,CACF,CACF,GAEFzE,QAAS,CACP,SAAAk4G,CAAU/5G,EAAMy0C,GACd,OAAIjzC,KAAK64G,MAAQr6G,EAAKy0C,EAAQ,OAAez0C,EAAKy0C,EAAQ,OACnDz0C,EAAKy0C,IAAU,EACxB,EACA,eAAAulE,CAAgBthE,GACd,OAAIl3C,KAAK64G,MAAQ3hE,EAAOoiE,SAAiBpiE,EAAOoiE,SACzCpiE,EAAO5pC,KAChB,EACA,YAAAg7F,IACE,EAAA3M,GAAA,GAAc,6BAA8B,CAC1C3uE,OAAQ,OACR2wE,QAAS,CACP,eAAgB,oBAElBxa,KAAMruD,KAAKC,UAAU/0B,KAAKg/F,YACzBtnD,KAAK,IAAM13C,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,0BAC9C,EAEA,4BAAMu6G,GACJ,IACE,MAAMne,QAAiBoe,GAAA,EAAMvkF,IAAI,iBAC7BmmE,EAAS17F,OACXM,KAAK44G,kBAAoBxd,EAAS17F,KAEtC,CAAE,MAAO6pE,GACPxmC,QAAQwmC,MAAM,sCAAuCA,EACvD,CACF,GAEF,OAAAhoE,GACEvB,KAAKgQ,SAAU,EAEfhQ,KAAKu5G,0BAEL,EAAA5d,GAAA,GAAc,8BAA8BjkD,KAAK0jD,GAAYA,EAASU,QAAQpkD,KAAKh4C,IACjFM,KAAKg/F,SAAWt/F,EAEZM,KAAKg/F,SAASpoD,QAChB52C,KAAKg/F,SAASpoD,OAAO7pB,QAAQurF,IACN,YAAjBA,EAAQh5G,OAEmB,kBAAlBg5G,EAAQxzG,MACjBwzG,EAAQxzG,MAA0B,SAAlBwzG,EAAQxzG,WACGgP,IAAlBwkG,EAAQxzG,OAAyC,OAAlBwzG,EAAQxzG,QAEhDwzG,EAAQxzG,MAAQwzG,EAAQ94G,UAAW,QAK1CgwG,QAAQ,KACTxvG,KAAKgQ,SAAU,GAEnB,GCjHF,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,UCRA,MAAM,GAAa,CACjBxS,MAAO,mBAEH,GAAa,CACjBA,MAAO,kBAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CACjBA,MAAO,eAEH,GAAa,CAAC,aACd,GAAa,CACjBA,MAAO,eAEF,SAAS,GAAOI,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACjD2D,EAAwB,KACxBulG,EAAuB,MACvBG,EAA0B,MAC1BG,EAAqB,MACrBF,EAAsB,MACtBH,EAAuB,MACvBC,EAAuB,MACvBwI,EAAgC,GAChCtjG,EAAqB,IAC3B,OAAO,UAAiB,WAAc,QAAoB,MAAO,GAAY,EAAC,QAAoB,MAAO,GAAY,EAAC,QAAoB,KAAM,GAAY,EAAC,SAAiB,QAAiB5O,EAAKoB,GAAG,8BAAgC,IAAK,IAAI,QAAa6C,EAAuB,CAClRM,QAASvE,EAAKoB,GAAG,oCACjBoD,UAAW,SACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,eAAe,QAAaolG,EAAoB,CACrDyC,MAAOnsG,EAAMghG,SAASya,UACtB,cAAe,SACd,CACDj6G,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,qBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMghG,SAASya,UAAUjgD,QACrC,sBAAuB37D,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAASya,UAAUjgD,QAAU36D,GAC9FoD,SAAUjE,EAAMghG,SAASya,UAAUlR,OAClC,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,YACPA,EAAG,GACF,EAAG,CAAC,WAAW,QAAoB,KAAM,GAAY,EAAC,SAAiB,QAAiB1E,EAAKoB,GAAG,iCAAmC,IAAK,IAAI,QAAa6C,EAAuB,CACjLM,QAASvE,EAAKoB,GAAG,uCACjBoD,UAAW,QACX,cAAe,IACd,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,eAAe,QAAaolG,EAAoB,CACrDyC,MAAOnsG,EAAMghG,SAAS0a,mBACtB,cAAe,SACd,CACDl6G,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,qBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMghG,SAAS0a,mBAAmBC,WAC9C,sBAAuB97G,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAAS0a,mBAAmBC,WAAa96G,GAC1GoD,SAAUjE,EAAMghG,SAAS0a,mBAAmBnR,OAC3C,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,2BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMghG,SAAS0a,mBAAmBE,SAC9C,sBAAuB/7G,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAAS0a,mBAAmBE,SAAW/6G,GACxGoD,SAAUjE,EAAMghG,SAAS0a,mBAAmBnR,OAC3C,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO,WACN,CACD9N,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMghG,SAAS0a,mBAAmBG,WAC9C,sBAAuBh8G,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAAS0a,mBAAmBG,WAAah7G,GAC1GoD,SAAUjE,EAAMghG,SAAS0a,mBAAmBnR,MAC5CjpG,KAAM,WACN,gBAAiB,GACjBgxG,aAAc,gBACb,KAAM,EAAG,CAAC,aAAc,eAC3BhuG,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,WAAW,QAAoB,KAAM,GAAY,EAAC,SAAiB,QAAiB1E,EAAKoB,GAAG,6BAA+B,IAAK,IAAI,QAAa6C,EAAuB,CAC7KM,QAASvE,EAAKoB,GAAG,mCACjBoD,UAAW,SACV,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,eAAe,QAAaolG,EAAoB,CACrDyC,MAAOnsG,EAAMghG,SAAS8a,eACtB,cAAe,SACd,CACDt6G,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,qBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMghG,SAAS8a,eAAetgD,QAC1C,sBAAuB37D,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAAS8a,eAAetgD,QAAU36D,GACnGoD,SAAUjE,EAAMghG,SAAS8a,eAAevR,OACvC,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtD9kE,KAAM,6BACL,CACDn1B,OAAO,QAAS,IAAM,EAAC,QAAoB,OAAQ,MAAM,QAAiB1P,EAAKoB,GAAG,wBAAyB,IAAI,QAAa6C,EAAuB,CACjJM,QAASvE,EAAKoB,GAAG,8BACjBoD,UAAW,QACX,cAAe,IACd,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,cACP9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMghG,SAAS8a,eAAeC,WAC1C,sBAAuBl8G,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAAS8a,eAAeC,WAAal7G,GACtGoD,SAAUjE,EAAMghG,SAAS8a,eAAevR,OACvC,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,WAAW,QAAoB,KAAM,GAAY,EAAC,SAAiB,QAAiB1E,EAAKoB,GAAG,2BAA6B,IAAK,IAAI,QAAa6C,EAAuB,CAC3KM,QAASvE,EAAKoB,GAAG,iCACjBoD,UAAW,QACX,cAAe,IACd,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,eAAe,QAAaolG,EAAoB,CACrDyC,MAAOnsG,EAAMghG,SAASgb,aACtB,cAAe,SACd,CACDx6G,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,qBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMghG,SAASgb,aAAaxgD,QACxC,sBAAuB37D,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAASgb,aAAaxgD,QAAU36D,GACjGoD,SAAUjE,EAAMghG,SAASgb,aAAazR,OACrC,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtD9kE,KAAM,2BACL,CACDn1B,OAAO,QAAS,IAAM,EAAC,QAAoB,OAAQ,MAAM,QAAiB1P,EAAKoB,GAAG,4BAA6B,IAAI,QAAa6C,EAAuB,CACrJO,UAAW,QACX,cAAe,IACd,CACDD,SAAS,QAAS,IAAM,EAAC,QAAoB,MAAO,CAClD9D,MAAO,CACL,YAAa,QACb,cAAe,OAEjBosG,UAAW7sG,EAAKoB,GAAG,mCAClB,KAAM,EAAG,MACZQ,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,MAEL9C,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMghG,SAASgb,aAAaD,WACxC,sBAAuBl8G,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAASgb,aAAaD,WAAal7G,GACpGoD,SAAUjE,EAAMghG,SAASgb,aAAazR,MACtC5B,YAAa,0BACZ,KAAM,EAAG,CAAC,aAAc,eAC3BrkG,EAAG,MAELA,EAAG,GACF,EAAG,CAAC,WAAW,QAAoB,KAAM,GAAY,EAAC,SAAiB,QAAiB1E,EAAKoB,GAAG,qBAAuB,IAAK,IAAI,QAAa6C,EAAuB,CACrKM,QAASvE,EAAKoB,GAAG,2BACjBoD,UAAW,QACX,cAAe,IACd,CACD5C,SAAS,QAAS,IAAM,EAAC,QAAatB,EAA8B,CAClEa,KAAM,kBACNV,MAAO,CACL,cAAe,MACf,OAAU,eAGdiE,EAAG,GACF,EAAG,CAAC,eAAe,QAAaolG,EAAoB,CACrDyC,MAAOnsG,EAAMghG,SAASib,OACtB,cAAe,SACd,CACDz6G,SAAS,QAAS,IAAM,EAAC,QAAa+nG,EAAyB,CAC7Dj6F,MAAO1P,EAAKoB,GAAG,qBACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa4nG,EAAsB,CAC1DthG,WAAY9H,EAAMghG,SAASib,OAAOzgD,QAClC,sBAAuB37D,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAASib,OAAOzgD,QAAU36D,GAC3FoD,SAAUjE,EAAMghG,SAASib,OAAO1R,OAC/B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMghG,SAASib,OAAO9O,SAClC,sBAAuBttG,EAAO,KAAOA,EAAO,GAAKgB,GAAUb,EAAMghG,SAASib,OAAO9O,SAAWtsG,GAC5FoD,SAAUjE,EAAMghG,SAASib,OAAO1R,OAC/B,KAAM,EAAG,CAAC,aAAc,eAC3BjmG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,6BACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAagoG,EAAqB,CACzD1hG,WAAY9H,EAAMghG,SAASib,OAAO7O,SAClC,sBAAuBvtG,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMghG,SAASib,OAAO7O,SAAWvsG,GAC9FoD,SAAUjE,EAAMghG,SAASib,OAAO1R,MAChCjpG,KAAM,WACN,gBAAiB,GACjBgxG,aAAc,gBACb,KAAM,EAAG,CAAC,aAAc,eAC3BhuG,EAAG,GACF,EAAG,CAAC,WAAW,QAAailG,EAAyB,CACtDj6F,MAAO1P,EAAKoB,GAAG,kCACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa8nG,EAAsB,CAC1DxhG,WAAY9H,EAAMghG,SAASib,OAAOC,cAClC,sBAAuBr8G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMghG,SAASib,OAAOC,cAAgBr7G,GACnGoD,SAAUjE,EAAMghG,SAASib,OAAO1R,MAChC5B,YAAa/oG,EAAKoB,GAAG,kCACrB25G,UAAW,IACV,CACDn5G,SAAS,QAAS,IAAM,EAAC,QAAa6nG,EAAsB,CAC1D/5F,MAAO,WACPxI,MAAO,cACL,QAAauiG,EAAsB,CACrC/5F,MAAO,gBACPxI,MAAO,UACL,QAAauiG,EAAsB,CACrC/5F,MAAO,KACPxI,MAAO,QACL,QAAauiG,EAAsB,CACrC/5F,MAAO,UACPxI,MAAO,aACL,QAAauiG,EAAsB,CACrC/5F,MAAO,cACPxI,MAAO,iBACL,QAAauiG,EAAsB,CACrC/5F,MAAO,SACPxI,MAAO,aAETxC,EAAG,GACF,EAAG,CAAC,aAAc,WAAY,kBACjCA,EAAG,GACF,EAAG,CAAC,UAAWtE,EAAMghG,SAASib,OAAOC,eAAiBj8G,EAASk8G,kBAAkBzzG,OAAS,IAAK,WAAc,QAAa6gG,EAAyB,CACpJ9oG,IAAK,EACL6O,MAAO1P,EAAKoB,GAAG,gCACd,CACDQ,SAAS,QAAS,IAAM,EAAC,QAAa8nG,EAAsB,CAC1DxhG,WAAY9H,EAAMghG,SAASib,OAAOG,YAClC,sBAAuBv8G,EAAO,MAAQA,EAAO,IAAMgB,GAAUb,EAAMghG,SAASib,OAAOG,YAAcv7G,GACjGoD,SAAUjE,EAAMghG,SAASib,OAAO1R,MAChC5B,YAAa/oG,EAAKoB,GAAG,6BACrB25G,UAAW,IACV,CACDn5G,SAAS,QAAS,IAAM,GAAE,SAAW,IAAO,QAAoB,KAAW,MAAM,QAAYvB,EAASk8G,kBAAmB3P,KAChH,WAAc,QAAanD,EAAsB,CACtD5oG,IAAK+rG,EAAGprG,KACRkO,MAAOk9F,EAAGprG,KACV0F,MAAO0lG,EAAGprG,MACT,KAAM,EAAG,CAAC,QAAS,YACpB,QACJkD,EAAG,GACF,EAAG,CAAC,aAAc,WAAY,kBACjCA,EAAG,GACF,EAAG,CAAC,YAAa,QAAoB,IAAI,KAC5CA,EAAG,GACF,EAAG,CAAC,aAAa,QAAawtG,EAA+B,CAC9D97E,MAAOh2B,EAAMgS,QACbpR,QAASX,EAASqqG,cACjB,KAAM,EAAG,CAAC,OAAQ,eAAgB,CAAC,CAAC97F,EAAoBxO,EAAMgS,UACnE,CCjUA,QACEoxF,WAAY,CACVoU,mBAAkB,IAEpB,IAAA91G,GACE,MAAO,CACLs/F,SAAU,CACRya,UAAW,CAAC,EACZK,eAAgB,CAAC,EACjBJ,mBAAoB,CAAC,EACrBO,OAAQ,CAAC,EACTD,aAAc,CAAC,GAEjBpB,kBAAmB,CAAC,EAGpB5oG,SAAS,EAEb,EACApQ,SAAU,CAER,iBAAAu6G,GACE,MAAM3T,EAAcxmG,KAAKg/F,SAASib,QAAQC,cAC1C,OAAO1T,GAAcxmG,KAAK44G,kBAAkBpS,IAAqB,EACnE,GAEFtmG,MAAO,CACL,kCAEMF,KAAKg/F,SAASib,SAChBj6G,KAAKg/F,SAASib,OAAOG,YAAc,GAEvC,GAEF/5G,QAAS,CACP,YAAAioG,IACE,EAAA3M,GAAA,GAAc,+BAAgC,CAC5C3uE,OAAQ,OACR2wE,QAAS,CACP,eAAgB,oBAElBxa,KAAMruD,KAAKC,UAAU/0B,KAAKg/F,YACzBtnD,KAAK,IAAM13C,KAAK2kG,SAAS5I,QAAQ/7F,KAAKhB,GAAG,4BAC9C,EACA,4BAAMu6G,GACJ,IACE,MAAMne,QAAiB,EAAAO,GAAA,GAAc,iBACjCP,EAAS56E,KACXxgB,KAAK44G,wBAA0Bxd,EAASU,OAE5C,CAAE,MAAOvyB,GACPxmC,QAAQwmC,MAAM,sCAAuCA,EACvD,CACF,GAEF,OAAAhoE,GACEvB,KAAKgQ,SAAU,GAEf,EAAA2rF,GAAA,GAAc,gCAAgCjkD,KAAK0jD,GAAYA,EAASU,QAAQpkD,KAAKh4C,IACnFM,KAAKg/F,SAAWt/F,IACf8vG,QAAQ,KACTxvG,KAAKgQ,SAAU,IAGjBhQ,KAAKu5G,wBACP,GC7DF,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,IAAQ,CAAC,YAAY,qBAEzF,U,YCCA,IACEn6G,KAAM,eACNi7G,OAAQ,CAACC,GAAA,GACT,IAAA56G,GACE,MAAO,CACLf,YAAa,SACb4D,mBAAmB,EAEvB,EACArC,MAAO,CAEL,cAAe,CACb0G,WAAW,EACX,OAAAC,CAAQ0zG,GACNv6G,KAAKrB,YAAc47G,EAAQ75F,QAAQ,IAAK,IACxC5gB,OAAO06G,SAAS,EAAG,EACrB,GAEF,WAAA77G,CAAY87G,GAEV,MAAMC,EAAO,IAAID,IACjBz6G,KAAKk4G,QAAQlxF,KAAK,CAChB0zF,QAEJ,GAEFtZ,WAAY,CACVuZ,cAAa,IACbC,cAAa,EACbC,aAAY,GACZC,aAAY,GACZC,eAAc,GACdC,WAAU,GACVC,aAAY,IAEdr7G,SAAU,CACR,cAAAsC,GACE,OAAOpC,OAAOC,WAAa,GAC7B,EAEA,gBAAAyC,GACE,MAAMk4G,EAAO16G,KAAKk7G,OAAOR,KAAKh6F,QAAQ,IAAK,IAC3C,OAAQg6F,GACN,IAAK,SACH,OAAOG,GACT,IAAK,SACH,OAAOC,GACT,IAAK,WACH,OAAOC,GACT,IAAK,OACH,OAAOC,GACT,IAAK,SACH,OAAOC,GACT,QACE,OAAOJ,GAEb,GAEFx6G,QAAS,CACP,YAAAgC,GACE,MAAMk9F,EAA8C,mBACpD4b,MAAM5b,EAAK,CACTvyE,OAAQ,OACRouF,YAAa,UACbzd,QAAS,CACP,eAAgB,oBAElBxa,KAAMruD,KAAKC,UAAU,CACnBsmF,SAAU,YAEX7L,QAAQ,KACTxvG,KAAKg4G,OAAOC,OAAO,oBAAoB,GACvCj4G,KAAKk4G,QAAQlxF,KAAK,gBAEtB,EAEA,cAAAs0F,GACE,MAAMC,EAAc,UACpBz7G,OAAO07G,SAASd,KAAOa,EACvBv7G,KAAKrB,YAAc48G,EAAY76F,QAAQ,IAAK,GAC9C,GAEF,OAAAnf,GAEEvB,KAAKy7G,qBAAqB,aAAc,cAAc,GAAO,GAGxD37G,OAAO07G,SAASd,MACnB16G,KAAKs7G,gBAET,GC7FF,MAAM,IAA2B,OAAgB,GAAQ,CAAC,CAAC,SAAS,GAAQ,CAAC,YAAY,qBAEzF,S,iMCRA,MAAM/9G,EAAa,CACjBkB,IAAK,EACLjB,MAAO,mBACPk+G,QAAS,gBACTC,MAAO,8BAEHl+G,EAAa,CACjBgB,IAAK,EACLjB,MAAO,mBACPk+G,QAAS,gBACTC,MAAO,8BAEHj+G,EAAa,CACjBe,IAAK,EACLjB,MAAO,mBACPk+G,QAAS,gBACTC,MAAO,8BAEF,SAASh+G,EAAOC,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GAC1D,MAAMC,GAA+B,QAAkB,qBACvD,OAAO,WAAc,QAAoB,QAAQ,QAAYN,EAAKg+G,OAAQ,CACxEp+G,MAAO,yBACL,CAAiB,aAAhBM,EAAOwB,OAAuB,WAAc,QAAoB,MAAO/B,EAAY,IAAKM,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAoB,OAAQ,CAClJiV,EAAG,kdACF,MAAO,QAA2B,gBAAhBhV,EAAOwB,OAA0B,WAAc,QAAoB,MAAO7B,EAAY,IAAKI,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAmB,o8QAAy+Q,QAA2B,WAAhBC,EAAOwB,OAAqB,WAAc,QAAoB,MAAO5B,EAAY,IAAKG,EAAO,KAAOA,EAAO,GAAK,EAAC,QAAoB,OAAQ,CAC7xRiV,EAAG,ymEACF,MAAO,UAAY,WAAc,QAAa5U,EAA8B,CAC7EO,IAAK,EACLM,KAAMd,EAAS49G,iBACd,KAAM,EAAG,CAAC,WAAY,GAC3B,CC/BA,OACEz8G,KAAM,cACN08G,cAAc,EACdz8G,MAAO,CACLC,KAAM,CACJA,KAAMC,OACN82F,UAAU,IAGdz2F,SAAU,CACR,eAAAi8G,GACE,MAAME,EAAQ,CACZlO,KAAM,CAAC,MAAO,cACdC,GAAI,CAAC,MAAO,OACZC,QAAS,CAAC,MAAO,YAEnB,OAAOgO,EAAM/7G,KAAKV,OAAS,QAC7B,I,WCVJ,MAAMqC,GAA2B,OAAgB,EAAQ,CAAC,CAAC,SAAShE,GAAQ,CAAC,YAAY,qBAEzF,O,mLCTA,SAASq+G,EAAQt1F,GAGf,OAAOs1F,EAAU,mBAAqB3yF,QAAU,iBAAmBA,OAAO4yF,SAAW,SAAUv1F,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqB2C,QAAU3C,EAAEtE,cAAgBiH,QAAU3C,IAAM2C,OAAOxF,UAAY,gBAAkB6C,CACpH,EAAGs1F,EAAQt1F,EACb,CCPA,SAAS4C,EAAY9H,EAAGlO,GACtB,GAAI,UAAY0oG,EAAQx6F,KAAOA,EAAG,OAAOA,EACzC,IAAIzO,EAAIyO,EAAE6H,OAAOC,aACjB,QAAI,IAAWvW,EAAG,CAChB,IAAIyB,EAAIzB,EAAEgR,KAAKvC,EAAGlO,GAAK,WACvB,GAAI,UAAY0oG,EAAQxnG,GAAI,OAAOA,EACnC,MAAM,IAAIgmF,UAAU,+CACtB,CACA,OAAQ,WAAalnF,EAAI/T,OAASiG,QAAQgc,EAC5C,CCRA,SAAS06F,EAAc16F,GACrB,IAAIhN,EAAI8U,EAAY9H,EAAG,UACvB,MAAO,UAAYw6F,EAAQxnG,GAAKA,EAAIA,EAAI,EAC1C,CCJA,SAASkxC,EAAgB3yC,EAAGO,EAAGkO,GAC7B,OAAQlO,EAAI4oG,EAAc5oG,MAAOP,EAAI/E,OAAO4e,eAAe7Z,EAAGO,EAAG,CAC/DxO,MAAO0c,EACPsL,YAAY,EACZD,cAAc,EACd6O,UAAU,IACP3oB,EAAEO,GAAKkO,EAAGzO,CACjB,C","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.e05f38bd.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..ebd9ab8a887cfe83a0389d1db559fadd7e44848a GIT binary patch literal 364915 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 z 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 Cz-Uz@21c3M1zc3Pm$^c*2 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