/*! For license information please see transmission-app.js.LICENSE.txt */ (()=>{var e={844:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Y});var r=n(537),o=n.n(r),s=n(645),i=n.n(s),a=n(667),l=n.n(a),c=new URL(n(986),n.b),d=new URL(n(989),n.b),A=new URL(n(121),n.b),p=new URL(n(409),n.b),g=new URL(n(403),n.b),u=new URL(n(404),n.b),m=new URL(n(900),n.b),h=new URL(n(101),n.b),C=new URL(n(648),n.b),b=new URL(n(202),n.b),f=new URL(n(444),n.b),v=new URL(n(757),n.b),y=new URL(n(598),n.b),x=new URL(n(496),n.b),w=new URL(n(355),n.b),k=new URL(n(726),n.b),E=new URL(n(416),n.b),I=new URL(n(75),n.b),B=new URL(n(302),n.b),_=new URL(n(246),n.b),S=i()(o()),D=l()(c),T=l()(d),P=l()(A),L=l()(p),M=l()(g),F=l()(u),z=l()(m),$=l()(h),N=l()(C),j=l()(b),G=l()(f),R=l()(v),U=l()(y),H=l()(x),W=l()(w),Z=l()(k),O=l()(E),J=l()(I),q=l()(B),Q=l()(_);S.push([e.id,`:root{--progress: 100%;--color-fg-error: #d73a49;--color-fg-port-closed: #d73a49;--color-fg-port-open: #26aa55;--color-progressbar-background-2: #67c87f;--color-progressbar-verify: #ffea7f;--color-progressbar-magnet: #ffea7f;--color-progressbar-paused: #e1e4e8;--color-progressbar-leech: #357aaa;--color-progressbar-queued: #1847d4;color-scheme:light dark}@media(prefers-color-scheme: dark){:root{--color-bg-hover: #666;--color-fg-primary: #c9d1d9;--color-bg-primary: #292929;--color-bg-primary-hover: #373737;--color-bg-odd: #191919;--color-bg-even: #292929;--color-bg-menu: #292929;--color-fg-secondary: #f8f8f8;--color-fg-on-popup: #f8f8f8;--color-fg-disabled: #c9d1d9;--color-bg-popup: #292929;--color-bg-warn: #cf6679;--color-fg-warn: #121212;--color-border: #c9d1d9;--color-border-selected: #828282;--color-fg-tertiary: #828282;--color-toolbar-background: #292929;--color-inspector-background: #292929;--color-inspector-tabs: #f8f8f8;--color-bg-selected: #0c2d6b;--color-bg-tabs: #373737;--color-default-border: #575757;--color-progressbar-seed-1: #26aa55;--color-progressbar-seed-2: #67c87f;--color-progressbar-paused: #828282;--color-progressbar-leech: #357aaa;--color-progressbar-seed-paused: #828282}:root .contrast-more{--color-fg-error: #d73a49;--color-fg-port-closed: #d73a49;--color-fg-port-open: #26aa55;--color-bg-hover: #666;--color-fg-primary: #fff;--color-bg-primary: #000;--color-bg-primary-hover: #000;--color-bg-odd: #000;--color-bg-even: #000;--color-bg-menu: #000;--color-fg-secondary: #fff;--color-fg-on-popup: #fff;--color-fg-disabled: #fff;--color-bg-popup: #000;--color-bg-warn: #cf6679;--color-fg-warn: #000;--color-border: #fff;--color-border-selected: #fff;--color-fg-tertiary: #fff;--color-toolbar-background: #000;--color-inspector-background: #000;--color-inspector-tabs: #fff;--color-bg-selected: #2c7fea;--color-bg-tabs: #000;--color-fg-tabs: #fff;--color-default-border: #fff;--color-progressbar-seed-1: #000;--color-progressbar-seed-2: #fff;--color-progressbar-seed-paused: #828282;--color-progressbar-background-2: #fff;--color-progressbar-verify: #ffea7f;--color-progressbar-magnet: #ffea7f;--color-progressbar-paused: #828282;--color-progressbar-leech: #357aaa;--color-progressbar-queued: #1847d4}}@media(prefers-color-scheme: light){:root{--progress: 100%;--color-fg-error: #d73a49;--color-fg-port-closed: #d73a49;--color-fg-port-open: #67c87f;--color-progressbar-verify: #ffea7f;--color-progressbar-magnet: #ffea7f;--color-progressbar-paused: #e1e4e8;--color-progressbar-leech: #51b3f7;--color-progressbar-queued: #1847d4;--color-bg-hover: #f8f8f8;--color-fg-primary: #404040;--color-bg-primary: #fff;--color-bg-even: #fff;--color-bg-odd: #f8f8f8;--color-bg-menu: #f8f8f8;--color-fg-on-popup: #191919;--color-bg-popup: #fff;--color-fg-secondary: #828282;--color-border: #828282;--color-border-selected: #d0d7de;--color-fg-tertiary: #828282;--color-bg-warn: #e4606d5b;--color-fg-warn: #cf212e;--color-fg-disabled: #828282;--color-toolbar-background: #f8f8f8;--color-inspector-background: #fff;--color-bg-tabs: #f0f0f0;--color-inspector-tabs: #f8f8f8;--color-bg-selected: #2c7fea;--color-default-border: #aeaeae;--color-dialog-border: #f8f8f8;--color-progressbar-seed-1: #34dc70;--color-progressbar-seed-2: #7cef99;--color-progressbar-seed-paused: #e1e4e8}:root .contrast-more{--color-fg-error: #d73a49;--color-fg-port-closed: #d73a49;--color-fg-port-open: #67c87f;--color-bg-hover: #666;--color-fg-primary: #000;--color-bg-primary: #fff;--color-bg-primary-hover: #fff;--color-bg-odd: #fff;--color-bg-even: #fff;--color-bg-menu: #fff;--color-fg-secondary: #000;--color-fg-on-popup: #000;--color-fg-disabled: #000;--color-bg-popup: #fff;--color-bg-warn: #cf6679;--color-fg-warn: #fff;--color-border: #000;--color-border-selected: #000;--color-fg-tertiary: #000;--color-toolbar-background: #fff;--color-inspector-background: #fff;--color-inspector-tabs: #000;--color-bg-selected: #2c7fea;--color-bg-tabs: #fff;--color-fg-tabs: #000;--color-default-border: #000;--color-progressbar-seed-1: #000;--color-progressbar-seed-2: #fff;--color-progressbar-seed-paused: #828282;--color-progressbar-background-2: #fff;--color-progressbar-verify: #ffea7f;--color-progressbar-magnet: #ffea7f;--color-progressbar-paused: #828282;--color-progressbar-leech: #357aaa;--color-progressbar-queued: #1847d4}}html,body{color:var(--color-fg-primary);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";height:100%;margin:0}img{border:0}a{color:var(--color-fg-primary);outline:0;text-decoration:underline}.hidden{display:none}.even{background-color:var(--color-bg-even)}.odd{background-color:var(--color-bg-odd)}.mainwin{display:flex;flex-direction:column;height:100%;position:relative}.mainwin>*{margin:0;padding:0}.mainwin-workarea{display:flex;flex:1;flex-direction:row;overflow:auto}input{border:1px solid var(--color-border);border-radius:3px;padding:4px 5px}#mainwin-toolbar{align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-default-border);display:flex;flex-direction:row;height:50px;margin:0;width:100%}#mainwin-toolbar button{background-color:rgba(0,0,0,0);background-position:center;background-repeat:no-repeat;border:0;border-radius:5px;cursor:pointer;height:50px;margin-right:6px;user-select:none;width:50px}#mainwin-toolbar button svg{stroke:var(--color-fg-primary)}#mainwin-toolbar button svg g path{fill:var(--color-fg-primary)}#mainwin-toolbar button:disabled{cursor:default}#mainwin-toolbar button:disabled svg{stroke:var(--color-fg-disabled)}#mainwin-toolbar button:disabled svg g path{fill:var(--color-fg-disabled)}#mainwin-toolbar>.toolbar-separator{border-left:1px solid var(--color-default-border);height:25px;margin:0 6px 0 0}#mainwin-toolbar :nth-last-child(2){border:0;flex-grow:1}.toolbar-icon{stroke:var(--color-fg-primary)}#toolbar-overflow{margin-right:4px}#toolbar-overflow svg{fill:var(--color-fg-primary);height:36px;width:36px}#toolbar-overflow.alt-speed-enabled{background-image:url(${D});background-position:bottom left;background-size:20px}.mainwin-filterbar{align-items:center;background:var(--color-toolbar-background);border-bottom:1px solid var(--color-default-border);display:flex;flex-direction:row;height:30px;width:100%}@media(max-width: 599px){.mainwin-filterbar{padding:5px 10px}.mainwin-filterbar :not(select):not(input):not(option){display:none}.mainwin-filterbar #torrent-search{padding:5px}}.mainwin-filterbar>*{margin-right:5px;padding:0 5px}.speed-up-icon{fill:var(--color-fg-primary);margin:0 auto}.speed-up-icon svg{width:20px}.speed-dn-icon{fill:var(--color-fg-primary);margin:0 auto}.speed-dn-icon svg{width:20px}#speed-dn-label,#speed-up-label{width:70px;text-align:right}.flex{flex-grow:1}#torrent-container{flex-grow:1;left:0;margin:0;overflow:auto;padding:0;right:0}.torrent-container{background-color:#fff}.torrent-list{cursor:pointer;list-style-type:none;margin:0;padding:0;text-align:left;width:100%}.torrent-list .torrent{border-bottom:1px solid var(--color-default-border);user-select:none}.torrent-list .torrent .icon{background-color:var(--color-fg-primary);background-position:center,top left}.torrent-list .torrent .icon[data-icon-mime-type=audio]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${T});mask-image:url(${T});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=audio][data-icon-multifile=true]{-webkit-mask-image:url(${T}),url(${P});mask-image:url(${T}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=application]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${L});mask-image:url(${L});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=application][data-icon-multifile=true]{-webkit-mask-image:url(${L}),url(${P});mask-image:url(${L}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=font]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${M});mask-image:url(${M});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=font][data-icon-multifile=true]{-webkit-mask-image:url(${M}),url(${P});mask-image:url(${M}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=image]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${F});mask-image:url(${F});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=image][data-icon-multifile=true]{-webkit-mask-image:url(${F}),url(${P});mask-image:url(${F}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=model]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${z});mask-image:url(${z});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=model][data-icon-multifile=true]{-webkit-mask-image:url(${z}),url(${P});mask-image:url(${z}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=text]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${$});mask-image:url(${$});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=text][data-icon-multifile=true]{-webkit-mask-image:url(${$}),url(${P});mask-image:url(${$}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .icon[data-icon-mime-type=video]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${N});mask-image:url(${N});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent .icon[data-icon-mime-type=video][data-icon-multifile=true]{-webkit-mask-image:url(${N}),url(${P});mask-image:url(${N}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent .torrent-name{font-weight:bold;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.torrent-list .torrent .torrent-name.compact{font-size:1em;font-weight:normal}.torrent-list .torrent .torrent-name:not(.paused){color:var(--color-fg-primary)}.torrent-list .torrent .torrent-labels{font-size:x-small;font-weight:normal;margin-bottom:2px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.torrent-list .torrent .torrent-labels.compact{flex:1;font-size:x-small}.torrent-list .torrent .torrent-progress-details.error,.torrent-list .torrent .torrent-peer-details.error{color:var(--color-fg-error)}.torrent-list .torrent .torrent-progress-details,.torrent-list .torrent .torrent-peer-details{color:var(--color-fg-primary);font-size:small}.torrent-list .torrent.compact{align-items:center;display:flex;flex-direction:row-reverse}.torrent-list .torrent.compact .icon{flex-shrink:0;height:16px;-webkit-mask-size:16px,8px;mask-size:16px,8px;width:16px}.torrent-list .torrent.compact .icon[data-icon-multifile=true]{background-color:var(--color-fg-primary);-webkit-mask-image:url(${P});mask-image:url(${P});-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.torrent-list .torrent.compact .icon[data-icon-multifile=true][data-icon-multifile=true]{-webkit-mask-image:url(${P}),url(${P});mask-image:url(${P}),url(${P});-webkit-mask-position:top left,bottom right;mask-position:top left,bottom right;-webkit-mask-repeat:no-repeat,no-repeat;mask-repeat:no-repeat,no-repeat;-webkit-mask-size:16px,16px;mask-size:16px,16px}.torrent-list .torrent.compact>*{margin:5px}.torrent-list .torrent:not(.compact){align-items:center;display:grid;grid-column-gap:12px;grid-template-areas:"icon name labels" "icon peers peers" "icon progressbar progressbar" "icon progress-text progress-text";grid-template-columns:32px auto 1fr;padding:6px 12px}.torrent-list .torrent:not(.compact) .icon{background-size:32px,16px;grid-area:icon;height:32px;width:32px}.torrent-list .torrent:not(.compact) .torrent-name{color:var(--color-fg-primary);grid-area:name}.torrent-list .torrent:not(.compact) .torrent-name.paused{color:var(--color-fg-disabled)}.torrent-list .torrent:not(.compact) .torrent-labels{grid-area:labels}.torrent-list .torrent:not(.compact) .torrent-peer-details{grid-area:peers}.torrent-list .torrent:not(.compact) .torrent-progress{display:flex;flex-direction:row;grid-area:progressbar}.torrent-list .torrent:not(.compact) .torrent-progress-details{grid-area:progress-text}.torrent-list .torrent:not(.compact)>*{margin:1px 0}.torrent-list .torrent.selected{background-color:var(--color-bg-selected)}.torrent-list .icon{background-position:center;background-repeat:no-repeat}.torrent-list .torrent-pauseresume-button{background-position:center center;background-repeat:no-repeat;background-size:20px;margin-left:10px;width:20px}.torrent-list .torrent-pauseresume-button[data-action=pause]{background-image:url(${j})}.torrent-list .torrent-pauseresume-button[data-action=pause]:active,.torrent-list .torrent-pauseresume-button[data-action=pause]:hover{background-image:url(${G})}.torrent-list .torrent-pauseresume-button[data-action=resume]{background-image:url(${R})}.torrent-list .torrent-pauseresume-button[data-action=resume]:active,.torrent-list .torrent-pauseresume-button[data-action=resume]:hover{background-image:url(${U})}.torrent-list .torrent-progress-bar{background-repeat:no-repeat;border-color:var(--color-border-selected);border-radius:3px;border-style:solid;border-width:1px;height:18px}.torrent-list .torrent-progress-bar.full{flex-grow:1;margin:2px 0}.torrent-list .torrent-progress-bar.compact{min-width:50px;width:10vw}.torrent-list .torrent-progress-bar.leech.queued{background:linear-gradient(to right, var(--color-progressbar-queued) 0, var(--color-progressbar-queued) var(--progress, 30%), transparent var(--progress, 30%)),no-repeat}.torrent-list .torrent-progress-bar.leech{background:linear-gradient(to right, var(--color-progressbar-leech) 0, var(--color-progressbar-leech) var(--progress, 30%), transparent var(--progress, 30%)),no-repeat}.torrent-list .torrent-progress-bar.magnet{background:linear-gradient(to right, var(--color-progressbar-magnet) 0, var(--color-progressbar-magnet) var(--progress, 30%), transparent var(--progress, 30%)),no-repeat}.torrent-list .torrent-progress-bar.seed.paused{background-color:var(--color-progressbar-seed-paused)}.torrent-list .torrent-progress-bar.seed{background-color:var(--color-progressbar-seed-1)}.torrent-list .torrent-progress-bar.seed.full:not(.paused){background:linear-gradient(to right, var(--color-progressbar-seed-1) 0, var(--color-progressbar-seed-1) var(--progress, 30%), var(--color-progressbar-seed-2) var(--progress, 30%)),no-repeat}.torrent-list .torrent-progress-bar.seed.queued{background-color:var(--color-progressbar-seed-paused)}.torrent-list .torrent-progress-bar.verify{background:linear-gradient(to right, var(--color-progressbar-verify) 0, var(--color-progressbar-verify) var(--progress, 30%), transparent var(--progress, 30%)),no-repeat}.torrent-list .torrent-progress-bar.paused{background:linear-gradient(to right, var(--color-progressbar-paused) 0, var(--color-progressbar-paused) var(--progress, 30%), transparent var(--progress, 30%)),no-repeat}@media(max-width: 599px){html,body{overflow:hidden}input[type=checkbox]{height:20px;width:20px}}@media(max-width: 599px){#inspector,#prefs-dialog{left:0}}@media(min-width: 600px){#inspector,#prefs-dialog{border-left:1px solid var(--color-default-border);width:570px}}#prefs-dialog{background:var(--color-inspector-background);bottom:0;box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);position:absolute;right:0;top:51px;z-index:2}#prefs-dialog .tabs-page{grid-column-gap:8px;grid-row-gap:5px;grid-template-columns:1fr 1fr;margin:20px}#prefs-dialog .tabs-page:not(.hidden){display:grid}#prefs-dialog .tabs-page .section-label{font-weight:bold;grid-column:span 2;padding-bottom:5px}#prefs-dialog .tabs-page .section-label:not(:first-of-type){margin-top:20px}#prefs-dialog .alt-speed-section-label{background:rgba(0,0,0,0) url(${D}) no-repeat;background-position:left;background-position-y:4px;background-size:20px;padding-left:22px}#prefs-dialog :disabled,#prefs-dialog .disabled{color:var(--color-fg-disabled)}#prefs-dialog #alt-times-div,#prefs-dialog #autostart-div,#prefs-dialog #port-forwarding,#prefs-dialog #randomize-port,#prefs-dialog #suffix-div,#prefs-dialog #use-dht-div,#prefs-dialog #use-lpd-div,#prefs-dialog #use-pex-div,#prefs-dialog #utp-enabled,#prefs-dialog .alt-speed-label{grid-column:span 2}#prefs-dialog #default-trackers{height:300px}#prefs-dialog .blocklist-size-label,#prefs-dialog .blocklist-update-button,#prefs-dialog .register-handler-button,#prefs-dialog .port-status{grid-column:2/3}#prefs-dialog .blocklist-size-label{font-size:smaller}#prefs-dialog .blocklist-size-number{font-weight:bolder}#prefs-dialog .port-status-label{display:inline-block;font-weight:bold;margin-left:5px}#prefs-dialog .port-status-label[data-open=true]{color:var(--color-fg-port-open)}#prefs-dialog .port-status-label[data-open=false]{color:var(--color-fg-port-closed)}#prefs-dialog #default-trackers,#prefs-dialog .default-trackers-label{grid-column:1/3}#prefs-dialog .alt-speed-label{font-size:smaller;font-style:lighter;margin:-10px 0 10px}#prefs-dialog.ui-tabs .ui-tabs-panel{padding:0;user-select:none}.prefs-section{text-align:left}.prefs-section>*{padding:0 8px 8px}.prefs-section .title{color:var(--color-fg-primary);font-size:larger;font-weight:bold;margin-bottom:10px;padding-left:0}.prefs-section .row .key{float:left;padding-top:3px}.prefs-section .row .key>*{margin-left:0}.prefs-section .row .value{margin-left:150px}.prefs-section .row .value>*{width:100%}.tabs-container{align-items:stretch;background:var(--color-inspector-background);bottom:0;display:flex;flex-direction:column;position:absolute;right:0;top:51px;z-index:2}@media(max-width: 599px){.tabs-container{left:0}}@media(min-width: 600px){.tabs-container{width:550px}}.tabs-buttons{align-self:center;background-color:var(--color-bg-tabs);border:1px solid var(--color-border-selected);border-radius:6px;display:flex;margin:10px 0}.tabs-buttons button{appearance:none;border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--color-fg-primary);font-weight:400}.tabs-pages{box-sizing:border-box;flex:1;overflow-x:hidden;overflow-y:auto}@media(max-width: 599px){.tabs-pages{padding:0 8px 20px}}@media(min-width: 600px){.tabs-pages{padding:0 20px 20px}}.tabs-button{background-color:var(--color-bg-tabs);border:1px solid rgba(0,0,0,0);font-size:14px;padding:3px 8px}.tabs-button:active,.tabs-button:checked,.tabs-button.selected{background-color:var(--color-bg-even);border:1px solid var(--color-fg-primary);border-radius:6px}#inspector{box-shadow:0 3px 6px rgba(58,58,58,.7)}.inspector-info-page{font-size:14px;grid-column-gap:8px;grid-row-gap:8px;grid-template-columns:auto 1fr;margin:20px;padding:12px}.inspector-info-page:not(.hidden){display:grid}.inspector-info-page .section-label{font-size:16px;font-weight:bold;grid-column:span 2;padding-bottom:5px}.inspector-info-page .section-label:not(:first-of-type){margin-top:20px}.inspector-info-page label{font-weight:500}.inspector-info-page :not(.section-label){overflow-x:hidden;text-overflow:ellipsis}.inspector-info-magnet button{background-color:var(--color-border);background-position:top;background-repeat:no-repeat;border:0;cursor:pointer;height:1rem;-webkit-mask:url(${H}) no-repeat center/14px;mask:url(${H}) no-repeat center/14px;vertical-align:middle;width:1rem}#inspector .tabs-button,#prefs-dialog .tabs-button{height:30px;margin:0;min-width:40px}#inspector-file-list{margin:0;padding:0}#inspector-file-list .inspector-torrent-file-list-entry{display:grid;grid-column-gap:5px;grid-template-areas:"check name priority" "blank1 info blank2";grid-template-columns:20px 1fr 65px;margin-bottom:4px;padding:5px}#inspector-file-list .inspector-torrent-file-list-entry.skip{opacity:.5}#inspector-file-list .file-wanted-control{grid-area:check}#inspector-file-list .inspector-torrent-file-list-entry-name{color:var(--color-fg-primary);cursor:pointer;font-size:14px;grid-area:name;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#inspector-file-list .inspector-torrent-file-list-entry.skip>.inspector-torrent-file-list-entry-name{color:var(--color-fg-disabled)}#inspector-file-list .inspector-torrent-file-list-entry-progress{color:var(--color-fg-secondary);font-size:12px;grid-area:info}#inspector-file-list .single-file .inspector-torrent-file-list-entry>.file-wanted-control,#inspector-file-list .inspector-torrent-file-list-entry.complete>.file-wanted-control{cursor:default}#inspector-header{margin:8px 0}#torrent-inspector-name{font-size:large;font-weight:bold}#inspector-tiers-list{color:var(--color-fg-primary);margin:0 10px;padding:0 12px}#inspector-tiers-list .tier-list-row{display:grid;font-size:12px;grid-column-gap:8px;grid-row-gap:4px;margin-top:8px}#inspector-tiers-list .tier-list-torrent{color:var(--color-fg-primary);font-weight:bolder;margin-left:-12px;overflow-x:hidden;padding-top:20px;text-overflow:ellipsis;white-space:nowrap}#inspector-tiers-list .tier-list-tracker{font-size:14px;font-weight:bolder;grid-column:span 2;margin-top:8px;padding-bottom:4px}#inspector-tiers-list .tier-announce,#inspector-tiers-list .tier-scrape,#inspector-tiers-list .tier-state{text-align:left}#inspector-tiers-list .tier-downloads,#inspector-tiers-list .tier-leechers,#inspector-tiers-list .tier-seeders{text-align:right}.peer-list{border:1px solid var(--color-default-border);border-collapse:collapse;cursor:default;table-layout:fixed;text-align:left;width:100%}.peer-list td,.peer-list th{font-size:smaller;padding:5px}.peer-list td{border:1px solid var(--color-default-border);color:var(--color-fg-secondary)}.peer-list .torrent-row td{background:var(--color-bg-odd);color:var(--color-fg-primary);font-size:normal;font-weight:bolder;overflow-x:hidden;padding:10px;text-overflow:ellipsis;white-space:nowrap}.peer-list .encryption[data-encrypted=true]{background-color:var(--color-border-selected);-webkit-mask:url(${W}) no-repeat center/14px;mask:url(${W}) no-repeat center/14px;width:10px}.peer-list .peer-address,.peer-list .percent-done,.peer-list .speed-down,.peer-list .speed-up{text-align:right}.peer-list .percent-done{width:10%}@media(max-width: 599px){.peer-list .percent-done{width:12%}}.peer-list .speed-down,.peer-list .speed-up{width:15%}.peer-list .peer-address{width:25%;overflow-x:hidden;text-overflow:ellipsis}@media(max-width: 599px){.peer-list .peer-address{text-align:left;width:20%}}.peer-list .peer-app-name{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}@media(min-width: 600px){.peer-list .peer-app-name{width:20%}}.peer-list .status{cursor:pointer;width:10%}.file-priority-radiobox{grid-area:priority}.file-priority-radiobox>*{appearance:none;background-color:var(--color-border-selected);background-position:center;background-repeat:no-repeat;background-size:10px,20px;border:1px solid var(--color-border);height:20px;margin:0;padding:0;width:20px}.file-priority-radiobox>.low{background-image:url(${Z});border-right-width:0}.file-priority-radiobox>.normal{background-image:url(${O})}.file-priority-radiobox>.high{background-image:url(${J});border-left-width:0}.file-priority-radiobox>.checked{background-color:var(--color-bg-hover)}.context-menu{background-color:var(--color-bg-primary);border-radius:5px;box-shadow:0 3px 6px rgba(0,0,0,.7);color:var(--color-fg-on-popup);padding:10px 5px;position:absolute;z-index:9999}.context-menu .context-menuitem{font-size:13px;font-weight:400;list-style:none;padding:5px 15px}.context-menu .context-menuitem:hover:not(:disabled),.context-menu .context-menuitem:focus:not(:disabled){background-color:var(--color-bg-hover);border-radius:6px;cursor:pointer;font-weight:500}.context-menu .context-menuitem:disabled{color:var(--color-fg-disabled);cursor:none}.context-menu .context-menuitem.warning:hover{background-color:var(--color-bg-warn);color:var(--color-fg-warn)}.context-menu-separator{border-bottom:1px solid var(--color-fg-secondary);margin-bottom:10px;padding-bottom:10px}.overflow-menu{background:var(--color-bg-popup);border-radius:5px;box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);color:var(--color-fg-on-popup);overflow:auto;padding:10px;position:absolute;right:0;margin:6px;top:50px;z-index:2}@media(max-width: 599px){.overflow-menu{height:80vh}}.overflow-menu fieldset{border:0;display:block;margin:8px 0}.overflow-menu fieldset ul{margin:0;padding-left:0}.overflow-menu fieldset ul li{list-style-type:none}.overflow-menu fieldset ul a{cursor:pointer}.overflow-menu .table-row{align-items:center;border-radius:6px;display:flex;flex-direction:row;padding:3px 0}@media(min-width: 600px){.overflow-menu .table-row.display-fullscreen-row{display:none}}.overflow-menu legend{color:var(--color-fg-primary);font-weight:bolder;margin:12px 0 4px}.overflow-menu a,.overflow-menu button,.overflow-menu label{color:var(--color-fg-primary);display:inline-flex;font-size:1em;width:100%}.overflow-menu a,.overflow-menu button{background:rgba(0,0,0,0);border:0;cursor:pointer;display:block;padding:4px 0;text-align:left;text-decoration:none;width:150px}.overflow-menu .input-and-label{align-items:center;display:inline-flex;flex-direction:row}.overflow-menu #display-options{display:flex;flex-direction:column}.overflow-menu #speed-options{display:flex;flex-direction:column}.overflow-menu #speed-options>.speed-up,.overflow-menu #speed-options>.speed-down{align-items:center;display:flex;flex-direction:row;padding:4px 0}.overflow-menu #speed-options>.speed-up>label,.overflow-menu #speed-options>.speed-down>label{overflow:hidden;width:80px}.overflow-menu #speed-options .alt-speed{display:grid;grid-column-gap:5px;grid-row-gap:5px;grid-template-areas:"check lb" "turtle values";grid-template-columns:22px 1fr;margin-bottom:4px}.overflow-menu #speed-options #alt-speed-check{grid-area:check}.overflow-menu #speed-options #alt-speed-check:checked~#alt-speed-image{background-image:url(${D});background-position:left;background-size:22px}.overflow-menu #speed-options #alt-speed-check:not(:checked)~#alt-speed-image{background-image:url(${q});background-size:22px}.overflow-menu #speed-options #alt-speed-image{background-position:center;background-repeat:no-repeat;grid-area:turtle}.overflow-menu #speed-options #alt-speed-label{grid-area:lb}.overflow-menu #speed-options #alt-speed-values-label{font-size:small;grid-area:values}@media(max-width: 599px){.dialog-buttons{padding-top:13.3333333333px}.dialog-container{opacity:96%;position:absolute;top:51px;width:100%}.dialog-logo{padding-bottom:13.3333333333px}.dialog-window{align-items:center;display:flex;flex-direction:column}}@media(min-width: 600px){.dialog-container{min-width:500px;position:absolute;top:102px}.dialog-heading{grid-area:heading}.dialog-logo{grid-area:icon;padding-right:13.3333333333px}.dialog-window{background-color:var(--color-bg-popup);color:var(--color-fg-on-popup);display:grid;grid-column-gap:12px;grid-template-areas:"icon heading" "icon message" "icon workarea" "icon buttons";grid-template-columns:64px 1fr;padding:2px 12px}}.dialog-buttons{display:flex;float:right;grid-area:buttons;margin:10px 0 0;text-align:center}.dialog-buttons button{appearance:none;background:var(--color-bg-primary);border:1px solid var(--color-default-border);border-radius:5px;color:var(--color-fg-primary);margin-left:8px;padding:8px;text-decoration:none}.dialog-buttons-begin{flex-grow:1}.dialog-buttons-end{display:none}dialog{border:0}.dialog-container{box-shadow:0 3px 6px -4px rgba(0,0,0,.1215686275),0 6px 16px rgba(0,0,0,.0784313725),0 9px 28px 8px rgba(0,0,0,.0509803922);color:var(--color-fg-primary);display:block;padding:0;z-index:2}@media(min-width: 600px){.dialog-container{border:0;border-radius:8px;max-width:50%}}.dialog-heading{align-items:center;display:flex;font-size:1.2em;font-weight:bold}.dialog-logo{background:rgba(0,0,0,0) url(${Q}) top left no-repeat;height:64px;width:64px}.dialog-message{grid-area:message;margin:10px 0 0}.dialog-window{background:var(--color-bg-primary);border-radius:8px;padding:20px}.dialog-workarea{display:flex;flex-direction:column;grid-area:workarea;margin:10px 0 0}.dialog-workarea>*{margin-bottom:5px}.about-dialog{max-width:initial}.about-dialog .dialog-workarea>*{margin-bottom:10px}.about-dialog-version-number{margin-left:4px}.about-dialog-version-checksum{font-size:small;font-style:italic;font-weight:normal;margin-left:auto;padding-left:10px}.open-torrent input{margin-bottom:15px}.open-torrent #auto-start-label{margin-left:5px}.open-torrent input[type=file]{width:100%;box-sizing:border-box}.shortcuts-dialog table{border-collapse:collapse;width:100%}.shortcuts-dialog th,.shortcuts-dialog td{border:1px solid var(--color-border);padding:5px 10px}#torrent-rename-name{min-width:400px}#move-container #torrent-path{min-width:400px}.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{column-gap:16px;display:grid;grid-row-gap:6px;grid-template-columns:auto 1fr;margin-top:4px}@media(max-width: 599px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 0 16px}}@media(min-width: 600px){.tabs-pages .content,.inspector-info-page .content,.statistics-dialog .content{margin:4px 16px 16px}}.tabs-pages .content div,.inspector-info-page .content div,.statistics-dialog .content div{word-break:break-word}.tabs-pages fieldset,.inspector-info-page fieldset,.statistics-dialog fieldset{border:0;margin:0;padding:0}.tabs-pages legend,.inspector-info-page legend,.statistics-dialog legend{font-weight:bolder;margin-bottom:4px}#free-space-text{display:inline-block;font-size:smaller;font-style:italic}.ui-menu{width:200px}.upload-div{display:none}.dropzone{background:var(--color-bg-primary);border:2px dashed var(--color-border);border-radius:5px;color:var(--color-fg-primary);cursor:pointer;display:flex;flex-direction:column;font-size:1.2em;font-weight:bold;height:100%;justify-content:center;margin:0;padding:0;text-align:center;width:100%}`,"",{version:3,sources:["webpack://./assets/css/transmission-app.scss"],names:[],mappings:"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",sourcesContent:["@use 'sass:color';\n@use 'sass:math';\n\n// Colors related to torrent status\n$blue-100: #51b3f7;\n$blue-200: #357aaa;\n$blue-300: #2c7fea;\n$blue-400: #1847d4;\n$green-100: #26aa55;\n$green-300: #7cef99;\n$green-400: #67c87f;\n$green-500: #34dc70;\n$grey-200: #e1e4e8;\n$grey-500: #828282;\n$grey-700: #373737;\n$grey-800: #292929;\n$grey-900: #191919;\n$red-500: #d73a49;\n$white: #fff;\n$black: #000;\n$dark-mode-white: #c9d1d9;\n$yellow-300: #ffea7f;\n$grey-40: #666;\n$nice-grey: #f8f8f8;\n$nice-grey-darker: #f0f0f0;\n$dark-mode-black: #121212;\n$default-accent-color-dark: #0c2d6b;\n$default-border-dark: #575757;\n$default-border-light: #aeaeae;\n\n// Z-INDEX ENUM\n// $z-index-progressbar: 1;\n$z-index-popup: 2;\n\n// ICONS -- see assets/img/README.md for sources and license details\n// Are you a designer? New icon PRs welcomed!\n$image-alt-speed-disabled: '../img/modern-tortoise.png';\n$image-alt-speed-enabled: '../img/modern-tortoise-blue.png';\n$image-baseline: '../img/horizontal-rule.svg';\n$image-chevron-dn: '../img/chevron-down.svg';\n$image-chevron-up: '../img/chevron-up.svg';\n$image-lock-fill: '../img/lock-fill.svg';\n$image-magnet: '../img/magnet.svg';\n$image-pause-circle-active: '../img/pause-circle-active.svg';\n$image-pause-circle-idle: '../img/pause-circle-idle.svg';\n$image-play-circle-active: '../img/play-circle-active.svg';\n$image-play-circle-idle: '../img/play-circle-idle.svg';\n\n/// MIXINS\n\n@mixin for-phone-only {\n @media (max-width: 599px) {\n @content;\n }\n}\n\n@mixin for-tablet-portrait-up {\n @media (min-width: 600px) {\n @content;\n }\n}\n\n@mixin button {\n border: 1px solid var(--color-border);\n cursor: pointer;\n display: inline-block;\n padding: 3px;\n user-select: none;\n}\n\n/// GLOBAL\n\n:root {\n --progress: 100%;\n --color-fg-error: #{$red-500};\n --color-fg-port-closed: #{$red-500};\n --color-fg-port-open: #{$green-100};\n --color-progressbar-background-2: #{$green-400};\n --color-progressbar-verify: #{$yellow-300};\n --color-progressbar-magnet: #{$yellow-300};\n --color-progressbar-paused: #{$grey-200};\n --color-progressbar-leech: #{$blue-200};\n --color-progressbar-queued: #{$blue-400};\n\n color-scheme: light dark;\n\n @media (prefers-color-scheme: dark) {\n --color-bg-hover: #{$grey-40};\n --color-fg-primary: #{$dark-mode-white};\n --color-bg-primary: #{$grey-800};\n --color-bg-primary-hover: #{$grey-700};\n --color-bg-odd: #{$grey-900};\n --color-bg-even: #{$grey-800};\n --color-bg-menu: #{$grey-800};\n --color-fg-secondary: #{$nice-grey};\n --color-fg-on-popup: #{$nice-grey};\n --color-fg-disabled: #{$dark-mode-white};\n --color-bg-popup: #{$grey-800};\n --color-bg-warn: #cf6679;\n --color-fg-warn: #{$dark-mode-black};\n --color-border: #{$dark-mode-white};\n --color-border-selected: #{$grey-500};\n --color-fg-tertiary: #{$grey-500};\n --color-toolbar-background: #{$grey-800};\n --color-inspector-background: #{$grey-800};\n --color-inspector-tabs: #{$nice-grey};\n --color-bg-selected: #{$default-accent-color-dark};\n --color-bg-tabs: #{$grey-700};\n --color-default-border: #{$default-border-dark};\n --color-progressbar-seed-1: #{$green-100};\n --color-progressbar-seed-2: #{$green-400};\n --color-progressbar-paused: #{$grey-500};\n --color-progressbar-leech: #{$blue-200};\n --color-progressbar-seed-paused: #{$grey-500};\n\n .contrast-more {\n --color-fg-error: #{$red-500};\n --color-fg-port-closed: #{$red-500};\n --color-fg-port-open: #{$green-100};\n --color-bg-hover: #{$grey-40};\n --color-fg-primary: #{$white};\n --color-bg-primary: #{$black};\n --color-bg-primary-hover: #{$black};\n --color-bg-odd: #{$black};\n --color-bg-even: #{$black};\n --color-bg-menu: #{$black};\n --color-fg-secondary: #{$white};\n --color-fg-on-popup: #{$white};\n --color-fg-disabled: #{$white};\n --color-bg-popup: #{$black};\n --color-bg-warn: #cf6679;\n --color-fg-warn: #{$black};\n --color-border: #{$white};\n --color-border-selected: #{$white};\n --color-fg-tertiary: #{$white};\n --color-toolbar-background: #{$black};\n --color-inspector-background: #{$black};\n --color-inspector-tabs: #{$white};\n --color-bg-selected: #{$blue-300};\n --color-bg-tabs: #{$black};\n --color-fg-tabs: #{$white};\n --color-default-border: #{$white};\n --color-progressbar-seed-1: #{$black};\n --color-progressbar-seed-2: #{$white};\n --color-progressbar-seed-paused: #{$grey-500};\n --color-progressbar-background-2: #{$white};\n --color-progressbar-verify: #{$yellow-300};\n --color-progressbar-magnet: #{$yellow-300};\n --color-progressbar-paused: #{$grey-500};\n --color-progressbar-leech: #{$blue-200};\n --color-progressbar-queued: #{$blue-400};\n }\n }\n @media (prefers-color-scheme: light) {\n --progress: 100%;\n --color-fg-error: #{$red-500};\n --color-fg-port-closed: #{$red-500};\n --color-fg-port-open: #{$green-400};\n --color-progressbar-verify: #{$yellow-300};\n --color-progressbar-magnet: #{$yellow-300};\n --color-progressbar-paused: #{$grey-200};\n --color-progressbar-leech: #{$blue-100};\n --color-progressbar-queued: #{$blue-400};\n --color-bg-hover: #{$nice-grey};\n --color-fg-primary: #404040;\n --color-bg-primary: #{$white};\n --color-bg-even: #{$white};\n --color-bg-odd: #{$nice-grey};\n --color-bg-menu: #{$nice-grey};\n --color-fg-on-popup: #{$grey-900};\n --color-bg-popup: #{$white};\n --color-fg-secondary: #{$grey-500};\n --color-border: #{$grey-500};\n --color-border-selected: #d0d7de;\n --color-fg-tertiary: #{$grey-500};\n --color-bg-warn: #e4606d5b;\n --color-fg-warn: #cf212e;\n --color-fg-disabled: #{$grey-500};\n --color-toolbar-background: #{$nice-grey};\n --color-inspector-background: #{$white};\n --color-bg-tabs: #{$nice-grey-darker};\n --color-inspector-tabs: #{$nice-grey};\n --color-bg-selected: #{$blue-300};\n --color-default-border: #{$default-border-light};\n --color-dialog-border: #{$nice-grey};\n --color-progressbar-seed-1: #{$green-500};\n --color-progressbar-seed-2: #{$green-300};\n --color-progressbar-seed-paused: #{$grey-200};\n\n .contrast-more {\n --color-fg-error: #{$red-500};\n --color-fg-port-closed: #{$red-500};\n --color-fg-port-open: #{$green-400};\n --color-bg-hover: #{$grey-40};\n --color-fg-primary: #{$black};\n --color-bg-primary: #{$white};\n --color-bg-primary-hover: #{$white};\n --color-bg-odd: #{$white};\n --color-bg-even: #{$white};\n --color-bg-menu: #{$white};\n --color-fg-secondary: #{$black};\n --color-fg-on-popup: #{$black};\n --color-fg-disabled: #{$black};\n --color-bg-popup: #{$white};\n --color-bg-warn: #cf6679;\n --color-fg-warn: #{$white};\n --color-border: #{$black};\n --color-border-selected: #{$black};\n --color-fg-tertiary: #{$black};\n --color-toolbar-background: #{$white};\n --color-inspector-background: #{$white};\n --color-inspector-tabs: #{$black};\n --color-bg-selected: #{$blue-300};\n --color-bg-tabs: #{$white};\n --color-fg-tabs: #{$black};\n --color-default-border: #{$black};\n --color-progressbar-seed-1: #{$black};\n --color-progressbar-seed-2: #{$white};\n --color-progressbar-seed-paused: #{$grey-500};\n --color-progressbar-background-2: #{$white};\n --color-progressbar-verify: #{$yellow-300};\n --color-progressbar-magnet: #{$yellow-300};\n --color-progressbar-paused: #{$grey-500};\n --color-progressbar-leech: #{$blue-200};\n --color-progressbar-queued: #{$blue-400};\n }\n }\n}\n\nhtml,\nbody {\n color: var(--color-fg-primary);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,\n Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n height: 100%;\n margin: 0;\n}\n\nimg {\n border: 0;\n}\n\na {\n color: var(--color-fg-primary);\n outline: 0;\n text-decoration: underline;\n}\n\n.hidden {\n display: none;\n}\n\n.even {\n background-color: var(--color-bg-even);\n}\n\n.odd {\n background-color: var(--color-bg-odd);\n}\n\n.mainwin {\n display: flex;\n flex-direction: column;\n height: 100%;\n position: relative;\n\n > * {\n margin: 0;\n padding: 0;\n }\n}\n\n.mainwin-workarea {\n display: flex;\n flex: 1;\n flex-direction: row;\n overflow: auto;\n}\n\ninput {\n border: 1px solid var(--color-border);\n border-radius: 3px;\n padding: 4px 5px;\n}\n\n/// TOOLBAR\n\n$toolbar-height-number: 50;\n$toolbar-height: $toolbar-height-number * 1px;\n\n#mainwin-toolbar {\n align-items: center;\n background: var(--color-toolbar-background);\n border-bottom: 1px solid var(--color-default-border);\n display: flex;\n flex-direction: row;\n height: $toolbar-height;\n margin: 0;\n width: 100%;\n\n button {\n background-color: transparent;\n background-position: center;\n background-repeat: no-repeat;\n border: 0;\n border-radius: 5px;\n cursor: pointer;\n height: $toolbar-height;\n margin-right: 6px;\n user-select: none;\n width: $toolbar-height;\n\n svg {\n stroke: var(--color-fg-primary);\n }\n\n svg g path {\n fill: var(--color-fg-primary);\n }\n\n &:disabled {\n cursor: default;\n\n svg {\n stroke: var(--color-fg-disabled);\n }\n\n svg g path {\n fill: var(--color-fg-disabled);\n }\n }\n }\n\n > .toolbar-separator {\n border-left: 1px solid var(--color-default-border);\n height: 25px;\n margin: 0 6px 0 0;\n }\n\n :nth-last-child(2) {\n border: 0;\n flex-grow: 1;\n }\n}\n\n.toolbar-icon {\n stroke: var(--color-fg-primary);\n}\n\n#toolbar-overflow {\n margin-right: 4px;\n\n svg {\n fill: var(--color-fg-primary);\n height: 36px;\n width: 36px;\n }\n\n &.alt-speed-enabled {\n background-image: url($image-alt-speed-enabled);\n background-position: bottom left;\n background-size: 20px;\n }\n}\n\n/// FILTERBAR\n\n.mainwin-filterbar {\n align-items: center;\n background: var(--color-toolbar-background);\n border-bottom: 1px solid var(--color-default-border);\n display: flex;\n flex-direction: row;\n height: 30px;\n width: 100%;\n\n @include for-phone-only {\n padding: 5px 10px;\n\n :not(select):not(input):not(option) {\n display: none;\n }\n\n #torrent-search {\n padding: 5px;\n }\n }\n\n > * {\n margin-right: 5px;\n padding: 0 5px;\n }\n}\n\n$speed-icon-size: 20px;\n\n.speed-up-icon {\n fill: var(--color-fg-primary);\n margin: 0 auto;\n\n svg {\n width: $speed-icon-size;\n }\n}\n\n.speed-dn-icon {\n fill: var(--color-fg-primary);\n margin: 0 auto;\n\n svg {\n width: $speed-icon-size;\n }\n}\n\n#speed-dn-label,\n#speed-up-label {\n width: 70px;\n text-align: right;\n}\n\n/// TORRENT CONTAINER\n\n$pauseresume-size-number: 20;\n$pauseresume-size: $pauseresume-size-number * 1px;\n$progressbar-border: 1;\n$progressbar-height: 20;\n$popup-top: 51px; // TODO: ugly that this is hardcoded\n\n.flex {\n flex-grow: 1;\n}\n\n#torrent-container {\n flex-grow: 1;\n left: 0;\n margin: 0;\n overflow: auto;\n padding: 0;\n right: 0;\n}\n\n.torrent-container {\n background-color: $white;\n}\n\n$app-image: '../img/box.svg';\n$audio-image: '../img/music.svg';\n$folder-image: '../img/folder.svg';\n$font-image: '../img/type.svg';\n$image-image: '../img/image.svg';\n$package-image: '../img/package.svg';\n$text-image: '../img/file-text.svg';\n$video-image: '../img/film.svg';\n\n@mixin mime-icon-compact($mime-icon) {\n &[data-icon-multifile='true'] {\n background-image: url($folder-image);\n background-position: center;\n background-size: 16px;\n }\n}\n\n@mixin mime-icon($mime-icon) {\n // background-image: url($mime-icon);\n background-color: var(--color-fg-primary);\n -webkit-mask-image: url($mime-icon);\n mask-image: url($mime-icon);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n\n &[data-icon-multifile='true'] {\n -webkit-mask-image: url($mime-icon), url($folder-image);\n mask-image: url($mime-icon), url($folder-image);\n -webkit-mask-position:\n top left,\n bottom right;\n mask-position:\n top left,\n bottom right;\n -webkit-mask-repeat: no-repeat, no-repeat;\n mask-repeat: no-repeat, no-repeat;\n -webkit-mask-size: 16px, 16px;\n mask-size: 16px, 16px;\n }\n}\n\n.torrent-list {\n cursor: pointer;\n list-style-type: none;\n margin: 0;\n padding: 0;\n text-align: left;\n width: 100%;\n\n .torrent {\n border-bottom: 1px solid var(--color-default-border);\n user-select: none;\n\n .icon {\n // color the background svg fill\n background-color: var(--color-fg-primary);\n background-position:\n center,\n top left;\n\n &[data-icon-mime-type='audio'] {\n @include mime-icon($audio-image);\n }\n\n &[data-icon-mime-type='application'] {\n @include mime-icon($app-image);\n }\n\n &[data-icon-mime-type='font'] {\n @include mime-icon($font-image);\n }\n\n &[data-icon-mime-type='image'] {\n @include mime-icon($image-image);\n }\n\n &[data-icon-mime-type='model'] {\n @include mime-icon($package-image);\n }\n\n &[data-icon-mime-type='text'] {\n @include mime-icon($text-image);\n }\n\n &[data-icon-mime-type='video'] {\n @include mime-icon($video-image);\n }\n }\n\n .torrent-name {\n font-weight: bold;\n margin-bottom: 2px;\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.compact {\n font-size: 1em;\n font-weight: normal;\n }\n\n &:not(.paused) {\n color: var(--color-fg-primary);\n }\n }\n\n .torrent-labels {\n font-size: x-small;\n font-weight: normal;\n margin-bottom: 2px;\n margin-top: 2px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.compact {\n flex: 1;\n font-size: x-small;\n }\n }\n\n .torrent-progress-details.error,\n .torrent-peer-details.error {\n color: var(--color-fg-error);\n }\n\n .torrent-progress-details,\n .torrent-peer-details {\n color: var(--color-fg-primary);\n font-size: small;\n }\n\n &.compact {\n $icon-size-num: 16;\n $icon-size: $icon-size-num * 1px;\n\n align-items: center;\n display: flex;\n flex-direction: row-reverse;\n\n .icon {\n flex-shrink: 0;\n height: $icon-size;\n -webkit-mask-size:\n $icon-size,\n $icon-size-num * 0.5px;\n mask-size:\n $icon-size,\n $icon-size-num * 0.5px;\n width: $icon-size;\n\n &[data-icon-multifile='true'] {\n @include mime-icon($folder-image);\n }\n }\n\n > * {\n margin: 5px;\n }\n }\n\n &:not(.compact) {\n $icon-size-num: 32;\n $icon-size: $icon-size-num * 1px;\n align-items: center;\n display: grid;\n grid-column-gap: 12px;\n grid-template-areas:\n 'icon name labels'\n 'icon peers peers'\n 'icon progressbar progressbar'\n 'icon progress-text progress-text';\n grid-template-columns: $icon-size auto 1fr;\n padding: 6px 12px;\n\n .icon {\n background-size:\n $icon-size,\n $icon-size-num * 0.5px;\n grid-area: icon;\n height: $icon-size;\n width: $icon-size;\n }\n\n .torrent-name {\n color: var(--color-fg-primary);\n grid-area: name;\n\n &.paused {\n color: var(--color-fg-disabled);\n }\n }\n\n .torrent-labels {\n grid-area: labels;\n }\n\n .torrent-peer-details {\n grid-area: peers;\n }\n\n .torrent-progress {\n display: flex;\n flex-direction: row;\n grid-area: progressbar;\n }\n\n .torrent-progress-details {\n grid-area: progress-text;\n }\n\n > * {\n margin: 1px 0;\n }\n }\n\n &.selected {\n background-color: var(--color-bg-selected);\n }\n }\n\n .icon {\n background-position: center;\n background-repeat: no-repeat;\n }\n\n .torrent-pauseresume-button {\n background-position: center center;\n background-repeat: no-repeat;\n background-size: $pauseresume-size;\n margin-left: math.floor(math.div($pauseresume-size-number, 2)) * 1px;\n width: $pauseresume-size;\n\n &[data-action='pause'] {\n background-image: url($image-pause-circle-idle);\n\n &:active,\n &:hover {\n background-image: url($image-pause-circle-active);\n }\n }\n\n &[data-action='resume'] {\n background-image: url($image-play-circle-idle);\n\n &:active,\n &:hover {\n background-image: url($image-play-circle-active);\n }\n }\n }\n\n .torrent-progress-bar {\n background-repeat: no-repeat;\n border-color: var(--color-border-selected);\n border-radius: 3px;\n border-style: solid;\n border-width: 1px;\n height: ($progressbar-height - ($progressbar-border * 2)) * 1px;\n\n &.full {\n flex-grow: 1;\n margin: 2px 0;\n }\n\n &.compact {\n min-width: 50px;\n width: 10vw;\n }\n\n &.leech.queued {\n background: linear-gradient(\n to right,\n var(--color-progressbar-queued) 0,\n var(--color-progressbar-queued) var(--progress, 30%),\n transparent var(--progress, 30%)\n ),\n no-repeat;\n }\n\n &.leech {\n background: linear-gradient(\n to right,\n var(--color-progressbar-leech) 0,\n var(--color-progressbar-leech) var(--progress, 30%),\n transparent var(--progress, 30%)\n ),\n no-repeat;\n }\n\n &.magnet {\n background: linear-gradient(\n to right,\n var(--color-progressbar-magnet) 0,\n var(--color-progressbar-magnet) var(--progress, 30%),\n transparent var(--progress, 30%)\n ),\n no-repeat;\n }\n\n &.seed.paused {\n background-color: var(--color-progressbar-seed-paused);\n }\n\n &.seed {\n background-color: var(--color-progressbar-seed-1);\n }\n\n &.seed.full:not(.paused) {\n background: linear-gradient(\n to right,\n var(--color-progressbar-seed-1) 0,\n var(--color-progressbar-seed-1) var(--progress, 30%),\n var(--color-progressbar-seed-2) var(--progress, 30%)\n ),\n no-repeat;\n }\n\n &.seed.queued {\n background-color: var(--color-progressbar-seed-paused);\n }\n\n &.verify {\n background: linear-gradient(\n to right,\n var(--color-progressbar-verify) 0,\n var(--color-progressbar-verify) var(--progress, 30%),\n transparent var(--progress, 30%)\n ),\n no-repeat;\n }\n\n &.paused {\n background: linear-gradient(\n to right,\n var(--color-progressbar-paused) 0,\n var(--color-progressbar-paused) var(--progress, 30%),\n transparent var(--progress, 30%)\n ),\n no-repeat;\n }\n }\n}\n\n/// PREFERENCES DIALOG\n\n@include for-phone-only {\n html,\n body {\n overflow: hidden;\n }\n\n input[type='checkbox'] {\n height: 20px;\n width: 20px;\n }\n}\n\n#inspector,\n#prefs-dialog {\n @include for-phone-only {\n left: 0;\n }\n @include for-tablet-portrait-up {\n border-left: 1px solid var(--color-default-border);\n width: 570px;\n }\n}\n\n#prefs-dialog {\n $background-color: var(--color-inspector-background);\n background: $background-color;\n bottom: 0;\n box-shadow:\n 0 3px 6px -4px #0000001f,\n 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n position: absolute;\n right: 0;\n top: $popup-top;\n z-index: $z-index-popup;\n\n .tabs-page {\n grid-column-gap: 8px;\n grid-row-gap: 5px;\n grid-template-columns: 1fr 1fr;\n margin: 20px;\n\n &:not(.hidden) {\n display: grid;\n }\n\n .section-label {\n font-weight: bold;\n grid-column: span 2;\n // margin-left: -20px;\n padding-bottom: 5px;\n\n &:not(:first-of-type) {\n margin-top: 20px;\n }\n }\n }\n\n .alt-speed-section-label {\n background: transparent url($image-alt-speed-enabled) no-repeat;\n background-position: left;\n background-position-y: 4px;\n background-size: 20px;\n padding-left: 22px;\n }\n\n :disabled,\n .disabled {\n color: var(--color-fg-disabled);\n }\n\n #alt-times-div,\n #autostart-div,\n #port-forwarding,\n #randomize-port,\n #suffix-div,\n #use-dht-div,\n #use-lpd-div,\n #use-pex-div,\n #utp-enabled,\n .alt-speed-label {\n grid-column: span 2;\n }\n\n #default-trackers {\n height: 300px;\n }\n\n .blocklist-size-label,\n .blocklist-update-button,\n .register-handler-button,\n .port-status {\n grid-column: 2 / 3;\n }\n\n .blocklist-size-label {\n font-size: smaller;\n }\n\n .blocklist-size-number {\n font-weight: bolder;\n }\n\n .port-status-label {\n display: inline-block;\n font-weight: bold;\n margin-left: 5px;\n\n &[data-open='true'] {\n color: var(--color-fg-port-open);\n }\n\n &[data-open='false'] {\n color: var(--color-fg-port-closed);\n }\n }\n\n #default-trackers,\n .default-trackers-label {\n grid-column: 1 / 3;\n }\n\n .alt-speed-label {\n font-size: smaller;\n font-style: lighter;\n // nudge it up next to the section label\n margin: -10px 0 10px;\n }\n}\n\n#prefs-dialog.ui-tabs .ui-tabs-panel {\n padding: 0;\n user-select: none;\n}\n\n.prefs-section {\n text-align: left;\n\n > * {\n padding: 0 8px 8px;\n }\n\n .title {\n color: var(--color-fg-primary);\n font-size: larger;\n font-weight: bold;\n margin-bottom: 10px;\n padding-left: 0;\n }\n\n .row {\n .key {\n float: left;\n padding-top: 3px;\n\n > * {\n margin-left: 0;\n }\n }\n\n .value {\n margin-left: 150px;\n\n > * {\n width: 100%;\n }\n }\n }\n}\n\n/// TABS\n\n.tabs-container {\n align-items: stretch;\n background: var(--color-inspector-background);\n bottom: 0;\n display: flex;\n flex-direction: column;\n position: absolute;\n right: 0;\n top: $popup-top;\n z-index: $z-index-popup;\n @include for-phone-only {\n left: 0;\n }\n @include for-tablet-portrait-up {\n width: 550px;\n }\n}\n\n.tabs-buttons {\n align-self: center;\n background-color: var(--color-bg-tabs);\n border: 1px solid var(--color-border-selected);\n border-radius: 6px;\n display: flex;\n margin: 10px 0;\n\n button {\n appearance: none;\n border: 1px solid transparent;\n border-radius: 6px;\n color: var(--color-fg-primary);\n font-weight: 400;\n }\n}\n\n.tabs-pages {\n box-sizing: border-box;\n flex: 1;\n overflow-x: hidden;\n overflow-y: auto;\n @include for-phone-only {\n padding: 0 8px 20px;\n }\n @include for-tablet-portrait-up {\n padding: 0 20px 20px;\n }\n}\n\n.tabs-button {\n background-color: var(--color-bg-tabs);\n border: 1px solid transparent;\n font-size: 14px;\n padding: 3px 8px;\n\n &:active,\n &:checked,\n &.selected {\n background-color: var(--color-bg-even);\n border: 1px solid var(--color-fg-primary);\n border-radius: 6px;\n }\n}\n\n/// INSPECTOR\n\n#inspector {\n box-shadow: 0 3px 6px rgba(58, 58, 58, 0.7);\n}\n\n.inspector-info-page {\n font-size: 14px;\n // TODO: this is (mostly) copied from prefs-dialog.\n // can it be folded into a single set of rules?\n\n grid-column-gap: 8px;\n grid-row-gap: 8px;\n grid-template-columns: auto 1fr;\n margin: 20px;\n padding: 12px;\n\n &:not(.hidden) {\n display: grid;\n }\n\n .section-label {\n font-size: 16px;\n font-weight: bold;\n grid-column: span 2;\n padding-bottom: 5px;\n\n &:not(:first-of-type) {\n margin-top: 20px;\n }\n }\n\n label {\n font-weight: 500;\n }\n\n :not(.section-label) {\n // this section is not copied\n overflow-x: hidden;\n text-overflow: ellipsis;\n }\n}\n\n.inspector-info-magnet {\n button {\n background-color: var(--color-border);\n\n background-position: top;\n background-repeat: no-repeat;\n border: 0;\n cursor: pointer;\n height: 1rem;\n -webkit-mask: url($image-magnet) no-repeat center / 14px;\n mask: url($image-magnet) no-repeat center / 14px;\n vertical-align: middle;\n width: 1rem;\n }\n}\n\n#inspector .tabs-button,\n#prefs-dialog .tabs-button {\n height: 30px;\n margin: 0;\n min-width: 40px;\n}\n\n#inspector-file-list {\n margin: 0;\n padding: 0;\n\n .inspector-torrent-file-list-entry {\n display: grid;\n grid-column-gap: 5px;\n grid-template-areas:\n 'check name priority'\n 'blank1 info blank2';\n grid-template-columns: 20px 1fr 65px;\n margin-bottom: 4px;\n padding: 5px;\n\n &.skip {\n opacity: 0.5;\n }\n }\n\n .file-wanted-control {\n grid-area: check;\n }\n\n .inspector-torrent-file-list-entry-name {\n color: var(--color-fg-primary);\n cursor: pointer;\n font-size: 14px;\n grid-area: name;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .inspector-torrent-file-list-entry.skip\n > .inspector-torrent-file-list-entry-name {\n color: var(--color-fg-disabled);\n }\n\n .inspector-torrent-file-list-entry-progress {\n color: var(--color-fg-secondary);\n font-size: 12px;\n grid-area: info;\n }\n\n .single-file .inspector-torrent-file-list-entry > .file-wanted-control,\n .inspector-torrent-file-list-entry.complete > .file-wanted-control {\n cursor: default;\n }\n}\n\n#inspector-header {\n margin: 8px 0;\n}\n\n#torrent-inspector-name {\n font-size: large;\n font-weight: bold;\n}\n\n#inspector-tiers-list {\n color: var(--color-fg-primary);\n margin: 0 10px;\n padding: 0 12px;\n\n .tier-list-row {\n display: grid;\n font-size: 12px;\n grid-column-gap: 8px;\n grid-row-gap: 4px;\n margin-top: 8px;\n }\n\n .tier-list-torrent {\n color: var(--color-fg-primary);\n font-weight: bolder;\n margin-left: -12px;\n overflow-x: hidden;\n padding-top: 20px;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .tier-list-tracker {\n font-size: 14px;\n font-weight: bolder;\n grid-column: span 2;\n margin-top: 8px;\n padding-bottom: 4px;\n }\n\n .tier-announce,\n .tier-scrape,\n .tier-state {\n text-align: left;\n }\n\n .tier-downloads,\n .tier-leechers,\n .tier-seeders {\n text-align: right;\n }\n}\n\n// Peers Tab\n\n.peer-list {\n $table-border: 1px solid var(--color-default-border);\n\n border: $table-border;\n border-collapse: collapse;\n cursor: default;\n table-layout: fixed;\n text-align: left;\n width: 100%;\n\n td,\n th {\n font-size: smaller;\n padding: 5px;\n }\n\n td {\n border: $table-border;\n color: var(--color-fg-secondary);\n // padding: 5px 10px;\n }\n\n .torrent-row td {\n background: var(--color-bg-odd);\n color: var(--color-fg-primary);\n font-size: normal;\n font-weight: bolder;\n overflow-x: hidden;\n padding: 10px;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .encryption {\n &[data-encrypted='true'] {\n background-color: var(--color-border-selected);\n -webkit-mask: url($image-lock-fill) no-repeat center / 14px;\n mask: url($image-lock-fill) no-repeat center / 14px;\n width: 10px;\n }\n }\n\n .peer-address,\n .percent-done,\n .speed-down,\n .speed-up {\n text-align: right;\n }\n\n .percent-done {\n width: 10%;\n\n @include for-phone-only {\n width: 12%;\n }\n }\n\n .speed-down,\n .speed-up {\n width: 15%;\n }\n\n .peer-address {\n width: 25%;\n overflow-x: hidden;\n text-overflow: ellipsis;\n\n @include for-phone-only {\n text-align: left;\n width: 20%;\n }\n }\n\n .peer-app-name {\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include for-tablet-portrait-up {\n width: 20%;\n }\n }\n\n .status {\n cursor: pointer;\n width: 10%;\n }\n}\n\n/// FILE PRIORITY BUTTONS\n\n.file-priority-radiobox {\n $size-number: 20;\n $size: $size-number * 1px;\n $halfsize: math.floor(math.div($size-number, 2)) * 1px;\n\n grid-area: priority;\n\n > * {\n appearance: none;\n background-color: var(--color-border-selected);\n background-position: center;\n background-repeat: no-repeat;\n background-size: $halfsize, $size;\n border: 1px solid var(--color-border);\n height: $size;\n margin: 0;\n padding: 0;\n width: $size;\n }\n\n > .low {\n background-image: url($image-chevron-dn);\n border-right-width: 0;\n }\n\n > .normal {\n background-image: url($image-baseline);\n }\n\n > .high {\n background-image: url($image-chevron-up);\n border-left-width: 0;\n }\n\n //if input is checked then change the background color\n > .checked {\n background-color: var(--color-bg-hover);\n }\n}\n\n/// CONTEXT MENU\n\n.context-menu {\n $disabled-color: var(--color-fg-disabled);\n background-color: var(--color-bg-primary);\n border-radius: 5px;\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.7);\n color: var(--color-fg-on-popup);\n padding: 10px 5px;\n position: absolute;\n z-index: 9999;\n\n .context-menuitem {\n font-size: 13px;\n font-weight: 400;\n list-style: none;\n padding: 5px 15px;\n\n &:hover:not(:disabled),\n &:focus:not(:disabled) {\n background-color: var(--color-bg-hover);\n border-radius: 6px;\n cursor: pointer;\n font-weight: 500;\n }\n\n &:disabled {\n color: $disabled-color;\n cursor: none;\n }\n\n &.warning:hover {\n background-color: var(--color-bg-warn);\n color: var(--color-fg-warn);\n }\n }\n}\n\n.context-menu-separator {\n border-bottom: 1px solid var(--color-fg-secondary);\n margin-bottom: 10px;\n padding-bottom: 10px;\n}\n\n/// OVERFLOW MENU\n\n.overflow-menu {\n background: var(--color-bg-popup);\n border-radius: 5px;\n box-shadow:\n 0 3px 6px -4px #0000001f,\n 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n color: var(--color-fg-on-popup);\n overflow: auto;\n padding: 10px;\n position: absolute;\n\n right: 0;\n margin: 6px;\n top: 50px;\n z-index: $z-index-popup;\n\n @include for-phone-only() {\n height: 80vh;\n }\n\n fieldset {\n border: 0;\n display: block;\n margin: 8px 0;\n }\n\n fieldset ul {\n margin: 0;\n padding-left: 0;\n\n li {\n list-style-type: none;\n }\n\n a {\n cursor: pointer;\n }\n }\n\n .table-row {\n align-items: center;\n border-radius: 6px;\n display: flex;\n flex-direction: row;\n padding: 3px 0;\n\n // hide the fullscreen button unless we're on mobile\n @include for-tablet-portrait-up {\n &.display-fullscreen-row {\n display: none;\n }\n }\n }\n\n legend {\n color: var(--color-fg-primary);\n font-weight: bolder;\n margin: 12px 0 4px;\n }\n\n a,\n button,\n label {\n color: var(--color-fg-primary);\n display: inline-flex;\n font-size: 1em;\n width: 100%;\n }\n\n a,\n button {\n background: transparent;\n border: 0;\n cursor: pointer;\n display: block;\n padding: 4px 0;\n text-align: left;\n text-decoration: none;\n width: 150px;\n }\n\n .input-and-label {\n align-items: center;\n display: inline-flex;\n flex-direction: row;\n }\n\n #display-options {\n display: flex;\n flex-direction: column;\n }\n\n #speed-options {\n display: flex;\n flex-direction: column;\n\n > .speed-up,\n > .speed-down {\n align-items: center;\n display: flex;\n flex-direction: row;\n padding: 4px 0;\n\n > label {\n overflow: hidden;\n width: 80px;\n }\n }\n\n .alt-speed {\n display: grid;\n grid-column-gap: 5px;\n grid-row-gap: 5px;\n grid-template-areas:\n 'check lb'\n 'turtle values';\n grid-template-columns: 22px 1fr;\n margin-bottom: 4px;\n }\n\n #alt-speed-check {\n grid-area: check;\n\n &:checked ~ #alt-speed-image {\n background-image: url($image-alt-speed-enabled);\n background-position: left;\n background-size: 22px;\n }\n\n &:not(:checked) ~ #alt-speed-image {\n background-image: url($image-alt-speed-disabled);\n background-size: 22px;\n }\n }\n\n #alt-speed-image {\n background-position: center;\n background-repeat: no-repeat;\n grid-area: turtle;\n }\n\n #alt-speed-label {\n grid-area: lb;\n }\n\n #alt-speed-values-label {\n font-size: small;\n grid-area: values;\n }\n }\n}\n\n/// DIALOGS\n\n$dialog-padding-number: 20;\n$dialog-logo-padding-number: math.div($dialog-padding-number * 2, 3);\n$logo-size: 64px;\n\n@include for-phone-only {\n .dialog-buttons {\n padding-top: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-container {\n opacity: 96%;\n position: absolute;\n top: $popup-top;\n width: 100%;\n }\n\n .dialog-logo {\n padding-bottom: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-window {\n align-items: center;\n display: flex;\n flex-direction: column;\n }\n}\n@include for-tablet-portrait-up {\n .dialog-container {\n min-width: 500px;\n position: absolute;\n top: $popup-top * 2;\n }\n\n .dialog-heading {\n grid-area: heading;\n }\n\n .dialog-logo {\n grid-area: icon;\n padding-right: $dialog-logo-padding-number * 1px;\n }\n\n .dialog-window {\n background-color: var(--color-bg-popup);\n color: var(--color-fg-on-popup);\n display: grid;\n grid-column-gap: 12px;\n grid-template-areas:\n 'icon heading'\n 'icon message'\n 'icon workarea'\n 'icon buttons';\n grid-template-columns: $logo-size 1fr;\n padding: 2px 12px;\n }\n}\n\n.dialog-buttons {\n display: flex;\n float: right;\n grid-area: buttons;\n margin: 10px 0 0;\n text-align: center;\n\n button {\n appearance: none;\n background: var(--color-bg-primary);\n border: 1px solid var(--color-default-border);\n border-radius: 5px;\n color: var(--color-fg-primary);\n margin-left: 8px;\n padding: 8px;\n text-decoration: none;\n }\n}\n\n.dialog-buttons-begin {\n flex-grow: 1;\n}\n\n.dialog-buttons-end {\n display: none;\n}\n\ndialog {\n border: 0;\n}\n\n.dialog-container {\n box-shadow:\n 0 3px 6px -4px #0000001f,\n 0 6px 16px #00000014,\n 0 9px 28px 8px #0000000d;\n color: var(--color-fg-primary);\n display: block;\n padding: 0;\n z-index: $z-index-popup;\n\n @include for-tablet-portrait-up() {\n border: 0;\n border-radius: 8px;\n max-width: 50%;\n }\n}\n\n.dialog-heading {\n align-items: center;\n display: flex;\n font-size: 1.2em;\n font-weight: bold;\n}\n\n.dialog-logo {\n background: transparent url('../img/logo.png') top left no-repeat;\n height: $logo-size;\n width: $logo-size;\n}\n\n.dialog-message {\n grid-area: message;\n margin: 10px 0 0;\n}\n\n.dialog-window {\n background: var(--color-bg-primary);\n border-radius: 8px;\n padding: $dialog-padding-number * 1px;\n}\n\n.dialog-workarea {\n display: flex;\n flex-direction: column;\n grid-area: workarea;\n margin: 10px 0 0;\n\n > * {\n margin-bottom: 5px;\n }\n}\n\n/// ABOUT DIALOG\n\n.about-dialog {\n max-width: initial;\n}\n\n.about-dialog .dialog-workarea > * {\n margin-bottom: 10px;\n}\n\n.about-dialog-version-number {\n margin-left: 4px;\n}\n\n.about-dialog-version-checksum {\n font-size: small;\n font-style: italic;\n font-weight: normal;\n margin-left: auto;\n padding-left: 10px;\n}\n\n/// OPEN TORRENT DIALOG\n.open-torrent {\n input {\n margin-bottom: 15px;\n }\n\n #auto-start-label {\n margin-left: 5px;\n }\n\n input[type='file'] {\n width: 100%;\n box-sizing: border-box;\n }\n}\n\n/// HOTKEYS DIALOG\n\n.shortcuts-dialog {\n table {\n border-collapse: collapse;\n width: 100%;\n }\n\n th,\n td {\n border: 1px solid var(--color-border);\n padding: 5px 10px;\n }\n}\n\n/// RENAME DIALOG\n\n#torrent-rename-name {\n min-width: 400px;\n}\n\n/// SET-LOCATION DIALOG\n\n#move-container #torrent-path {\n min-width: 400px;\n}\n\n/// STATISTICS DIALOG\n\n.tabs-pages,\n.inspector-info-page,\n.statistics-dialog {\n .content {\n column-gap: 16px;\n display: grid;\n grid-row-gap: 6px;\n grid-template-columns: auto 1fr;\n margin-top: 4px;\n\n @include for-phone-only {\n margin: 4px 0 16px;\n }\n @include for-tablet-portrait-up {\n margin: 4px 16px 16px;\n }\n\n div {\n word-break: break-word;\n }\n }\n\n fieldset {\n border: 0;\n margin: 0;\n padding: 0;\n }\n\n legend {\n font-weight: bolder;\n margin-bottom: 4px;\n }\n}\n\n/// UPLOAD DIALOG\n\n#free-space-text {\n display: inline-block;\n font-size: smaller;\n font-style: italic;\n}\n\n.ui-menu {\n width: 200px;\n}\n\n.upload-div {\n display: none;\n}\n\n.dropzone {\n background: var(--color-bg-primary);\n border: 2px dashed var(--color-border);\n border-radius: 5px;\n color: var(--color-fg-primary);\n cursor: pointer;\n display: flex;\n flex-direction: column;\n font-size: 1.2em;\n font-weight: bold;\n height: 100%;\n justify-content: center;\n margin: 0;\n padding: 0;\n text-align: center;\n width: 100%;\n}\n"],sourceRoot:""}]);const Y=S},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,s){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var a=0;a0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=s),n&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=n):d[2]=n),o&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=o):d[4]="".concat(o)),t.push(d))}},t}},667:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},537:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),s="/*# ".concat(o," */");return[t].concat([s]).join("\n")}return[t].join("\n")}},307:(e,t,n)=>{e=n.nmd(e);var r="__lodash_hash_undefined__",o=1,s=2,i=9007199254740991,a="[object Arguments]",l="[object Array]",c="[object AsyncFunction]",d="[object Boolean]",A="[object Date]",p="[object Error]",g="[object Function]",u="[object GeneratorFunction]",m="[object Map]",h="[object Number]",C="[object Null]",b="[object Object]",f="[object Promise]",v="[object Proxy]",y="[object RegExp]",x="[object Set]",w="[object String]",k="[object Symbol]",E="[object Undefined]",I="[object WeakMap]",B="[object ArrayBuffer]",_="[object DataView]",S=/^\[object .+?Constructor\]$/,D=/^(?:0|[1-9]\d*)$/,T={};T["[object Float32Array]"]=T["[object Float64Array]"]=T["[object Int8Array]"]=T["[object Int16Array]"]=T["[object Int32Array]"]=T["[object Uint8Array]"]=T["[object Uint8ClampedArray]"]=T["[object Uint16Array]"]=T["[object Uint32Array]"]=!0,T[a]=T[l]=T[B]=T[d]=T[_]=T[A]=T[p]=T[g]=T[m]=T[h]=T[b]=T[y]=T[x]=T[w]=T[I]=!1;var P="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,L="object"==typeof self&&self&&self.Object===Object&&self,M=P||L||Function("return this")(),F=t&&!t.nodeType&&t,z=F&&e&&!e.nodeType&&e,$=z&&z.exports===F,N=$&&P.process,j=function(){try{return N&&N.binding&&N.binding("util")}catch(e){}}(),G=j&&j.isTypedArray;function R(e,t){for(var n=-1,r=null==e?0:e.length;++nc))return!1;var A=a.get(e);if(A&&a.get(t))return A==t;var p=-1,g=!0,u=n&s?new Be:void 0;for(a.set(e,t),a.set(t,e);++p-1},Ee.prototype.set=function(e,t){var n=this.__data__,r=De(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this},Ie.prototype.clear=function(){this.size=0,this.__data__={hash:new ke,map:new(pe||Ee),string:new ke}},Ie.prototype.delete=function(e){var t=Ne(this,e).delete(e);return this.size-=t?1:0,t},Ie.prototype.get=function(e){return Ne(this,e).get(e)},Ie.prototype.has=function(e){return Ne(this,e).has(e)},Ie.prototype.set=function(e,t){var n=Ne(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this},Be.prototype.add=Be.prototype.push=function(e){return this.__data__.set(e,r),this},Be.prototype.has=function(e){return this.__data__.has(e)},_e.prototype.clear=function(){this.__data__=new Ee,this.size=0},_e.prototype.delete=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},_e.prototype.get=function(e){return this.__data__.get(e)},_e.prototype.has=function(e){return this.__data__.has(e)},_e.prototype.set=function(e,t){var n=this.__data__;if(n instanceof Ee){var r=n.__data__;if(!pe||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Ie(r)}return n.set(e,t),this.size=n.size,this};var Ge=le?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,s=[];++n-1&&e%1==0&&e-1&&e%1==0&&e<=i}function Ye(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}function Ve(e){return null!=e&&"object"==typeof e}var Xe=G?function(e){return function(t){return e(t)}}(G):function(e){return Ve(e)&&Qe(e.length)&&!!T[Te(e)]};function Ke(e){return null!=(t=e)&&Qe(t.length)&&!qe(t)?Se(e):Fe(e);var t}e.exports=function(e,t){return Le(e,t)}},379:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},216:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},565:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},795:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var s=n.sourceMap;s&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},589:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},409:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItYm94Ij4KICAgIDxwYXRoIGQ9Ik0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiPjwvcGF0aD4KICAgIDxwb2x5bGluZSBwb2ludHM9IjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2Ij48L3BvbHlsaW5lPgogICAgPGxpbmUgeDE9IjEyIiB5MT0iMjIuMDgiIHgyPSIxMiIgeTI9IjEyIj48L2xpbmU+Cjwvc3ZnPg=="},726:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi1kb3duIj4KICA8cG9seWxpbmUgcG9pbnRzPSI2IDkgMTIgMTUgMTggOSI+PC9wb2x5bGluZT4KPC9zdmc+"},75:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hldnJvbi11cCI+CiAgPHBvbHlsaW5lIHBvaW50cz0iMTggMTUgMTIgOSA2IDE1Ij48L3BvbHlsaW5lPgo8L3N2Zz4="},101:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZmlsZS10ZXh0Ij4KICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiPjwvcGF0aD4KICAgIDxwb2x5bGluZSBwb2ludHM9IjE0IDIgMTQgOCAyMCA4Ij48L3BvbHlsaW5lPgogICAgPGxpbmUgeDE9IjE2IiB5MT0iMTMiIHgyPSI4IiB5Mj0iMTMiPjwvbGluZT4KICAgIDxsaW5lIHgxPSIxNiIgeTE9IjE3IiB4Mj0iOCIgeTI9IjE3Ij48L2xpbmU+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIxMCA5IDkgOSA4IDkiPjwvcG9seWxpbmU+Cjwvc3ZnPg=="},648:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZmlsbSI+CiAgICA8cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHJ4PSIyLjE4IiByeT0iMi4xOCI+PC9yZWN0PgogICAgPGxpbmUgeDE9IjciIHkxPSIyIiB4Mj0iNyIgeTI9IjIyIj48L2xpbmU+CiAgICA8bGluZSB4MT0iMTciIHkxPSIyIiB4Mj0iMTciIHkyPSIyMiI+PC9saW5lPgogICAgPGxpbmUgeDE9IjIiIHkxPSIxMiIgeDI9IjIyIiB5Mj0iMTIiPjwvbGluZT4KICAgIDxsaW5lIHgxPSIyIiB5MT0iNyIgeDI9IjciIHkyPSI3Ij48L2xpbmU+CiAgICA8bGluZSB4MT0iMiIgeTE9IjE3IiB4Mj0iNyIgeTI9IjE3Ij48L2xpbmU+CiAgICA8bGluZSB4MT0iMTciIHkxPSIxNyIgeDI9IjIyIiB5Mj0iMTciPjwvbGluZT4KICAgIDxsaW5lIHgxPSIxNyIgeTE9IjciIHgyPSIyMiIgeTI9IjciPjwvbGluZT4KPC9zdmc+"},121:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItZm9sZGVyIj4KICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiI+PC9wYXRoPgo8L3N2Zz4="},416:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgICA8Zz4KICAgICAgICA8cmVjdCBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPgogICAgICAgIDxyZWN0IGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSIyIiB3aWR0aD0iMTYiIHg9IjQiIHk9IjExIi8+CiAgICA8L2c+Cjwvc3ZnPg=="},404:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItaW1hZ2UiPgogICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiPjwvcmVjdD4KICAgIDxjaXJjbGUgY3g9IjguNSIgY3k9IjguNSIgcj0iMS41Ij48L2NpcmNsZT4KICAgIDxwb2x5bGluZSBwb2ludHM9IjIxIDE1IDE2IDEwIDUgMjEiPjwvcG9seWxpbmU+Cjwvc3ZnPg=="},355:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMWVtIiBoZWlnaHQ9IjFlbSIgdmlld0JveD0iMCAwIDE2IDE2IiBjbGFzcz0iYmkgYmktbG9jay1maWxsIiBmaWxsPSIjZmZmIgogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZD0iTTIuNSA5YTIgMiAwIDAgMSAyLTJoN2EyIDIgMCAwIDEgMiAydjVhMiAyIDAgMCAxLTIgMmgtN2EyIDIgMCAwIDEtMi0yVjl6Ii8+CiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNC41IDRhMy41IDMuNSAwIDEgMSA3IDB2M2gtMVY0YTIuNSAyLjUgMCAwIDAtNSAwdjNoLTFWNHoiLz4KPC9zdmc+"},246:e=>{"use strict";e.exports="data:image/png;base64,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"},496:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0iYmkgYmktbWFnbmV0IiB2aWV3Qm94PSIwIDAgMTYgMTYiPgogIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTggMWE3IDcgMCAwIDAtNyA3djNoNFY4YTMgMyAwIDAgMSA2IDB2M2g0VjhhNyA3IDAgMCAwLTctN1ptNyAxMWgtNHYzaDR2LTNaTTUgMTJIMXYzaDR2LTNaTTAgOGE4IDggMCAxIDEgMTYgMHY4aC02VjhhMiAyIDAgMSAwLTQgMHY4SDBWOFoiLz4KPC9zdmc+"},986:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAADFUlEQVR4Ab1WA5QcTRDe32Zs2zZHsW3btm10z77Ytm3btrXdc3rxZVO1xsy+uajPXfpKX5/FzFGoVkImfJpE+B74uidRdl0mbDv8nCRPtaW3fKsjq2G5AMBBmXK70ZdE+QcAtkogEbHM+q0+yP6zOJVnKWm1JTINRiI2AQJFGoMJBMYuy5QlCeWz+ETtX6i0Ckm+89gS/kBSeb2QYMpPe/w7KrqNTIMibHyoqgDoI8YJaf31Le327/BH6SlhqXBWzFeIj0ZbTEa3/ZQNDLQJqNQbcTJPGtwqypeBsDX+XlYN+08mbCjc2UKA2adQVgr1cY4giePSVK1CUHUIe+prp6i8iDDpWTzw/cIH1BT/LAiTfITTxGn8H3cLFaJVhGBdQUbhayRk3FS0ajk8iahaMbi/42rdCf/q8LoBSURjNaovt/+ANj4VO+gduEH2H+HyQkAbwrBCKDOajVJWLTnorsFt87UVKS+McpHaMgD4JzotDkMK8bsHPd8sehnMxgsPF1G+FCsEdwugWjuxchhYt5WEL/GMgNnFIPymi294abh4b6C4xtkSPjxQJqosvzz26R8A7pWO3evi0yJi43yZBBQN4FtaShFWAHr+MgTqWq4t2REkU7X2Ts7i8w24qaNzFNgzA98Mfp6En4tg7bO7topdM+YVfh5XWZjCMmIGOgGvOwJaeWbI7q1Ou8+42mZ13Z1EkAphmYzoAQHt1AWDAaaGlUQdnIcQZNjMWSU2QE+OYDEhaeqL3BYzp/QU9jcELAcAekBpBwHA5eAoXCSshmuYG7g3yOArXKC2PK7kJuEaI2UgLeBb6CLamJ0y9Hl8iWj1oUVtS0+JjONec3GqVtyPTY1bqyk0PLXbH3IMkiuyN75TxenzP2PwomuVkLYD6Hw9rjkSl0RslfFv3BodMBEQdLFMtKJYCacvtiuwojhr6MscIMo6h5iPLm69CrNe/IUtwKCiysuWUnnW0lPsv7jleAdgogy27VGBCQ9+M/2/Cb7SkNVpB3MSfhhL7fssmD0wuAlxiwDEFgB3Bf3hTGK1zfr4CJlxUMYWF0ZsAAAAAElFTkSuQmCC"},302:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAQAAACZKrSjAAACOElEQVR42mLABIBOygHIbyeAwu+Mv40qm9q2zkre1rZt27bbcW3btm3bNg5pJpPM7/yFq2+9MpAzuJ03eYmb9PHMhtSgFeQeRjuub1xa4Q/EQ05vNXfaNIgPPZivGR3Pda5cOjhQflWmis8iOva6LWrDCf3lbUbHf8kxzraI/SLadvWBDTegfEZeik+jj4Ab/WGh9LMU31v1UU1vJXKhbAFov8lBfOLQ7JQRQIU/eEhKqz0PTE1p8Y94bPxNNDUy1Cg0o8ovAP1ZTnbiFA5jI5kfAFiW1xnNwzBQa5mar2p6eIjrxv8eIynAk6fN+l/IQQGesFFe4XJ+M1NLARmyi/tWx16Im+bffSMzu9u68thYSQs4hbO5hf4sZRur+YBYKKJdL+UKAEbyi020HOAQK1Qs7Ae+t0If+KcSEY/oq9IMenG+c0x0dUDfbIXbAJxlS20X4Cke2hRPxRFlrpIPgLxo1/AU3Mrl4FcrfCnAU8vFT5boOKBOE9Gxxdtlyvm/P2DBLTbNJwYB+nyHujHAvrTCWq70OdRCcCXyZ+qyq+zPRXzJqoBel98copcsDOjjeZ0z2EgrCDckhPKvqCNaZforwBPQA/jZZWU/l5kAQE2vtlBHiNo5f4xfU158NBf7qgyBVTz0ClzFD5bkFefJMnBTyitbxTdzgC/BA66oHewTqXYEAPmTVpDlpSbzRPoYeTTxxpbrblq/eE8VMUYcEzfFPnVEhvxIgHT/K+3EenE+Nt+iDIGIhxhCqqhVJ+8VkAAAAABJRU5ErkJggg=="},989:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItbXVzaWMiPjxwYXRoIGQ9Ik05IDE4VjVsMTItMnYxMyI+PC9wYXRoPjxjaXJjbGUgY3g9IjYiIGN5PSIxOCIgcj0iMyI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTgiIGN5PSIxNiIgcj0iMyI+PC9jaXJjbGU+PC9zdmc+"},900:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItcGFja2FnZSI+PGxpbmUgeDE9IjE2LjUiIHkxPSI5LjQiIHgyPSI3LjUiIHkyPSI0LjIxIj48L2xpbmU+PHBhdGggZD0iTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiI+PC9wYXRoPjxwb2x5bGluZSBwb2ludHM9IjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2Ij48L3BvbHlsaW5lPjxsaW5lIHgxPSIxMiIgeTE9IjIyLjA4IiB4Mj0iMTIiIHkyPSIxMiI+PC9saW5lPjwvc3ZnPg=="},444:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM4MDAiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiLz48L3N2Zz4K"},202:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM5OTkiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE0SDlWOGgydjh6bTQgMGgtMlY4aDJ2OHoiLz48L3N2Zz4K"},598:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwODAiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE0LjV2LTlsNiA0LjUtNiA0LjV6Ii8+PC9zdmc+Cg=="},757:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiM5OTkiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE0LjV2LTlsNiA0LjUtNiA0LjV6Ii8+PC9zdmc+Cg=="},403:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItdHlwZSI+PHBvbHlsaW5lIHBvaW50cz0iNCA3IDQgNCAyMCA0IDIwIDciPjwvcG9seWxpbmU+PGxpbmUgeDE9IjkiIHkxPSIyMCIgeDI9IjE1IiB5Mj0iMjAiPjwvbGluZT48bGluZSB4MT0iMTIiIHkxPSI0IiB4Mj0iMTIiIHkyPSIyMCI+PC9saW5lPjwvc3ZnPg=="}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={id:r,loaded:!1,exports:{}};return e[r](s,s.exports,n),s.loaded=!0,s.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),n.b=document.baseURI||self.location.href,n.nc=void 0,(()=>{"use strict";class e extends EventTarget{constructor(){super(),this.actions=Object.seal({"deselect-all":{enabled:!1,shortcut:"D",text:"Deselect all"},"move-bottom":{enabled:!1,text:"Move to the back of the queue"},"move-down":{enabled:!1,text:"Move down in the queue"},"move-top":{enabled:!1,text:"Move to the front of the queue"},"move-up":{enabled:!1,text:"Move up in the queue"},"open-torrent":{enabled:!0,shortcut:"O",text:"Open torrent…"},"pause-all-torrents":{enabled:!1,text:"Pause all"},"pause-selected-torrents":{enabled:!1,shortcut:"U",text:"Pause"},"reannounce-selected-torrents":{enabled:!1,text:"Ask tracker for more peers"},"remove-selected-torrents":{enabled:!1,text:"Remove from list…"},"resume-selected-torrents":{enabled:!1,shortcut:"R",text:"Resume"},"resume-selected-torrents-now":{enabled:!1,text:"Resume now"},"select-all":{enabled:!1,shortcut:"A",text:"Select all"},"show-about-dialog":{enabled:!0,text:"About"},"show-inspector":{enabled:!1,shortcut:"I",text:"Torrent Inspector"},"show-labels-dialog":{enabled:!1,text:"Edit Labels…"},"show-move-dialog":{enabled:!1,shortcut:"L",text:"Set location…"},"show-overflow-menu":{enabled:!0,text:"More options…"},"show-preferences-dialog":{enabled:!0,shortcut:"P",text:"Edit preferences"},"show-rename-dialog":{enabled:!1,shortcut:"N",text:"Rename…"},"show-shortcuts-dialog":{enabled:!0,text:"Keyboard shortcuts"},"show-statistics-dialog":{enabled:!0,shortcut:"S",text:"Statistics"},"start-all-torrents":{enabled:!1,text:"Start all"},"toggle-compact-rows":{enabled:!0,text:"Compact rows"},"toggle-contrast":{enabled:!0,text:"High contrast UI"},"trash-selected-torrents":{enabled:!1,text:"Trash data and remove from list…"},"verify-selected-torrents":{enabled:!1,shortcut:"V",text:"Verify local data"}})}click(e){if(this.isEnabled(e)){const t=new Event("click");t.action=e,this.dispatchEvent(t)}}getActionForShortcut(e){for(const[t,n]of Object.entries(this.actions))if(e===n.shortcut)return t;return null}allShortcuts(){return new Map(Object.entries(this.actions).filter((([,e])=>e.shortcut)).map((([e,t])=>[t.shortcut,e])))}isEnabled(e){return this._getAction(e).enabled}text(e){return this._getAction(e).text}keyshortcuts(e){return this._getAction(e).shortcut}update(t){const n=e._recount(t.selected,t.nonselected);this._updateStates(n)}_getAction(e){const t=this.actions[e];if(!t)throw new Error(`no such action: ${e}`);return t}static _recount(e,t){const n=e.length+t.length,r=e.filter((e=>e.isStopped())).length,o=e.length-r,s=t.filter((e=>e.isStopped())).length,i=t.length-s,a=r+s,l=o+i,c=e.filter((e=>e.isQueued())).length;return{active:l,nonselected_active:i,nonselected_paused:s,paused:a,selected:e.length,selected_active:o,selected_paused:r,selected_queued:c,total:n}}_updateStates(e){const t=(e,t)=>{for(const n of t)this._updateActionState(n,e)};t(e.selected_paused>0,["resume-selected-torrents"]),t(e.paused>0,["start-all-torrents"]),t(e.active>0,["pause-all-torrents"]),t(e.selected_paused>0||e.selected_queued>0,["resume-selected-torrents-now"]),t(e.selected_active>0,["pause-selected-torrents","reannounce-selected-torrents"]),t(e.selected>0,["deselect-all","move-bottom","move-down","move-top","move-up","remove-selected-torrents","show-inspector","show-labels-dialog","show-move-dialog","trash-selected-torrents","verify-selected-torrents"]),t(1===e.selected,["show-rename-dialog"]),t(e.selecteds(o,t,i,r,n)))}return a[0].classList.add("selected"),i.children[0].classList.remove("hidden"),{buttons:a,root:r}}function a(e){const t=document.createElement("dialog");t.classList.add("dialog-container","popup",e),t.open=!0,t.setAttribute("role","dialog");const n=document.createElement("div");n.classList.add("dialog-window"),t.append(n);const r=document.createElement("div");r.classList.add("dialog-logo"),n.append(r);const o=document.createElement("div");o.classList.add("dialog-heading"),n.append(o);const s=document.createElement("div");s.classList.add("dialog-message"),n.append(s);const i=document.createElement("div");i.classList.add("dialog-workarea"),n.append(i);const a=document.createElement("div");a.classList.add("dialog-buttons"),n.append(a);const l=document.createElement("span");l.classList.add("dialog-buttons-begin"),a.append(l);const c=document.createElement("button");c.classList.add("dialog-dismiss-button"),c.textContent="Cancel",a.append(c);const d=document.createElement("button");d.textContent="OK",a.append(d);const A=document.createElement("span");return A.classList.add("dialog-buttons-end"),a.append(A),{confirm:d,dismiss:c,heading:o,message:s,root:t,workarea:i}}function l(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replaceAll(/[018]/g,(e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)))}function c(e,t){const n=[],{root:r,content:o}=function(e){const t=document.createElement("fieldset");t.classList.add("section");const n=document.createElement("legend");n.classList.add("title"),n.textContent=e,t.append(n);const r=document.createElement("div");return r.classList.add("content"),t.append(r),{content:r,root:t}}(e);for(const e of t){const t=document.createElement("label");t.textContent=e,o.append(t);const r=document.createElement("div");r.id=l(),o.append(r),t.setAttribute("for",r.id),n.push(r)}return{children:n,root:r}}function d(e,t=100){let n=null;return(...r)=>{n||(n=setTimeout((()=>{n=null,e(...r)}),t))}}function A(e,t){return r()(e,t)}function p(e,t,n){n?e.setAttribute(t,!0):e.removeAttribute(t)}function g(e,t){p(e,"disabled",!t)}function u(e,t){e.classList.toggle("checked",t)}class m extends EventTarget{constructor(e){super(),this.listener=t=>{e.contains(t.target)||(this.dispatchEvent(new MouseEvent(t.type,t)),t.preventDefault())},Object.seal(this),this.start()}start(){setTimeout((()=>document.addEventListener("click",this.listener)),0)}stop(){document.removeEventListener("click",this.listener)}}function h(e,t){e.textContent!==t&&(e.textContent=t)}class C{constructor(e){this._prefs=e,this._elements={toggle:document.querySelector("#toggle-notifications")}}_setEnabled(e){this.prefs.notifications_enabled=e,h(this._toggle,(e?"Disable":"Enable")+" Notifications")}_requestPermission(){Notification.requestPermission().then((e=>this._setEnabled("granted"===e)))}toggle(){this._enabled?this._setEnabled(!1):"granted"===Notification.permission?this._setEnabled(!0):"denied"!==Notification.permission&&this._requestPermission()}}class b extends EventTarget{constructor(){super(),this._cache={},this.dispatchPrefsChange=d(((e,t,n)=>{const r=new Event("change");Object.assign(r,{key:e,old_value:t,value:n}),this.dispatchEvent(r)}));for(const[e,t]of Object.entries(b._Defaults))this._set(e,b._getCookie(e,t)),Object.defineProperty(this,e.replaceAll("-","_"),{get:()=>this._get(e),set:t=>{this._set(e,t)}});Object.seal(this)}entries(){return Object.entries(this._cache)}keys(){return Object.keys(this._cache)}_get(e){const{_cache:t}=this;if(!Object.prototype.hasOwnProperty.call(t,e))throw new Error(e);return t[e]}_set(e,t){const{_cache:n}=this,r=n[e];r!==t&&(n[e]=t,b._setCookie(e,t),this.dispatchPrefsChange(e,r,t))}static _setCookie(e,t){const n=new Date;n.setFullYear(n.getFullYear()+1),document.cookie=`${e}=${t}; SameSite=Strict; expires=${n.toGMTString()}`}static _getCookie(e,t){const n=b._readCookie(e);return null===n?t:"true"===n||"false"!==n&&(/^\d+$/.test(n)?Number.parseInt(n,10):n)}static _readCookie(e){const t=`; ${document.cookie}`.split(`; ${e}=`);return 2===t.length?t.pop().split(";").shift():null}}b.AltSpeedEnabled="alt-speed-enabled",b.DisplayCompact="compact",b.DisplayFull="full",b.DisplayMode="display-mode",b.ContrastLess="less",b.ContrastMore="more",b.ContrastMode="contrast-mode",b.FilterActive="active",b.FilterAll="all",b.FilterDownloading="downloading",b.FilterFinished="finished",b.FilterMode="filter-mode",b.FilterPaused="paused",b.FilterSeeding="seeding",b.NotificationsEnabled="notifications-enabled",b.RefreshRate="refresh-rate-sec",b.SortAscending="ascending",b.SortByActivity="activity",b.SortByAge="age",b.SortByName="name",b.SortByProgress="progress",b.SortByQueue="queue",b.SortByRatio="ratio",b.SortBySize="size",b.SortByState="state",b.SortDescending="descending",b.SortDirection="sort-direction",b.SortMode="sort-mode",b._Defaults={[b.AltSpeedEnabled]:!1,[b.DisplayMode]:b.DisplayFull,[b.ContrastMode]:window.matchMedia("(prefers-contrast: more)").matches?b.ContrastMore:b.ContrastLess,[b.FilterMode]:b.FilterAll,[b.NotificationsEnabled]:!1,[b.RefreshRate]:5,[b.SortDirection]:b.SortAscending,[b.SortMode]:b.SortByName};class f extends EventTarget{constructor(e){super(),this.elements=f._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}_onDismiss(){this.close()}static _create(e){const t=a("about-dialog");t.root.setAttribute("aria-label","About transmission"),t.heading.textContent="Transmission",t.dismiss.textContent="Close";let n=document.createElement("div");return n.classList.add("about-dialog-version-number"),n.textContent=e.version,t.heading.append(n),n=document.createElement("div"),n.classList.add("about-dialog-version-checksum"),n.textContent=e.checksum,t.heading.append(n),n=document.createElement("div"),n.textContent="A fast and easy bitTorrent client",t.workarea.append(n),n=document.createElement("div"),n.textContent="Copyright © The Transmission Project",t.workarea.append(n),t.confirm.remove(),delete t.confirm,t}}class v extends EventTarget{constructor(e){super(),this.action_listener=this._update.bind(this),this.action_manager=e,this.action_manager.addEventListener("change",this.action_listener),Object.assign(this,this._create()),this.show()}show(){for(const[e,t]of Object.entries(this.actions))g(t,this.action_manager.isEnabled(e));document.body.append(this.root)}close(){if(!this.closed){this.action_manager.removeEventListener("change",this.action_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_update(e){const t=this.actions[e.action];t&&g(t,e.enabled)}_create(){const e=document.createElement("div");e.role="menu",e.classList.add("context-menu","popup");const t={},n=(n,r=!1)=>{const o=document.createElement("div"),s=this.action_manager.text(n);o.role="menuitem",r?o.classList.add("context-menuitem","warning"):o.classList.add("context-menuitem"),o.dataset.action=n,o.textContent=s;const i=this.action_manager.keyshortcuts(n);i&&o.setAttribute("aria-keyshortcuts",i),o.addEventListener("click",(()=>{this.action_manager.click(n),this.close()})),t[n]=o,e.append(o)},r=()=>{const t=document.createElement("div");t.classList.add("context-menu-separator"),e.append(t)};return n("resume-selected-torrents"),n("resume-selected-torrents-now"),n("pause-selected-torrents"),r(),n("move-top"),n("move-up"),n("move-down"),n("move-bottom"),r(),n("remove-selected-torrents",!0),n("trash-selected-torrents",!0),r(),n("verify-selected-torrents"),n("show-move-dialog"),n("show-rename-dialog"),n("show-labels-dialog"),r(),n("reannounce-selected-torrents"),r(),n("select-all"),n("deselect-all"),{actions:t,root:e}}}const y=new Intl.PluralRules,x=y.resolvedOptions().locale,w=new Intl.NumberFormat(x),k=1e3,E=[new Intl.NumberFormat(x,{maximumFractionDigits:0,style:"unit",unit:"byte"}),new Intl.NumberFormat(x,{maximumFractionDigits:0,style:"unit",unit:"kilobyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:0,style:"unit",unit:"megabyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"gigabyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"terabyte"}),new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"petabyte"})],I=new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"kilobyte-per-second"}),B=new Intl.NumberFormat(x,{maximumFractionDigits:2,style:"unit",unit:"megabyte-per-second"}),_={_toTruncFixed:(e,t)=>(Math.floor(e*10**t)/10**t).toFixed(t),countString(e,t,n){return`${this.number(n)} ${this.ngettext(e,t,n)}`},mem(e){if(e<0)return"Unknown";if(0===e)return"None";let t=e;for(const e of E){if(t"one"===y.select(n)?e:t,number:e=>w.format(e),percentString(e){const t=e<100?1:0;return this._toTruncFixed(e,t)},ratioString(e){return-1===e?"None":-2===e?"∞":this.percentString(e)},size(e){return this.mem(e)},speed:e=>e<999.95?I.format(e):B.format(e/1e3),speedBps(e){return this.speed(this.toKBps(e))},stringSanitizer:e=>["E2BIG","NaN"].some((t=>e.includes(t)))?"…":e,timeInterval(e){const t=Math.floor(e/86400);if(t)return this.countString("day","days",t);const n=Math.floor(e%86400/3600);if(n)return this.countString("hour","hours",n);const r=Math.floor(e%3600/60);return r?this.countString("minute","minutes",r):(e=Math.floor(e%60),this.countString("second","seconds",e))},timestamp(e){if(!e)return"N/A";const t=new Date(1e3*e),n=new Date;let r="",o="";const s=n.getFullYear()===t.getFullYear(),i=n.getMonth()===t.getMonth(),a=n.getDate()-t.getDate();r=s&&i&&Math.abs(a)<=1?0===a?"Today":1===a?"Yesterday":"Tomorrow":t.toDateString();let l=t.getHours(),c="AM";l>12&&(l-=12,c="PM"),0===l&&(l=12),l<10&&(l=`0${l}`);let d=t.getMinutes();return d<10&&(d=`0${d}`),(e=t.getSeconds())<10&&(e=`0${e}`),o=[l,d,e].join(":"),[r,o,c].join(" ")},toKBps:e=>Math.floor(e/k)};class S extends EventTarget{isDone(){return this.fields.have>=this.fields.size}isEditable(){return this.fields.torrent.getFileCount()>1&&!this.isDone()}refreshWantedHTML(){const e=this.elements.root;e.classList.toggle("skip",!this.fields.isWanted),e.classList.toggle("complete",this.isDone()),g(e.checkbox,this.isEditable()),e.checkbox.checked=this.fields.isWanted}refreshProgressHTML(){const{size:e,have:t}=this.fields,n=100*(e?t/e:1),r=_,o=`${r.size(t)} of ${r.size(e)} (${r.percentString(n)}%)`;h(this.elements.progress,o)}refresh(){let e=0,t=!1,n=!1,r=!1,o=0,s=!1;const i=this.fields.torrent.getFiles();for(const a of this.fields.indices){const l=i[a];switch(e+=l.bytesCompleted,o+=l.length,s|=l.wanted,l.priority.toString()){case"-1":n=!0;break;case"1":t=!0;break;default:r=!0}}u(this.elements.priority_low_button,n),u(this.elements.priority_normal_button,r),u(this.elements.priority_high_button,t),this.fields.have===e&&this.fields.size===o||(this.fields.have=e,this.fields.size=o,this.refreshProgressHTML()),this.fields.isWanted!==s&&(this.fields.isWanted=s,this.refreshWantedHTML())}fireWantedChanged(e){const t=new Event("wantedToggled");t.indices=[...this.fields.indices],t.wanted=e,this.dispatchEvent(t)}firePriorityChanged(e){const t=new Event("priorityToggled");t.indices=[...this.fields.indices],t.priority=e,this.dispatchEvent(t)}createRow(e,t,n,r){const o=document.createElement("li");o.classList.add("inspector-torrent-file-list-entry",r?"even":"odd"),this.elements.root=o;let s=document.createElement("input");const i=l();s.type="checkbox",s.className="file-wanted-control",s.title="Download file",s.id=i,s.addEventListener("change",(e=>this.fireWantedChanged(e.target.checked))),o.checkbox=s,o.append(s),s=document.createElement("label"),s.className="inspector-torrent-file-list-entry-name",s.setAttribute("for",i),h(s,n),o.append(s),s=document.createElement("div"),s.className="inspector-torrent-file-list-entry-progress",o.append(s),this.elements.progress=s,s=document.createElement("div"),s.className="file-priority-radiobox";const a=s,c=e=>this.firePriorityChanged(e.target.value);s=document.createElement("input"),s.type="radio",s.value="-1",s.className="low",s.title="Low Priority",s.addEventListener("click",c),this.elements.priority_low_button=s,a.append(s),s=document.createElement("input"),s.type="radio",s.value="0",s.className="normal",s.title="Normal Priority",s.addEventListener("click",c),this.elements.priority_normal_button=s,a.append(s),s=document.createElement("input"),s.type="radio",s.value="1",s.title="High Priority",s.className="high",s.addEventListener("click",c),this.elements.priority_high_button=s,a.append(s),o.append(a),o.style.paddingLeft=20*t+"px",this.refresh()}getElement(){return this.elements.root}constructor(e,t,n,r,o){super(),this.fields={have:0,indices:r,isWanted:!0,size:0,torrent:e},this.elements={priority_high_button:null,priority_low_button:null,priority_normal_button:null,progress:null,root:null},this.createRow(e,t,n,o)}}class D extends EventTarget{constructor(e){super(),this.fieldObservers={},this.fields={},this.refresh(e)}notifyOnFieldChange(e,t){this.fieldObservers[e]=this.fieldObservers[e]||[],this.fieldObservers[e].push(t)}setField(e,t,n){const r=e[t];if(A(r,n))return!1;const o=this.fieldObservers[t];if(e===this.fields&&o&&o.length>0)for(const e of o)e.call(this,n,r,t);return e[t]=n,!0}updateFiles(e){let t=!1;const n=this.fields.files||[],r=["length","name","bytesCompleted","wanted","priority"];for(const[o,s]of e.entries()){const e=n[o]||{};for(const n of r)n in s&&(t|=this.setField(e,n,s[n]));n[o]=e}return this.fields.files=n,t}static collateTrackers(e){return e.map((e=>e.announce.toLowerCase())).join("\t")}refreshFields(e){let t=!1;for(const[n,r]of Object.entries(e))switch(n){case"files":case"fileStats":t|=this.updateFiles(r);break;case"trackerStats":t|=this.setField(this.fields,"trackers",r);break;case"trackers":n in this.fields||(t|=this.setField(this.fields,n,r));break;case"name":this.setField(this.fields,n,e[n])&&(this.fields.collatedName="",t=!0);break;default:t|=this.setField(this.fields,n,r)}return t}refresh(e){this.refreshFields(e)&&this.dispatchEvent(new Event("dataChanged"))}getComment(){return this.fields.comment}getCreator(){return this.fields.creator}getDateAdded(){return this.fields.addedDate}getDateCreated(){return this.fields.dateCreated}getDesiredAvailable(){return this.fields.desiredAvailable}getDownloadDir(){return this.fields.downloadDir}getDownloadSpeed(){return this.fields.rateDownload}getDownloadedEver(){return this.fields.downloadedEver}getError(){return this.fields.error}getErrorString(){return this.fields.errorString}getETA(){return this.fields.eta}getFailedEver(){return this.fields.corruptEver}getFiles(){return this.fields.files||[]}getFile(e){return this.fields.files[e]}getFileCount(){return this.fields["file-count"]}getHashString(){return this.fields.hashString}getHave(){return this.getHaveValid()+this.getHaveUnchecked()}getHaveUnchecked(){return this.fields.haveUnchecked}getHaveValid(){return this.fields.haveValid}getId(){return this.fields.id}getLabels(){return this.fields.labels.sort()}getLastActivity(){return this.fields.activityDate}getLeftUntilDone(){return this.fields.leftUntilDone}getMagnetLink(){return this.fields.magnetLink}getMetadataPercentComplete(){return this.fields.metadataPercentComplete}getName(){return this.fields.name||"Unknown"}getPeers(){return this.fields.peers||[]}getPeersConnected(){return this.fields.peersConnected}getPeersGettingFromUs(){return this.fields.peersGettingFromUs}getPeersSendingToUs(){return this.fields.peersSendingToUs}getPieceCount(){return this.fields.pieceCount}getPieceSize(){return this.fields.pieceSize}getPrimaryMimeType(){return this.fields["primary-mime-type"]||"application/octet-stream"}getPrivateFlag(){return this.fields.isPrivate}getQueuePosition(){return this.fields.queuePosition}getRecheckProgress(){return this.fields.recheckProgress}getSeedRatioLimit(){return this.fields.seedRatioLimit}getSeedRatioMode(){return this.fields.seedRatioMode}getSizeWhenDone(){return this.fields.sizeWhenDone}getStartDate(){return this.fields.startDate}getStatus(){return this.fields.status}getTotalSize(){return this.fields.totalSize}getTrackers(){return this.fields.trackers||[]}getUploadSpeed(){return this.fields.rateUpload}getUploadRatio(){return this.fields.uploadRatio}getUploadedEver(){return this.fields.uploadedEver}getWebseedsSendingToUs(){return this.fields.webseedsSendingToUs}isFinished(){return this.fields.isFinished}hasExtraInfo(){return"hashString"in this.fields}isSeeding(){return this.getStatus()===D._StatusSeed}isStopped(){return this.getStatus()===D._StatusStopped}isChecking(){return this.getStatus()===D._StatusCheck}isDownloading(){return this.getStatus()===D._StatusDownload}isQueued(){return this.getStatus()===D._StatusDownloadWait||this.getStatus()===D._StatusSeedWait}isDone(){return this.getLeftUntilDone()<1}needsMetaData(){return this.getMetadataPercentComplete()<1}getActivity(){return this.getDownloadSpeed()+this.getUploadSpeed()}getPercentDoneStr(){return _.percentString(100*this.getPercentDone())}getPercentDone(){return this.fields.percentDone}getStateString(){switch(this.getStatus()){case D._StatusStopped:return this.isFinished()?"Seeding complete":"Paused";case D._StatusCheckWait:return"Queued for verification";case D._StatusCheck:return"Verifying local data";case D._StatusDownloadWait:return"Queued for download";case D._StatusDownload:return"Downloading";case D._StatusSeedWait:return"Queued for seeding";case D._StatusSeed:return"Seeding";case null:return"Unknown";default:return"Error"}}seedRatioLimit(e){switch(this.getSeedRatioMode()){case D._RatioUseGlobal:return e.seedRatioLimit();case D._RatioUseLocal:return this.getSeedRatioLimit();default:return-1}}getErrorMessage(){const e=this.getErrorString();switch(this.getError()){case D._ErrTrackerWarning:return`Tracker returned a warning: ${e}`;case D._ErrTrackerError:return`Tracker returned an error: ${e}`;case D._ErrLocalError:return`Error: ${e}`;default:return null}}getCollatedName(){const e=this.fields;return!e.collatedName&&e.name&&(e.collatedName=e.name.toLowerCase()),e.collatedName||""}getCollatedTrackers(){const e=this.fields;return!e.collatedTrackers&&e.trackers&&(e.collatedTrackers=D.collateTrackers(e.trackers)),e.collatedTrackers||""}testState(e){const t=this.getStatus();switch(e){case b.FilterActive:return this.getPeersGettingFromUs()>0||this.getPeersSendingToUs()>0||this.getWebseedsSendingToUs()>0||this.isChecking();case b.FilterSeeding:return t===D._StatusSeed||t===D._StatusSeedWait;case b.FilterDownloading:return t===D._StatusDownload||t===D._StatusDownloadWait;case b.FilterPaused:return this.isStopped();case b.FilterFinished:return this.isFinished();default:return!0}}test(e,t,n,r){let o=this.testState(e);if(o&&n&&(o=this.getCollatedName().includes(n.toLowerCase())),o){const e=this.getLabels();r.length>0&&(o=r.some((t=>e.includes(t))))}return o&&t&&t.length>0&&(o=this.getCollatedTrackers().includes(t)),o}static compareById(e,t){return e.getId()-t.getId()}static compareByName(e,t){return e.getCollatedName().localeCompare(t.getCollatedName())||D.compareById(e,t)}static compareByQueue(e,t){return e.getQueuePosition()-t.getQueuePosition()}static compareByAge(e,t){const n=e.getDateAdded();return t.getDateAdded()-n||D.compareByQueue(e,t)}static compareByState(e,t){const n=e.getStatus();return t.getStatus()-n||D.compareByQueue(e,t)}static compareByActivity(e,t){const n=e.getActivity();return t.getActivity()-n||D.compareByState(e,t)}static compareByRatio(e,t){const n=e.getUploadRatio(),r=t.getUploadRatio();return nr?-1:D.compareByState(e,t)}static compareByProgress(e,t){return e.getPercentDone()-t.getPercentDone()||D.compareByRatio(e,t)}static compareBySize(e,t){return e.getTotalSize()-t.getTotalSize()||D.compareByName(e,t)}static compareTorrents(e,t,n,r){let o=0;switch(n){case b.SortByActivity:o=D.compareByActivity(e,t);break;case b.SortByAge:o=D.compareByAge(e,t);break;case b.SortByQueue:o=D.compareByQueue(e,t);break;case b.SortByProgress:o=D.compareByProgress(e,t);break;case b.SortBySize:o=D.compareBySize(e,t);break;case b.SortByState:o=D.compareByState(e,t);break;case b.SortByRatio:o=D.compareByRatio(e,t);break;case b.SortByName:o=D.compareByName(e,t);break;default:console.log(`Unrecognized sort mode: ${n}`),o=D.compareByName(e,t)}return r===b.SortDescending&&(o=-o),o}static sortTorrents(e,t,n){switch(t){case b.SortByActivity:e.sort(this.compareByActivity);break;case b.SortByAge:e.sort(this.compareByAge);break;case b.SortByName:e.sort(this.compareByName);break;case b.SortByProgress:e.sort(this.compareByProgress);break;case b.SortByQueue:e.sort(this.compareByQueue);break;case b.SortByRatio:e.sort(this.compareByRatio);break;case b.SortBySize:e.sort(this.compareBySize);break;case b.SortByState:e.sort(this.compareByState);break;default:console.log(`Unrecognized sort mode: ${t}`),e.sort(this.compareByName)}return n===b.SortDescending&&e.reverse(),e}}D._StatusStopped=0,D._StatusCheckWait=1,D._StatusCheck=2,D._StatusDownloadWait=3,D._StatusDownload=4,D._StatusSeedWait=5,D._StatusSeed=6,D._RatioUseGlobal=0,D._RatioUseLocal=1,D._RatioUnlimited=2,D._ErrNone=0,D._ErrTrackerWarning=1,D._ErrTrackerError=2,D._ErrLocalError=3,D._TrackerInactive=0,D._TrackerWaiting=1,D._TrackerQueued=2,D._TrackerActive=3,D.Fields={},D.Fields.Metadata=["addedDate","file-count","name","primary-mime-type","totalSize"],D.Fields.Stats=["error","errorString","eta","isFinished","isStalled","labels","leftUntilDone","metadataPercentComplete","peersConnected","peersGettingFromUs","peersSendingToUs","percentDone","queuePosition","rateDownload","rateUpload","recheckProgress","seedRatioMode","seedRatioLimit","sizeWhenDone","status","trackers","downloadDir","uploadedEver","uploadRatio","webseedsSendingToUs"],D.Fields.InfoExtra=["comment","creator","dateCreated","files","hashString","isPrivate","magnetLink","pieceCount","pieceSize"],D.Fields.StatsExtra=["activityDate","corruptEver","desiredAvailable","downloadedEver","fileStats","haveUnchecked","haveValid","peers","startDate","trackerStats"];const T=["encryption","speed-up","speed-down","percent-done","status","peer-address","peer-app-name"];class P extends EventTarget{constructor(e){super(),this.closed=!1,this.controller=e,this.elements=this._create(),this.current_page=this.elements.info.root,this.interval=setInterval(this._refreshTorrents.bind(this),3e3),this.name="inspector",this.selection_listener=e=>this._setTorrents(e.selected),this.torrent_listener=()=>this._updateCurrentPage(),this.torrents=[],this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null,this.outside=new m(this.elements.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this),e.addEventListener("torrent-selection-changed",this.selection_listener),this._setTorrents(this.controller.getSelectedTorrents()),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),clearInterval(this.interval),this._setTorrents([]),this.elements.root.remove(),this.controller.removeEventListener("torrent-selection-changed",this.selection_listener),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}static _createInfoPage(){const e=document.createElement("div");e.classList.add("inspector-info-page");const t={root:e},n=t=>{const n=document.createElement("div");n.textContent=t,n.classList.add("section-label"),e.append(n)},r=t=>{const n=document.createElement("label");h(n,t),e.append(n);const r=document.createElement("span");return e.append(r),r};n("Activity");let o=[["have","Have:"],["availability","Availability:"],["uploaded","Uploaded:"],["downloaded","Downloaded:"],["state","State:"],["running_time","Running time:"],["remaining_time","Remaining:"],["last_activity","Last activity:"],["error","Error:"]];for(const[e,n]of o)t[e]=r(n);n("Details"),o=[["size","Size:"],["location","Location:"],["hash","Hash:"],["privacy","Privacy:"],["origin","Origin:"],["dateAdded","Date added:"],["magnetLink","Magnet:"],["comment","Comment:"],["labels","Labels:"]];for(const[e,n]of o)t[e]=r(n);return t}static _createListPage(e,t){const n=document.createElement("div"),r=document.createElement(e);return r.id=t,n.append(r),{list:r,root:n}}static _createTiersPage(){return P._createListPage("div","inspector-tiers-list")}static _createFilesPage(){return P._createListPage("ul","inspector-file-list")}static _createPeersPage(){const e=document.createElement("table");e.classList.add("peer-list");const t=document.createElement("thead"),n=document.createElement("tr"),r=["","Up","Down","Done","Status","Address","Client"];for(const[e,t]of r.entries()){const r=document.createElement("th"),o=T[e];"encryption"===o&&(r.dataset.encrypted=!0),r.classList.add(o),h(r,t),n.append(r)}const o=document.createElement("tbody");return t.append(n),e.append(t),e.append(o),{root:e,tbody:o}}_create(){const e={files:P._createFilesPage(),info:P._createInfoPage(),peers:P._createPeersPage(),tiers:P._createTiersPage()};return{...i("inspector",[["inspector-tab-info",e.info.root,"Info"],["inspector-tab-peers",e.peers.root,"Peers"],["inspector-tab-tiers",e.tiers.root,"Tiers"],["inspector-tab-files",e.files.root,"Files"]],(e=>{this.current_page=e,this._updateCurrentPage()}).bind(this)),...e}}_setTorrents(e){const t="dataChanged",n=this.torrent_listener;for(const e of this.torrents)e.removeEventListener(t,n);this.torrents=[...e];for(const e of this.torrents)e.addEventListener(t,n);this._refreshTorrents(),this._updateCurrentPage()}static _needsExtraInfo(e){return e.some((e=>!e.hasExtraInfo()))}_refreshTorrents(){const{controller:e,torrents:t}=this,n=t.map((e=>e.getId()));if(n&&n.length>0){const r=["id",...D.Fields.StatsExtra];P._needsExtraInfo(t)&&r.push(...D.Fields.InfoExtra),e.updateTorrents(n,r)}}_updateCurrentPage(){const{current_page:e,elements:t}=this;switch(e){case t.files.root:this._updateFiles();break;case t.info.root:this._updateInfo();break;case t.peers.root:this._updatePeers();break;case t.tiers.root:this._updateTiers();break;default:console.warn("unexpected page"),console.log(e)}}_updateInfo(){const e="None",t="Mixed",n="Unknown",r=_,s=Date.now(),{elements:i,torrents:a}=this,l=a.reduce(((e,t)=>e+t.getSizeWhenDone()),0);let c=null;if(0===a.length)c=e;else if(a.every((e=>e.isFinished())))c="Finished";else if(a.every((e=>e.isStopped())))c="Paused";else{const e=e=>e.getStateString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}h(i.info.state,c);const d=c;if(0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getHaveValid()),0),t=a.reduce(((e,t)=>e+t.getHaveUnchecked()),0),n=a.reduce(((e,t)=>e+t.getLeftUntilDone()),0),o=100*(l?(l-n)/l:1);c=r.percentString(o),c=t?`${r.size(e)} of ${r.size(l)} (${c}%), ${r.size(t)} Unverified`:n?`${r.size(e)} of ${r.size(l)} (${c}%)`:`${r.size(e)} (100%)`}if(h(i.info.have,r.stringSanitizer(c)),0===a.length)c=e;else if(0===l)c=e;else{const e=a.reduce(((e,t)=>t.getHave()+t.getDesiredAvailable()),0);c=`${r.percentString(100*e/l)}%`}if(h(i.info.availability,r.stringSanitizer(c)),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getDownloadedEver()),0),t=a.reduce(((e,t)=>e+t.getFailedEver()),0);c=t?`${r.size(e)} (+${r.size(t)} discarded after failed checksum)`:r.size(e)}if(h(i.info.downloaded,r.stringSanitizer(c)),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getUploadedEver()),0),t=a.reduce(((e,t)=>e+t.getSizeWhenDone()),0)||a.reduce(((e,t)=>e+t.getHaveValid()),0);c=`${r.size(e)} (Ratio: ${r.ratioString(o.ratio(e,t))})`}if(h(i.info.uploaded,c),0===a.length)c=e;else if(a.every((e=>e.isStopped())))c=d;else{const e=e=>e.getStartDate(),n=e(a[0]);c=a.every((t=>e(t)===n))?r.timeInterval(s/1e3-n):t}if(h(i.info.running_time,c),0===a.length)c=e;else{const e=e=>e.getETA(),o=e(a[0]);c=a.every((t=>e(t)===o))?o<0?n:r.timeInterval(o):t}if(h(i.info.remaining_time,c),0===a.length)c=e;else{const t=a.reduce(((e,t)=>Math.max(e,t.getLastActivity())),-1),n=Math.floor(s/1e3);if(0e.getErrorString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(h(i.info.error,c||e),0===a.length)c=e;else{const e=a.reduce(((e,t)=>e+t.getTotalSize()),0);if(e){const t=e=>e.getPieceSize(),n=a.reduce(((e,t)=>e+t.getPieceCount()),0),o=r.number(n),s=t(a[0]);c=a.every((e=>t(e)===s))?`${r.size(e)} (${o} pieces @ ${r.mem(s)})`:`${r.size(e)} (${o} pieces)`}else c="None"}if(h(i.info.size,r.stringSanitizer(c)),0===a.length)c=e;else{const e=e=>e.getHashString(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(h(i.info.hash,c),0===a.length)c=e;else{const e=e=>e.getPrivateFlag(),n=e(a[0]);c=a.every((t=>e(t)===n))?n?"Private to this tracker -- DHT and PEX disabled":"Public torrent":t}if(h(i.info.privacy,c),0===a.length)c=e;else{const e=e=>e.getComment(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(c=c||e,c.startsWith("https://")||c.startsWith("http://")?(c=encodeURI(c),o.setInnerHTML(i.info.comment,`${c}`)):h(i.info.comment,c),c=0===a.length?e:a[0].getLabels().join(", "),h(i.info.labels,c),0===a.length)c=e;else{let e=e=>e.getCreator();const r=e(a[0]),o=!a.every((t=>e(t)===r));e=e=>e.getDateCreated();const s=e(a[0]),i=!a.every((t=>e(t)===s)),l=!r||0===r.length,d=!s;c=o||i?t:l&&d?n:d&&!l?`Created by ${r}`:l&&!d?`Created on ${new Date(1e3*s).toDateString()}`:`Created by ${r} on ${new Date(1e3*s).toDateString()}`}if(h(i.info.origin,c),0===a.length)c=e;else{const e=e=>e.getDownloadDir(),n=e(a[0]);c=a.every((t=>e(t)===n))?n:t}if(h(i.info.location,c),0===a.length)c=e;else{const e=e=>e.getDateAdded(),n=e(a[0]);c=a.every((t=>e(t)===n))?new Date(1e3*n).toDateString():t}if(h(i.info.dateAdded,c),0===a.length)h(i.info.magnetLink,e);else if(a.length>1)h(i.info.magnetLink,t);else{const e=a[0].getMagnetLink();o.setInnerHTML(i.info.magnetLink,``)}}static _peerStatusTitle(e){const t=Object.seal({"?":"We unchoked this peer, but they're not interested",D:"Downloading from this peer",E:"Encrypted Connection",H:"Peer was discovered through Distributed Hash Table (DHT)",I:"Peer is an incoming connection",K:"Peer has unchoked us, but we're not interested",O:"Optimistic unchoke",T:"Peer is connected via uTP",U:"Uploading to peer",X:"Peer was discovered through Peer Exchange (PEX)",d:"We would download from this peer if they'd let us",u:"We would upload to this peer if they'd ask"});return[...e].filter((e=>t[e])).map((e=>`${e}: ${t[e]}`)).join("\n")}_updatePeers(){const e=_,{elements:t,torrents:n}=this,{tbody:r}=t.peers,o=[(e,t)=>{t.dataset.encrypted=e.isEncrypted},(t,n)=>h(n,t.rateToPeer?e.speedBps(t.rateToPeer):""),(t,n)=>h(n,t.rateToClient?e.speedBps(t.rateToClient):""),(e,t)=>h(t,`${Math.floor(100*e.progress)}%`),(e,t)=>{h(t,e.flagStr),t.setAttribute("title",P._peerStatusTitle(e.flagStr))},(e,t)=>h(t,e.address),(e,t)=>h(t,e.clientName)],s=[];for(const e of n){const t=document.createElement("tr");t.classList.add("torrent-row");const n=document.createElement("td");n.setAttribute("colspan",o.length),h(n,e.getName()),t.append(n),s.push(t);for(const t of e.getPeers()){const e=document.createElement("tr");e.classList.add("peer-row");for(const[n,r]of o.entries()){const o=document.createElement("td");o.classList.add(T[n]),r(t,o),e.append(o)}s.push(e)}for(;r.firstChild;)r.firstChild.remove();r.append(...s)}}static getAnnounceState(e){switch(e.announceState){case D._TrackerActive:return"Announce in progress";case D._TrackerWaiting:{const t=Math.max(0,e.nextAnnounceTime-Date.now()/1e3);return`Next announce in ${_.timeInterval(t)}`}case D._TrackerQueued:return"Announce is queued";case D._TrackerInactive:return e.isBackup?"Tracker will be used as a backup":"Announce not scheduled";default:return`unknown announce state: ${e.announceState}`}}static lastAnnounceStatus(e){let t="Last Announce",n=["N/A"];if(e.hasAnnounced){const r=_.timestamp(e.lastAnnounceTime);e.lastAnnounceSucceeded?n=[r," (got ",_.countString("peer","peers",e.lastAnnouncePeerCount),")"]:(t="Announce error",n=[e.lastAnnounceResult?`${e.lastAnnounceResult} - `:"",r])}return{label:t,value:n.join("")}}static lastScrapeStatus(e){let t="Last Scrape",n="N/A";if(e.hasScraped){const r=_.timestamp(e.lastScrapeTime);e.lastScrapeSucceeded?n=r:(t="Scrape error",n=(e.lastScrapeResult?`${e.lastScrapeResult} - `:"")+r)}return{label:t,value:n}}static _getOrigin(e){try{const t="udp://";if(e.announce.startsWith(t)){const n="http://",r=e.announce.replace(t,n);return new URL(r).origin.replace(n,t)}return new URL(e.announce).origin}catch{return[e.sitename||e.host||e.announce]}}_updateTiers(){const e="N/A",{list:t}=this.elements.tiers,{torrents:n}=this,r=[];for(const t of n){const o=document.createElement("div");if(o.classList.add("inspector-group"),r.push(o),n.length>1){const e=document.createElement("div");e.classList.add("tier-list-torrent"),h(e,t.getName()),r.push(e)}for(const[n,o]of t.getTrackers().entries()){const t=P.getAnnounceState(o),s=P.lastAnnounceStatus(o),i=P.lastScrapeStatus(o),a=document.createElement("div");a.classList.add("tier-list-row",n%2?"odd":"even");let l=document.createElement("div");const c=P._getOrigin(o);l.classList.add("tier-list-tracker"),h(l,`${c} - tier ${o.tier+1}`),l.setAttribute("title",o.announce),a.append(l),l=document.createElement("div"),l.classList.add("tier-announce"),h(l,`${s.label}: ${s.value}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-seeders"),h(l,`Seeders: ${o.seederCount>-1?o.seederCount:e}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-state"),h(l,t),a.append(l),l=document.createElement("div"),l.classList.add("tier-leechers"),h(l,`Leechers: ${o.leecherCount>-1?o.leecherCount:e}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-scrape"),h(l,`${i.label}: ${i.value}`),a.append(l),l=document.createElement("div"),l.classList.add("tier-downloads"),h(l,`Downloads: ${o.downloadCount>-1?o.downloadCount:e}`),a.append(l),r.push(a)}}for(;t.firstChild;)t.firstChild.remove();t.append(...r)}_changeFileCommand(e,t){const{controller:n,file_torrent:r}=this,o=r.getId();n.changeFileCommand(o,e,t)}_onFileWantedToggled(e){const{indices:t,wanted:n}=e;this._changeFileCommand(t,n?"files-wanted":"files-unwanted")}_onFilePriorityToggled(e){const{indices:t,priority:n}=e;let r=null;switch(n.toString()){case"-1":r="priority-low";break;case"1":r="priority-high";break;default:r="priority-normal"}this._changeFileCommand(t,r)}_clearFileList(){const{list:e}=this.elements.files;for(;e.firstChild;)e.firstChild.remove();this.file_torrent=null,this.file_torrent_n=null,this.file_rows=null}static createFileTreeModel(e){const t=[],n={children:{},file_indices:[]};for(const[r,o]of e.getFiles().entries()){const{name:e}=o,s=e.split("/");let i=n;for(const[e,t]of s.entries()){let n=i.children[t];n||(i.children[t]=n={children:{},depth:e,file_indices:[],name:t,parent:i}),i=n}i.file_index=r,delete i.children,t.push(i)}for(const e of t){const{file_index:t}=e;let n=e;do{n.file_indices.push(t),n=n.parent}while(n)}return n}addNodeToView(e,t,n,r){const o=new S(e,n.depth,n.name,n.file_indices,r%2);o.addEventListener("wantedToggled",this._onFileWantedToggled.bind(this)),o.addEventListener("priorityToggled",this._onFilePriorityToggled.bind(this)),this.file_rows.push(o),t.append(o.getElement())}addSubtreeToView(e,t,n,r){if(n.parent&&this.addNodeToView(e,t,n,r++),n.children)for(const o of Object.values(n.children))r=this.addSubtreeToView(e,t,o,r);return r}_updateFiles(){const{list:e}=this.elements.files,{file_rows:t,file_torrent:n,file_torrent_n:r,torrents:o}=this;if(1!==o.length)return void this._clearFileList();const[s]=o,i=s.getFiles().length;if(s!==n||i!==r){this._clearFileList(),this.file_torrent=s,this.file_torrent_n=i,this.file_rows=[];const t=document.createDocumentFragment(),n=P.createFileTreeModel(s);this.addSubtreeToView(s,t,n,0),e.append(t)}else for(const e of t)e.refresh()}}let L="";class M extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();0!==e.length&&(L=L||e[0].getDownloadDir(),this.torrents=e,this.elements=M._create(),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.entry.value=L,document.body.append(this.elements.root),this.elements.entry.focus())}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const e=this.torrents.map((e=>e.getId())),t=this.elements.entry.value.trim();L=t,this.remote.moveTorrents(e,t),this.close()}static _create(){const e=a("move-dialog");e.root.setAttribute("aria-label","Move Torrent"),e.heading.textContent="Set Torrent Location",confirm.textContent="Apply";const t=document.createElement("label");t.setAttribute("for","torrent-path"),t.textContent="Location:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-path",e.entry=n,e.workarea.append(n),e}}class F extends EventTarget{constructor(e){super(),this.elements=F._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.options=e,document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}static _create(e){const{heading:t,message:n}=e,r=a("confirm-dialog");return r.confirm.remove(),delete r.confirm,r.heading.textContent=t,r.workarea.textContent=n,r}}class z extends EventTarget{constructor(e,t,n="",r=[]){super(),this.controller=e,this.remote=t,this.elements=this._create(n),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),document.body.append(this.elements.root),r.length>0&&(this.elements.file_input.files=r),this._updateFreeSpaceInAddDialog(),this.elements.url_input.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_updateFreeSpaceInAddDialog(){const e=this.elements.folder_input.value;this.remote.getFreeSpace(e,((e,t)=>{if(!this.closed){const e=t>0?`${_.size(t)} Free`:"";this.elements.freespace.textContent=e}}))}_onConfirm(){const{controller:e,elements:t,remote:n}=this,{file_input:r,folder_input:o,start_input:s,url_input:i}=t,a=!s.checked,l=o.value.trim();for(const t of r.files){const r=new FileReader;r.addEventListener("load",(r=>{const o=r.target.result,s="base64,",i=o.indexOf(s);if(-1===i)return;const c={arguments:{"download-dir":l,metainfo:o.slice(Math.max(0,i+7)),paused:a},method:"torrent-add"};n.sendRequest(c,(n=>{"success"!==n.result&&(alert(`Error adding "${t.name}": ${n.result}`),e.setCurrentPopup(new F({heading:`Error adding "${t.name}"`,message:n.result})))}))})),r.readAsDataURL(t)}let c=i.value.trim();if(c.length>0){/^[\da-f]{40}$/i.test(c)&&(c=`magnet:?xt=urn:btih:${c}`);const t={arguments:{"download-dir":l,filename:c,paused:a},method:"torrent-add"};n.sendRequest(t,(t=>{"success"!==t.result&&e.setCurrentPopup(new F({heading:`Error adding "${c}"`,message:t.result}))}))}this._onDismiss()}_create(e){const t=a(),{confirm:n,root:r,heading:o,workarea:s}=t;r.classList.add("open-torrent"),o.textContent="Add Torrents",n.textContent="Add";let i=l(),c=document.createElement("label");c.setAttribute("for",i),c.textContent="Please select torrent files to add:",s.append(c);let d=document.createElement("input");d.type="file",d.name="torrent-files[]",d.id=i,d.multiple="multiple",s.append(d),t.file_input=d,i=l(),c=document.createElement("label"),c.setAttribute("for",i),c.textContent="Or enter a URL:",s.append(c),d=document.createElement("input"),d.type="url",d.id=i,d.value=e,s.append(d),t.url_input=d,d.addEventListener("keyup",(({key:e})=>{"Enter"===e&&n.click()})),i=l(),c=document.createElement("label"),c.id="add-dialog-folder-label",c.for=i,c.textContent="Destination folder: ",s.append(c);const A=document.createElement("span");A.id="free-space-text",c.append(A),s.append(c),t.freespace=A,d=document.createElement("input"),d.type="text",d.id="add-dialog-folder-input",d.addEventListener("change",(()=>this._updateFreeSpaceInAddDialog())),d.value=this.controller.session_properties["download-dir"],s.append(d),t.folder_input=d;const p=document.createElement("div");s.append(p);const g=document.createElement("input");return g.type="checkbox",g.id="auto-start-check",g.checked=this.controller.shouldAddedTorrentsStart(),p.append(g),t.start_input=g,c=document.createElement("label"),c.id="auto-start-label",c.setAttribute("for",g.id),c.textContent="Start when added",p.append(c),t}}const $="speed-limit-down",N="speed-limit-down-enabled",j="queue-move-bottom",G="queue-move-down",R="queue-move-top",U="queue-move-up",H="../rpc",W="alt-speed-down",Z="alt-speed-enabled",O="alt-speed-up",J="speed-limit-up",q="speed-limit-up-enabled";class Q{constructor(e){this._controller=e,this._error="",this._session_id=""}sendRequest(e,t,n){const r=new Headers;r.append("cache-control","no-cache"),r.append("content-type","application/json"),r.append("pragma","no-cache"),this._session_id&&r.append(Q._SessionHeader,this._session_id);let o=null;fetch(H,{body:JSON.stringify(e),headers:r,method:"POST"}).then((e=>{if(o=e,409===e.status){const t=new Error(Q._SessionHeader);throw t.header=e.headers.get(Q._SessionHeader),t}return e.json()})).then((e=>{t&&t.call(n,e,o)})).catch((r=>{if(r.message===Q._SessionHeader)return this._session_id=r.header,void this.sendRequest(e,t,n);console.trace(r),this._controller.togglePeriodicSessionRefresh(!1),this._controller.setCurrentPopup(new F({heading:"Connection failed",message:"Could not connect to the server. You may need to reload the page to reconnect."}))}))}loadDaemonPrefs(e,t){this.sendRequest({method:"session-get"},e,t)}checkPort(e,t){this.sendRequest({method:"port-test"},e,t)}renameTorrent(e,t,n,r,o){const s={arguments:{ids:e,name:n,path:t},method:"torrent-rename-path"};this.sendRequest(s,r,o)}setLabels(e,t,n){const r={ids:e,labels:t};this.sendRequest({arguments:r,method:"torrent-set"},n)}loadDaemonStats(e,t){this.sendRequest({method:"session-stats"},e,t)}updateTorrents(e,t,n,r){const o={arguments:{fields:t,format:"table"},method:"torrent-get"};e&&(o.arguments.ids=e),this.sendRequest(o,(e=>{const t=e.arguments;n.call(r,t.torrents,t.removed)}))}getFreeSpace(e,t,n){const r={arguments:{path:e},method:"free-space"};this.sendRequest(r,(e=>{const r=e.arguments;t.call(n,r.path,r["size-bytes"])}))}changeFileCommand(e,t,n){const r={ids:[e]};r[n]=t,this.sendRequest({arguments:r,method:"torrent-set"},(()=>{this._controller.refreshTorrents([e])}))}sendTorrentSetRequests(e,t,n,r,o){n||(n={}),n.ids=t;const s={arguments:n,method:e};this.sendRequest(s,r,o)}sendTorrentActionRequests(e,t,n,r){this.sendTorrentSetRequests(e,t,null,n,r)}startTorrents(e,t,n,r){const o=t?"torrent-start-now":"torrent-start";this.sendTorrentActionRequests(o,e,n,r)}stopTorrents(e,t,n){this.sendTorrentActionRequests("torrent-stop",e,t,n)}moveTorrents(e,t,n,r){this.sendTorrentSetRequests("torrent-set-location",e,{location:t,move:!0},n,r)}removeTorrents(e,t){const n={arguments:{"delete-local-data":t,ids:[]},method:"torrent-remove"};if(e)for(let t=0,r=e.length;t{this._controller.refreshTorrents()}))}verifyTorrents(e,t,n){this.sendTorrentActionRequests("torrent-verify",e,t,n)}reannounceTorrents(e,t,n){this.sendTorrentActionRequests("torrent-reannounce",e,t,n)}addTorrentByUrl(e,t){/^[\da-f]{40}$/i.test(e)&&(e=`magnet:?xt=urn:btih:${e}`);const n={arguments:{filename:e,paused:t.paused},method:"torrent-add"};this.sendRequest(n,(()=>{this._controller.refreshTorrents()}))}savePrefs(e){const t={arguments:e,method:"session-set"};this.sendRequest(t,(()=>{this._controller.loadDaemonPrefs()}))}updateBlocklist(){this.sendRequest({method:"blocklist-update"},(()=>{this._controller.loadDaemonPrefs()}))}moveTorrentsToTop(e,t,n){this.sendTorrentActionRequests(R,e,t,n)}moveTorrentsToBottom(e,t,n){this.sendTorrentActionRequests(j,e,t,n)}moveTorrentsUp(e,t,n){this.sendTorrentActionRequests(U,e,t,n)}moveTorrentsDown(e,t,n){this.sendTorrentActionRequests(G,e,t,n)}}function Y(e,t){const n=document.createElement("fieldset");n.classList.add("section",e);const r=document.createElement("legend");return r.classList.add("title"),r.textContent=t,n.append(r),n}function V(e,t,n,r){const o=document.createElement("button");return o.textContent=t,o.addEventListener("click",r),e.append(o),o.dataset.action=n,o}Q._SessionHeader="X-Transmission-Session-Id";class X extends EventTarget{constructor(e,t,n,r){super(),this.action_listener=this._onActionChange.bind(this),this.action_manager=r,this.action_manager.addEventListener("change",this.action_listener),this.prefs_listener=this._onPrefsChange.bind(this),this.prefs=t,this.prefs.addEventListener("change",this.prefs_listener),this.closed=!1,this.remote=n,this.name="overflow-menu",this.session_listener=this._onSessionChange.bind(this),this.session_manager=e,this.session_manager.addEventListener("session-change",this.session_listener);const{session_properties:o}=e;Object.assign(this,this._create(o)),this.outside=new m(this.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this),this.show()}show(){document.body.append(this.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.session_listener),this.action_manager.removeEventListener("change",this.action_listener),this.prefs.removeEventListener("change",this.prefs_listener),this.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}_onSessionChange(e){const{alt_speed_check:t}=this.elements,{session_properties:n}=e;t.checked=n[Z]}_onPrefsChange(e){switch(e.key){case b.SortDirection:case b.SortMode:this.root.querySelector(`[data-pref="${e.key}"]`).value=e.value}}_onActionChange(e){const t=this.actions[e.action];t&&this._updateElement(t)}_updateElement(e){if(e.dataset.action){const{action:t}=e.dataset,n=this.action_manager.keyshortcuts(t);n&&e.setAttribute("aria-keyshortcuts",n),g(e,this.action_manager.isEnabled(t))}}_onClick(e){const{action:t,pref:n}=e.target.dataset;t?this.action_manager.click(t):n?this.prefs[n]=e.target.value:(console.log("unhandled"),console.log(e),console.trace())}_create(e){const t={},n={},r=this._onClick.bind(this),o=document.createElement("div");o.classList.add("overflow-menu","popup");let s=Y("display","Display");o.append(s);let i=document.createElement("div");i.id="display-options",s.append(i);let a=document.createElement("div");a.classList.add("table-row"),i.append(a);let l=document.createElement("label");l.id="display-sort-mode-label",l.textContent="Sort by",a.append(l);let c=document.createElement("select");c.id="display-sort-mode-select",c.dataset.pref=b.SortMode,a.append(c);const d=[[b.SortByActivity,"Activity"],[b.SortByAge,"Age"],[b.SortByName,"Name"],[b.SortByProgress,"Progress"],[b.SortByQueue,"Queue order"],[b.SortByRatio,"Ratio"],[b.SortBySize,"Size"],[b.SortByState,"State"]];for(const[e,t]of d){const n=document.createElement("option");n.value=e,n.textContent=t,c.append(n)}l.setAttribute("for",c.id),c.value=this.prefs.sort_mode,c.addEventListener("change",(e=>{this.prefs.sort_mode=e.target.value})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a);let A=document.createElement("input");A.id="display-sort-reverse-check",A.dataset.pref=b.SortDirection,A.type="checkbox",a.append(A),l=document.createElement("label"),l.id="display-sort-reverse-label",l.setAttribute("for",A.id),l.textContent="Reverse sort",a.append(l),A.checked=this.prefs.sort_direction!==b.SortAscending,A.addEventListener("input",(e=>{this.prefs.sort_direction=e.target.checked?b.SortDescending:b.SortAscending})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a);let p="toggle-compact-rows";A=document.createElement("input"),A.id="display-compact-check",A.dataset.action=p,A.type="checkbox",a.append(A),l=document.createElement("label"),l.id="display-compact-label",l.for=A.id,l.setAttribute("for",A.id),l.textContent=this.action_manager.text(p),A.checked=this.prefs.display_mode===b.DisplayCompact,a.append(l),A.addEventListener("input",(e=>{const{checked:t}=e.target;this.prefs.display_mode=t?b.DisplayCompact:b.DisplayFull})),a=document.createElement("div"),a.classList.add("table-row"),i.append(a),p="toggle-contrast",A=document.createElement("input"),A.id="contrast-more-check",A.dataset.action=p,A.type="checkbox",A.classList.add("switch"),l=document.createElement("label"),l.id="contrast-more-label",l.for=A.id,l.setAttribute("for",A.id),l.textContent=this.action_manager.text(p),A.checked=this.prefs.contrast_mode===b.ContrastMore,a.append(A),a.append(l),A.addEventListener("input",(e=>{const{checked:t}=e.target;this.prefs.contrast_mode=t?b.ContrastMore:b.ContrastLess})),a=document.createElement("div"),a.classList.add("table-row","display-fullscreen-row"),i.append(a),A=document.createElement("input"),A.id="display-fullscreen-check",A.type="checkbox";const g=()=>null!==document.fullscreenElement;A.checked=g(),A.addEventListener("input",(()=>{g()?document.exitFullscreen():document.body.requestFullscreen()})),document.addEventListener("fullscreenchange",(()=>{A.checked=g()})),a.append(A),l=document.createElement("label"),l.id="display-fullscreen-label",l.for=A.id,l.setAttribute("for",A.id),l.textContent="Fullscreen",a.append(l),s=Y("speed","Speed Limit"),o.append(s),i=document.createElement("div"),i.id="speed-options",s.append(i),a=document.createElement("div"),a.classList.add("speed-up"),i.append(a),l=document.createElement("label"),l.id="speed-up-label",l.textContent="Upload:",a.append(l);const u="Unlimited";c=document.createElement("select"),c.id="speed-up-select",a.append(c);const m=["50","100","250","500","1000","2500","5000","10000",u];for(const t of[...new Set(m).add(`${e[J]}`).values()].sort(((e,t)=>e-t))){const e=document.createElement("option");e.value=t,e.textContent=t===u?u:_.speed(t),c.append(e)}l.setAttribute("for",c.id),c.value=e[q]?`${e[J]}`:u,c.addEventListener("change",(e=>{const{value:t}=e.target;console.log(e),t===u?this.remote.savePrefs({[q]:!1}):this.remote.savePrefs({[q]:!0,[J]:Number.parseInt(t,10)})})),a=document.createElement("div"),a.classList.add("speed-down"),i.append(a),l=document.createElement("label"),l.id="speed-down-label",l.textContent="Download:",a.append(l),c=document.createElement("select"),c.id="speed-down-select",a.append(c);for(const t of[...new Set(m).add(`${e[$]}`).values()].sort(((e,t)=>e-t))){const e=document.createElement("option");e.value=t,e.textContent=t===u?u:_.speed(t),c.append(e)}l.setAttribute("for",c.id),c.value=e[N]?`${e[$]}`:u,c.addEventListener("change",(e=>{const{value:t}=e.target;console.log(e),t===u?this.remote.savePrefs({[N]:!1}):this.remote.savePrefs({[N]:!0,[$]:Number.parseInt(t,10)})})),a=document.createElement("div"),a.classList.add("alt-speed"),i.append(a),A=document.createElement("input"),A.id="alt-speed-check",A.type="checkbox",A.checked=e[Z],A.addEventListener("change",(e=>{this.remote.savePrefs({[Z]:e.target.checked})})),a.append(A),n.alt_speed_check=A,l=document.createElement("label"),l.id="alt-speed-image",l.setAttribute("for",A.id),a.append(l),l=document.createElement("label"),l.id="alt-speed-label",l.setAttribute("for",A.id),l.textContent="Use Temp limits",a.append(l),l=document.createElement("label"),l.id="alt-speed-values-label",l.setAttribute("for",A.id);const h=_.speed(e[O]),C=_.speed(e[W]);l.textContent=`(${h} up, ${C} down)`,a.append(l),s=Y("actions","Actions"),o.append(s);for(const e of["show-preferences-dialog","pause-all-torrents","start-all-torrents"]){const n=this.action_manager.text(e);t[e]=V(s,n,e,r)}s=Y("info","Info"),o.append(s),i=document.createElement("div"),s.append(i);for(const e of["show-about-dialog","show-shortcuts-dialog","show-statistics-dialog"]){const n=this.action_manager.text(e);t[e]=V(i,n,e,r)}s=Y("links","Links"),o.append(s),i=document.createElement("ul"),s.append(i);let f=document.createElement("a");f.href="https://transmissionbt.com/",f.tabindex="0",f.textContent="Homepage";let v=document.createElement("li");return v.append(f),i.append(v),f=document.createElement("a"),f.href="https://transmissionbt.com/donate/",f.tabindex="0",f.textContent="Tip Jar",v=document.createElement("li"),v.append(f),i.append(v),f=document.createElement("a"),f.href="https://github.com/transmission/transmission/",f.tabindex="0",f.textContent="Source Code",v=document.createElement("li"),v.append(f),i.append(v),this._updateElement=this._updateElement.bind(this),{actions:t,elements:n,root:o}}}class K extends EventTarget{static _initTimeDropDown(e){for(let t=0;t<96;++t){const n=15*t,r=`${Number.parseInt(t/4,10)}:${t%4*15||"00"}`;e.options[t]=new Option(r,n)}}static _initDayDropDown(e){const t=[["Everyday","127"],["Weekdays","62"],["Weekends","65"],["Sunday","1"],["Monday","2"],["Tuesday","4"],["Wednesday","8"],["Thursday","16"],["Friday","32"],["Saturday","64"]];for(let n=0;t[n];++n){const[r,o]=t[n];e.options[n]=new Option(r,o)}}_checkPort(){const e=this.elements.network.port_status_label;delete e.dataset.open,h(e,"Checking..."),this.remote.checkPort(this._onPortChecked,this)}_onPortChecked(e){const t=this.elements.network.port_status_label,n=e.arguments["port-is-open"];t.dataset.open=n,h(t,n?"Open":"Closed")}_setBlocklistButtonEnabled(e){const t=this.elements.peers.blocklist_update_button;g(t,e),t.value=e?"Update":"Updating..."}static _getValue(e){if("TEXTAREA"===e.tagName)return e.value;switch(e.type){case"checkbox":case"radio":return e.checked;case"number":case"select-one":case"text":case"url":{const t=e.value;return Number.parseInt(t,10).toString()===t?Number.parseInt(t,10):Number.parseFloat(t).toString()===t?Number.parseFloat(t):t}default:return null}}_onControlChanged(e){const{key:t}=e.target.dataset;this.remote.savePrefs({[t]:K._getValue(e.target)}),"peer-port"!==t&&"port-forwarding-enabled"!==t||this._checkPort()}_onDialogClosed(){this.dispatchEvent(new Event("closed"))}_update(e){if(e){this._setBlocklistButtonEnabled(!0);for(const[t,n]of Object.entries(e))for(const e of this.elements.root.querySelectorAll(`[data-key="${t}"]`))if("blocklist-size"===t){const t=_.number(n);e.innerHTML=`Blocklist has ${t} rules`,h(this.elements.peers.blocklist_update_button,"Update")}else switch(e.type){case"checkbox":case"radio":e.checked!==n&&(e.checked=n,e.dispatchEvent(new Event("change")));break;case"text":case"textarea":case"url":case"email":case"number":case"search":e.value!=n&&e!==document.activeElement&&(e.value=n,e.dispatchEvent(new Event("change")));break;case"select-one":e.value!==n&&(e.value=n,e.dispatchEvent(new Event("change")));break;default:console.log(e.type)}}}shouldAddedTorrentsStart(){return this.data.elements.root.find("#start-added-torrents")[0].checked}static _createCheckAndLabel(e,t){const n=document.createElement("div");n.id=e;const r=document.createElement("input");r.id=l(),r.type="checkbox",n.append(r);const o=document.createElement("label");return o.textContent=t,o.setAttribute("for",r.id),n.append(o),{check:r,label:o,root:n}}static _enableIfChecked(e,t){const n=()=>{"INPUT"===e.tagName?g(e,t.checked):e.classList.toggle("disabled",!t.checked)};t.addEventListener("change",n),n()}static _getProtocolHandlerRegistered(){return"true"===localStorage.getItem("protocol-handler-registered")}static _updateProtocolHandlerButton(e){e.removeAttribute("disabled"),e.removeAttribute("title"),K._getProtocolHandlerRegistered()?(e.textContent="Remove Browser Handler","unregisterProtocolHandler"in navigator||e.setAttribute("title","Your browser does not support removing protocol handlers. This button only allows you to re-register a handler.")):(e.textContent="Add Browser Handler",e.removeAttribute("title"),"registerProtocolHandler"in navigator||(e.setAttribute("disabled",!0),e.setAttribute("title","Your browser does not support protocol handlers")))}static _toggleProtocolHandler(e){const t=new URL(window.location.href);t.search="addtorrent=%s",this._getProtocolHandlerRegistered()?(navigator.unregisterProtocolHandler?.("magnet",t.toString()),localStorage.removeItem("protocol-handler-registered"),K._updateProtocolHandlerButton(e)):(navigator.registerProtocolHandler("magnet",t.toString(),"Transmission Web"),localStorage.setItem("protocol-handler-registered","true"),K._updateProtocolHandlerButton(e))}static _createTorrentsPage(){const e=document.createElement("div");e.classList.add("prefs-torrents-page");let t=document.createElement("div");t.textContent="Downloading",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Download to:",e.append(t);let n=document.createElement("input");n.type="text",n.id=l(),n.dataset.key="download-dir",t.setAttribute("for",n.id),e.append(n);const r=n;let o=K._createCheckAndLabel("incomplete-dir-div","Use temporary folder:");o.check.title="Separate folder to temporarily store downloads until they are complete.",o.check.dataset.key="incomplete-dir-enabled",o.label.title=o.check.title,e.append(o.root);const s=o.check;n=document.createElement("input"),n.type="text",n.dataset.key="incomplete-dir",e.append(n),K._enableIfChecked(n,o.check);const i=n;o=K._createCheckAndLabel("autostart-div","Start when added"),o.check.dataset.key="start-added-torrents",e.append(o.root);const a=o.check;o=K._createCheckAndLabel("suffix-div",'Append "part" to incomplete files\' names'),o.check.dataset.key="rename-partial-files",e.append(o.root);const c=o.check;o=K._createCheckAndLabel("download-queue-div","Download queue size:"),o.check.dataset.key="download-queue-enabled",e.append(o.root);const d=o.check;n=document.createElement("input"),n.type="number",n.dataset.key="download-queue-size",e.append(n),K._enableIfChecked(n,o.check);const A=n;t=document.createElement("div"),t.textContent="Seeding",t.classList.add("section-label"),e.append(t),o=K._createCheckAndLabel("stop-ratio-div","Stop seeding at ratio:"),o.check.dataset.key="seedRatioLimited",e.append(o.root);const p=o.check;n=document.createElement("input"),n.type="number",n.min="0.1",n.step="any",n.dataset.key="seedRatioLimit",e.append(n),K._enableIfChecked(n,o.check);const g=n;o=K._createCheckAndLabel("stop-idle-div","Stop seeding if idle for N mins:"),o.check.dataset.key="idle-seeding-limit-enabled",e.append(o.root);const u=o.check;n=document.createElement("input"),n.type="number",n.min="0.1",n.step="any",n.dataset.key="idle-seeding-limit",e.append(n),K._enableIfChecked(n,o.check);const m=n;t=document.createElement("div"),t.textContent="Magnet Protocol Handler",t.classList.add("section-label"),e.append(t);const h=document.createElement("button");h.classList.add("register-handler-button"),K._updateProtocolHandlerButton(h),e.append(h);return{autostart_check:a,download_dir:r,download_queue_check:d,download_queue_input:A,incomplete_dir_check:s,incomplete_dir_input:i,register_handler_button:h,root:e,stop_idle_check:u,stop_idle_input:m,stop_ratio_check:p,stop_ratio_input:g,suffix_check:c}}static _createSpeedPage(){const e=document.createElement("div");e.classList.add("prefs-speed-page");let t=document.createElement("div");t.textContent="Speed Limits",t.classList.add("section-label"),e.append(t);let n=K._createCheckAndLabel("upload-speed-div","Upload (kB/s):");n.check.dataset.key="speed-limit-up-enabled",e.append(n.root);const r=n.check;let o=document.createElement("input");o.type="number",o.dataset.key="speed-limit-up",e.append(o),K._enableIfChecked(o,n.check);const s=o;n=K._createCheckAndLabel("download-speed-div","Download (kB/s):"),n.check.dataset.key="speed-limit-down-enabled",e.append(n.root);const i=n.check;o=document.createElement("input"),o.type="number",o.dataset.key="speed-limit-down",e.append(o),K._enableIfChecked(o,n.check);const a=o;t=document.createElement("div"),t.textContent="Alternative Speed Limits",t.classList.add("section-label","alt-speed-section-label"),e.append(t),t=document.createElement("div"),t.textContent="Override normal speed limits manually or at scheduled times",t.classList.add("alt-speed-label"),e.append(t),t=document.createElement("label"),t.textContent="Upload (kB/s):",e.append(t),o=document.createElement("input"),o.type="number",o.dataset.key="alt-speed-up",o.id=l(),t.setAttribute("for",o.id),e.append(o);const c=o;t=document.createElement("label"),t.textContent="Download (kB/s):",e.append(t),o=document.createElement("input"),o.type="number",o.dataset.key="alt-speed-down",o.id=l(),t.setAttribute("for",o.id),e.append(o);const d=o;n=K._createCheckAndLabel("alt-times-div","Scheduled times"),n.check.dataset.key="alt-speed-time-enabled",e.append(n.root);const A=n.check;t=document.createElement("label"),t.textContent="From:",K._enableIfChecked(t,n.check),e.append(t);let p=document.createElement("select");p.id=l(),p.dataset.key="alt-speed-time-begin",K._initTimeDropDown(p),t.setAttribute("for",p.id),e.append(p),K._enableIfChecked(p,n.check);const g=p;t=document.createElement("label"),t.textContent="To:",K._enableIfChecked(t,n.check),e.append(t),p=document.createElement("select"),p.id=l(),p.dataset.key="alt-speed-time-end",K._initTimeDropDown(p),t.setAttribute("for",p.id),e.append(p),K._enableIfChecked(p,n.check);const u=p;t=document.createElement("label"),t.textContent="On days:",K._enableIfChecked(t,n.check),e.append(t),p=document.createElement("select"),p.id=l(),p.dataset.key="alt-speed-time-day",K._initDayDropDown(p),t.setAttribute("for",p.id),e.append(p),K._enableIfChecked(p,n.check);return{alt_days_select:p,alt_download_speed_input:d,alt_from_select:g,alt_times_check:A,alt_to_select:u,alt_upload_speed_input:c,download_speed_check:i,download_speed_input:a,root:e,upload_speed_check:r,upload_speed_input:s}}static _createPeersPage(){const e=document.createElement("div");e.classList.add("prefs-peers-page");let t=document.createElement("div");t.textContent="Connections",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Max peers per torrent:",e.append(t);let n=document.createElement("input");n.type="number",n.dataset.key="peer-limit-per-torrent",n.id=l(),t.setAttribute("for",n.id),e.append(n);const r=n;t=document.createElement("label"),t.textContent="Max peers overall:",e.append(t),n=document.createElement("input"),n.type="number",n.dataset.key="peer-limit-global",n.id=l(),t.setAttribute("for",n.id),e.append(n);const o=n;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Encryption mode:",e.append(t);const s=document.createElement("select");s.id=l(),s.dataset.key="encryption",s.options[0]=new Option("Prefer encryption","preferred"),s.options[1]=new Option("Allow encryption","tolerated"),s.options[2]=new Option("Require encryption","required"),e.append(s);const i=s;let a=K._createCheckAndLabel("use-pex-div","Use PEX to find more peers");a.check.title="PEX is a tool for exchanging peer lists with the peers you're connected to.",a.check.dataset.key="pex-enabled",a.label.title=a.check.title,e.append(a.root);const c=a.check;a=K._createCheckAndLabel("use-dht-div","Use DHT to find more peers"),a.check.title="DHT is a tool for finding peers without a tracker.",a.check.dataset.key="dht-enabled",a.label.title=a.check.title,e.append(a.root);const d=a.check;a=K._createCheckAndLabel("use-lpd-div","Use LPD to find more peers"),a.check.title="LPD is a tool for finding peers on your local network.",a.check.dataset.key="lpd-enabled",a.label.title=a.check.title,e.append(a.root);const A=a.check;t=document.createElement("div"),t.textContent="Blocklist",t.classList.add("section-label"),e.append(t),a=K._createCheckAndLabel("blocklist-enabled-div","Enable blocklist:"),a.check.dataset.key="blocklist-enabled",e.append(a.root);const p=a.check;n=document.createElement("input"),n.type="url",n.value="http://www.example.com/blocklist",n.dataset.key="blocklist-url",e.append(n),K._enableIfChecked(n,a.check);const g=n;t=document.createElement("label"),t.textContent="Blocklist has {n} rules",t.dataset.key="blocklist-size",t.classList.add("blocklist-size-label"),K._enableIfChecked(t,a.check),e.append(t);const u=document.createElement("button");u.classList.add("blocklist-update-button"),u.textContent="Update",e.append(u),K._enableIfChecked(u,a.check);return{blocklist_enabled_check:p,blocklist_update_button:u,blocklist_url_input:g,dht_check:d,encryption_select:i,lpd_check:A,max_peers_overall_input:o,max_peers_per_torrent_input:r,pex_check:c,root:e}}static _createNetworkPage(){const e=document.createElement("div");e.classList.add("prefs-network-page");let t=document.createElement("div");t.textContent="Listening Port",t.classList.add("section-label"),e.append(t),t=document.createElement("label"),t.textContent="Peer listening port:",e.append(t);const n=document.createElement("input");n.type="number",n.dataset.key="peer-port",n.id=l(),t.setAttribute("for",n.id),e.append(n);const r=n,o=document.createElement("div");o.classList.add("port-status"),t=document.createElement("label"),t.textContent="Port is",o.append(t);const s=document.createElement("label");s.textContent="?",s.classList.add("port-status-label"),o.append(s),e.append(o);let i=K._createCheckAndLabel("randomize-port","Randomize port on launch");i.check.dataset.key="peer-port-random-on-start",e.append(i.root);const a=i.check;i=K._createCheckAndLabel("port-forwarding","Use port forwarding from my router"),i.check.dataset.key="port-forwarding-enabled",e.append(i.root);const c=i.check;t=document.createElement("div"),t.textContent="Options",t.classList.add("section-label"),e.append(t),i=K._createCheckAndLabel("utp-enabled","Enable uTP for peer communication"),i.check.dataset.key="utp-enabled",e.append(i.root);const d=i.check;t=document.createElement("div"),t.textContent="Default Public Trackers",t.classList.add("section-label"),e.append(t);const A=["Trackers to use on all public torrents.","To add a backup URL, add it on the next line after a primary URL.","To add a new primary URL, add it after a blank line."];for(const n of A)t=document.createElement("label"),t.classList.add("default-trackers-label"),t.textContent=n,t.setAttribute("for","default-trackers"),e.append(t);const p=document.createElement("textarea");p.dataset.key="default-trackers",p.id="default-trackers",e.append(p);return{default_trackers_textarea:p,port_forwarding_check:c,port_input:r,port_status_label:s,random_port_check:a,root:e,utp_check:d}}static _create(){const e={network:K._createNetworkPage(),peers:K._createPeersPage(),speed:K._createSpeedPage(),torrents:K._createTorrentsPage()};return{...i("prefs-dialog",[["prefs-tab-torrent",e.torrents.root,"Torrents"],["prefs-tab-speed",e.speed.root,"Speed"],["prefs-tab-peers",e.peers.root,"Peers"],["prefs-tab-network",e.network.root,"Network"]]),...e}}constructor(e,t){super(),this.closed=!1,this.session_manager=e,this.remote=t,this.update_soon=()=>this._update(this.session_manager.session_properties),this.elements=K._create(),this.elements.peers.blocklist_update_button.addEventListener("click",(e=>{h(e.target,"Updating blocklist..."),this.remote.updateBlocklist(),this._setBlocklistButtonEnabled(!1)})),this.elements.torrents.register_handler_button.addEventListener("click",(e=>{K._toggleProtocolHandler(e.currentTarget)})),this.outside=new m(this.elements.root),this.outside.addEventListener("click",(()=>this.close())),Object.seal(this);const n=this._onControlChanged.bind(this),r=e=>{for(const t of Object.values(e))if("INPUT"===t.tagName)switch(t.type){case"checkbox":case"radio":case"number":case"text":case"url":t.addEventListener("change",n);break;default:console.trace(`unhandled input: ${t.type}`)}else"TEXTAREA"!==t.tagName&&"SELECT"!==t.tagName||t.addEventListener("change",n)};r(this.elements.network),r(this.elements.peers),r(this.elements.speed),r(this.elements.torrents),this.session_manager.addEventListener("session-change",this.update_soon),this.update_soon(),document.body.append(this.elements.root)}close(){if(!this.closed){this.outside.stop(),this.session_manager.removeEventListener("session-change",this.update_soon),this.elements.root.remove(),dispatchEvent(new Event("close"));for(const e of Object.keys(this))this[e]=null;this.closed=!0}}}class ee extends EventTarget{constructor(e){super(),this.options=e,this.elements=ee._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){this.elements.root.remove(),this.dispatchEvent(new Event("close"));for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_onConfirm(){const{remote:e,torrents:t,trash:n}=this.options;t.length>0&&e.removeTorrents(t,n),this.close()}static _create(e){const{trash:t}=e,{heading:n,message:r}=ee._createMessage(e),o=a("remove-dialog");return o.heading.textContent=n,o.message.textContent=r,o.confirm.textContent=t?"Trash":"Remove",o}static _createMessage(e){let t=null,n=null;const{torrents:r,trash:o}=e,[s]=r;return o&&1===r.length?(t=`Remove ${s.getName()} and delete data?`,n="All data downloaded for this torrent will be deleted. Are you sure you want to remove it?"):o?(t=`Remove ${r.length} transfers and delete data?`,n="All data downloaded for these torrents will be deleted. Are you sure you want to remove them?"):1===r.length?(t=`Remove ${s.getName()}?`,n="Once removed, continuing the transfer will require the torrent file. Are you sure you want to remove it?"):(t=`Remove ${r.length} transfers?`,n="Once removed, continuing the transfers will require the torrent files. Are you sure you want to remove them?"),{heading:t,message:n}}}class te extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();1===e.length?(this.torrents=e,this.elements=te._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.entry.value=e[0].getName(),document.body.append(this.elements.root),this.elements.entry.focus()):console.trace()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.controller,delete this.remote,delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const[e]=this.torrents,t=e.getName(),n=this.elements.entry.value;this.remote.renameTorrent([e.getId()],t,n,(t=>{"success"===t.result&&e.refresh(t.arguments)})),this.close()}static _create(){const e=a("rename-dialog");e.root.setAttribute("aria-label","Rename Torrent"),e.heading.textContent="Enter new name:",e.confirm.textContent="Rename";const t=document.createElement("label");t.setAttribute("for","torrent-rename-name"),t.textContent="Enter new name:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-rename-name",e.entry=n,e.workarea.append(n),e}}class ne extends EventTarget{constructor(e,t){super(),this.controller=e,this.remote=t,this.elements={},this.torrents=[],this.show()}show(){const e=this.controller.getSelectedTorrents();if(0===e.length)return void console.error("At least one selected torrent expected.");const[t]=e;this.torrents=e,this.elements=ne._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),this.elements.confirm.addEventListener("click",(()=>this._onConfirm())),this.elements.entry.value=t.getLabels().join(", "),document.body.append(this.elements.root),this.elements.entry.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements,delete this.torrents}_onDismiss(){this.close()}_onConfirm(){const{torrents:e}=this,{remote:t}=this,n=e.map((e=>e.getId())),{elements:r}=this,{entry:o}=r,{value:s}=o,i=s.split(/ *, */).filter((e=>e.length>0));t.setLabels(n,i,(t=>{if("success"===t.result)for(const t of e)t.refresh({labels:i})})),this.close()}static _create(){const e=a("labels-dialog");e.root.setAttribute("aria-label","Edit Labels"),e.heading.textContent="Edit Labels:",e.confirm.textContent="Save";const t=document.createElement("label");t.setAttribute("for","torrent-labels"),t.textContent="Labels:",e.workarea.append(t);const n=document.createElement("input");return n.setAttribute("type","text"),n.id="torrent-labels",e.entry=n,e.workarea.append(n),e}}class re extends EventTarget{constructor(e){super(),this.elements=re._create(e),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){this.elements.root.remove(),this.dispatchEvent(new Event("close")),delete this.elements}_onDismiss(){this.close()}static _create(e){const t=a("shortcuts-dialog");t.root.setAttribute("aria-label","Keyboard Shortcuts");const n=document.createElement("table"),r=document.createElement("thead");n.append(r);let o=document.createElement("tr");r.append(o);let s=document.createElement("th");s.textContent="Key",o.append(s),s=document.createElement("th"),s.textContent="Action",o.append(s);const i=document.createElement("tbody");n.append(i);const l={};for(const[t,n]of e.allShortcuts().entries()){const e=t.split("+");l[[e.pop(),...e].join("+")]={name:n,shortcut:t}}for(const[,t]of Object.entries(l).sort()){const{name:n,shortcut:r}=t;o=document.createElement("tr"),i.append(o);let s=document.createElement("td");s.textContent=r.replaceAll("+"," + "),o.append(s),s=document.createElement("td"),s.textContent=e.text(n),o.append(s)}return t.heading.textContent="Transmission",t.dismiss.textContent="Close",t.heading.textContent="Keyboard shortcuts",t.message.append(n),t.confirm.remove(),delete t.confirm,t}}class oe extends EventTarget{constructor(e){super(),this.remote=e;const t=()=>this.remote.loadDaemonStats((e=>this._update(e.arguments)));this.interval=setInterval(t,5e3),t(),this.elements=oe._create(),this.elements.dismiss.addEventListener("click",(()=>this._onDismiss())),document.body.append(this.elements.root),this.elements.dismiss.focus()}close(){if(!this.closed){clearInterval(this.interval),this.elements.root.remove();for(const e of Object.keys(this))delete this[e];this.closed=!0}}_onDismiss(){this.close()}_update(e){console.log(e);const t=_;let n=e["current-stats"],r=o.ratio(n.uploadedBytes,n.downloadedBytes);h(this.elements.session.up,t.size(n.uploadedBytes)),h(this.elements.session.down,t.size(n.downloadedBytes)),h(this.elements.session.ratio,t.ratioString(r)),h(this.elements.session.time,t.timeInterval(n.secondsActive)),n=e["cumulative-stats"],r=o.ratio(n.uploadedBytes,n.downloadedBytes),h(this.elements.total.up,t.size(n.uploadedBytes)),h(this.elements.total.down,t.size(n.downloadedBytes)),h(this.elements.total.ratio,t.ratioString(r)),h(this.elements.total.time,t.timeInterval(n.secondsActive))}static _create(){const e=a("statistics-dialog"),{confirm:t,dismiss:n,heading:r,root:o,workarea:s}=e;t.remove(),n.textContent="Close",delete e.confirm;const i="Statistics";o.setAttribute("aria-label",i),r.textContent=i;const l=["Uploaded:","Downloaded:","Ratio:","Running time:"];let d=c("Current session",l);const[A,p,g,u]=d.children,m=e.session={};m.up=A,m.down=p,m.ratio=g,m.time=u,s.append(d.root),d=c("Total",l);const[h,C,b,f]=d.children,v=e.total={};return v.up=h,v.down=C,v.ratio=b,v.time=f,s.append(d.root),e}}const se={formatDL:e=>`▼ ${_.speedBps(e.getDownloadSpeed())}`,formatETA:e=>{const t=e.getETA();return t<0||t>=3596400?"":`ETA: ${_.timeInterval(t)}`},formatLabels:e=>e.getLabels().length>0?`🏷 ${e.getLabels().join(", ")}`:"",formatUL:e=>`▲ ${_.speedBps(e.getUploadSpeed())}`,getProgressInfo:(e,t)=>{const n=t.getStatus(),r=["torrent-progress-bar"];let o=null;if(n===D._StatusStopped&&r.push("paused"),t.needsMetaData())r.push("magnet"),o=Math.round(100*t.getMetadataPercentComplete());else if(n===D._StatusCheck)r.push("verify"),o=Math.round(100*t.getRecheckProgress());else if(t.getLeftUntilDone()>0)r.push("leech"),o=Math.round(100*t.getPercentDone());else{r.push("seed");const n=t.seedRatioLimit(e);o=n>0?100*t.getUploadRatio()/n:100}return t.isQueued()&&r.push("queued"),{classList:r,percent:o}},renderProgressbar:(e,t,n)=>{const r=se.getProgressInfo(e,t);n.className=r.classList.join(" "),n.style.setProperty("--progress",`${r.percent.toFixed(2)}%`)}};class ie{static getPeerDetails(e){const t=_,n=e.getErrorMessage();if(n)return n;if(e.isDownloading()){const n=e.getPeersConnected(),r=e.getWebseedsSendingToUs();return r&&n?["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"and",t.countString("web seed","web seeds",r),"–",se.formatDL(e),se.formatUL(e)].join(" "):r?["Downloading from",t.countString("web seed","web seeds",r),"–",se.formatDL(e),se.formatUL(e)].join(" "):["Downloading from",e.getPeersSendingToUs(),"of",t.countString("peer","peers",n),"–",se.formatDL(e),se.formatUL(e)].join(" ")}return e.isSeeding()?["Seeding to",e.getPeersGettingFromUs(),"of",t.countString("peer","peers",e.getPeersConnected()),"-",se.formatUL(e)].join(" "):e.isChecking()?["Verifying local data (",_.percentString(100*e.getRecheckProgress()),"% tested)"].join(""):e.getStateString()}static getProgressDetails(e,t){if(t.needsMetaData()){let e="retrieving";t.isStopped()&&(e="needs");const n=100*t.getMetadataPercentComplete();return[`Magnetized transfer - ${e} metadata (`,_.percentString(n),"%)"].join("")}const n=t.getSizeWhenDone(),r=t.getTotalSize(),o=t.isDone()||t.isSeeding(),s=[];if(o?(r===n?s.push(_.size(r)):s.push(_.size(n)," of ",_.size(t.getTotalSize())," (",t.getPercentDoneStr(),"%)"),s.push(", uploaded ",_.size(t.getUploadedEver())," (Ratio ",_.ratioString(t.getUploadRatio()),")")):s.push(_.size(n-t.getLeftUntilDone())," of ",_.size(n)," (",t.getPercentDoneStr(),"%)"),!t.isStopped()&&(!o||t.seedRatioLimit(e)>0)){s.push(" - ");const e=t.getETA();e<0||e>=3596400?s.push("remaining time unknown"):s.push(_.timeInterval(t.getETA())," remaining")}return s.join("")}render(e,t,n){const r=t.isStopped();let o=n._name_container;h(o,t.getName()),o.classList.toggle("paused",r),o=n._labels_container,h(o,se.formatLabels(t)),se.renderProgressbar(e,t,n._progressbar),n._progressbar.classList.add("full");const s=t.getError()!==D._ErrNone;o=n._peer_details_container,o.classList.toggle("error",s),h(o,ie.getPeerDetails(t)),o=n._progress_details_container,h(o,ie.getProgressDetails(e,t)),o=n._toggle_running_button,o.alt=r?"Resume":"Pause",o.dataset.action=r?"resume":"pause"}createRow(e){const t=document.createElement("li");t.className="torrent";const n=document.createElement("div");n.classList.add("icon"),n.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),n.dataset.iconMultifile=e.getFileCount()>1?"true":"false";const r=document.createElement("div");r.className="torrent-name";const o=document.createElement("div");o.className="torrent-labels";const s=document.createElement("div");s.className="torrent-peer-details";const i=document.createElement("div");i.classList.add("torrent-progress");const a=document.createElement("div");a.classList.add("torrent-progress-bar","full"),i.append(a);const l=document.createElement("a");l.className="torrent-pauseresume-button",i.append(l);const c=document.createElement("div");return c.className="torrent-progress-details",t.append(n),t.append(r),t.append(o),t.append(s),t.append(i),t.append(c),t._icon=n,t._name_container=r,t._labels_container=o,t._peer_details_container=s,t._progress_details_container=c,t._progressbar=a,t._toggle_running_button=l,t}}class ae{static getPeerDetails(e){const t=e.getErrorMessage();if(t)return t;if(e.isDownloading()){const t=e.getDownloadSpeed()>0,n=e.getUploadSpeed()>0;if(!n&&!t)return"Idle";const r=[`${se.formatETA(e)} `];return t&&r.push(se.formatDL(e)),n&&r.push(se.formatUL(e)),r.join(" ")}return e.isSeeding()?`Ratio: ${_.ratioString(e.getUploadRatio())}, ${se.formatUL(e)}`:e.getStateString()}render(e,t,n){let r=n._name_container;r.classList.toggle("paused",t.isStopped()),h(r,t.getName()),r=n._labels_container,h(r,se.formatLabels(t));const o=t.getError()!==D._ErrNone;r=n._details_container,r.classList.toggle("error",o),h(r,ae.getPeerDetails(t)),se.renderProgressbar(e,t,n._progressbar),n._progressbar.classList.add("compact")}createRow(e){const t=document.createElement("div");t.classList.add("torrent-progress-bar","compact");const n=document.createElement("div");n.classList.add("icon"),n.dataset.iconMimeType=e.getPrimaryMimeType().split("/",1).pop(),n.dataset.iconMultifile=e.getFileCount()>1?"true":"false";const r=document.createElement("div");r.className="torrent-peer-details compact";const o=document.createElement("div");o.className="torrent-labels compact";const s=document.createElement("div");s.className="torrent-name compact";const i=document.createElement("li");return i.append(t),i.append(r),i.append(o),i.append(s),i.append(n),i.className="torrent compact",i._progressbar=t,i._details_container=r,i._labels_container=o,i._name_container=s,i}}class le{constructor(e,t,n){this._view=e,this._torrent=n,this._element=e.createRow(n);const r=()=>this.render(t);this._torrent.addEventListener("dataChanged",r),r()}getElement(){return this._element}render(e){const t=this.getTorrent();t&&this._view.render(e,t,this.getElement())}isSelected(){return this.getElement().classList.contains("selected")}getTorrent(){return this._torrent}getTorrentId(){return this.getTorrent().getId()}}class ce extends EventTarget{constructor(e,t,n){super(),this.action_manager=e,this.notifications=t,this.prefs=n,this.remote=new Q(this),this.addEventListener("torrent-selection-changed",(e=>this.action_manager.update(e))),this.filterText="",this._torrents={},this._rows=[],this.dirtyTorrents=new Set,this.refilterSoon=d((()=>this._refilter(!1))),this.refilterAllSoon=d((()=>this._refilter(!0))),this.boundPopupCloseListener=this.popupCloseListener.bind(this),this.dispatchSelectionChangedSoon=d((()=>this._dispatchSelectionChanged()),200);for(const e of document.querySelectorAll("button[data-action]")){const{action:t}=e.dataset;g(e,this.action_manager.isEnabled(t)),e.addEventListener("click",(()=>{this.action_manager.click(t)}))}document.querySelector("#filter-tracker").addEventListener("change",(e=>{this.setFilterTracker("all"===e.target.value?null:e.target.value)})),this.action_manager.addEventListener("change",(e=>{for(const t of document.querySelectorAll(`[data-action="${e.action}"]`))g(t,e.enabled)})),this.action_manager.addEventListener("click",(e=>{switch(e.action){case"deselect-all":this._deselectAll();break;case"move-bottom":this._moveBottom();break;case"move-down":this._moveDown();break;case"move-top":this._moveTop();break;case"move-up":this._moveUp();break;case"open-torrent":this.setCurrentPopup(new z(this,this.remote));break;case"pause-all-torrents":this._stopTorrents(this._getAllTorrents());break;case"pause-selected-torrents":this._stopTorrents(this.getSelectedTorrents());break;case"reannounce-selected-torrents":this._reannounceTorrents(this.getSelectedTorrents());break;case"remove-selected-torrents":this._removeSelectedTorrents(!1);break;case"resume-selected-torrents":this._startSelectedTorrents(!1);break;case"resume-selected-torrents-now":this._startSelectedTorrents(!0);break;case"select-all":this._selectAll();break;case"show-about-dialog":this.setCurrentPopup(new f(this.version_info));break;case"show-inspector":this.setCurrentPopup(new P(this));break;case"show-move-dialog":this.setCurrentPopup(new M(this,this.remote));break;case"show-overflow-menu":this.popup instanceof X?this.setCurrentPopup(null):this.setCurrentPopup(new X(this,this.prefs,this.remote,this.action_manager));break;case"show-preferences-dialog":this.setCurrentPopup(new K(this,this.remote));break;case"show-shortcuts-dialog":this.setCurrentPopup(new re(this.action_manager));break;case"show-statistics-dialog":this.setCurrentPopup(new oe(this.remote));break;case"show-rename-dialog":this.setCurrentPopup(new te(this,this.remote));break;case"show-labels-dialog":this.setCurrentPopup(new ne(this,this.remote));break;case"start-all-torrents":this._startTorrents(this._getAllTorrents());break;case"toggle-compact-rows":this.prefs.display_mode=this.prefs.display_mode===b.DisplayCompact?b.DisplayFull:b.DisplayCompact;break;case"trash-selected-torrents":this._removeSelectedTorrents(!0);break;case"verify-selected-torrents":this._verifyTorrents(this.getSelectedTorrents());break;default:console.warn(`unhandled action: ${e.action}`)}}));let r=document.querySelector("#filter-mode");r.value=this.prefs.filter_mode,r.addEventListener("change",(e=>{this.prefs.filter_mode=e.target.value,this.refilterAllSoon()})),document.addEventListener("keydown",this._keyDown.bind(this)),document.addEventListener("keyup",this._keyUp.bind(this)),r=document.querySelector("#torrent-container"),r.addEventListener("click",(()=>{this.popup&&"inspector"!==this.popup.name?this.setCurrentPopup(null):this._deselectAll()})),r.addEventListener("dragenter",ce._dragenter),r.addEventListener("dragover",ce._dragenter),r.addEventListener("drop",this._drop.bind(this)),this._setupSearchBox(),this.elements={torrent_list:document.querySelector("#torrent-list")},this.elements.torrent_list.addEventListener("contextmenu",(e=>{let t=event.target;for(;t&&!t.classList.contains("torrent");)t=t.parentNode;const n=this._rows.find((e=>e.getElement()===t));n&&!n.isSelected()&&this._setSelectedRow(n);const r=new v(this.action_manager);this.setCurrentPopup(r);const o=document.querySelector("#torrent-container").getBoundingClientRect(),s=Math.min(e.x,o.x+o.width-r.root.clientWidth),i=Math.min(e.y,o.y+o.height-r.root.clientHeight);r.root.style.left=`${s>0?s:0}px`,r.root.style.top=`${i>0?i:0}px`,e.preventDefault()})),this.loadDaemonPrefs(),this._initializeTorrents(),this.refreshTorrents(),this.togglePeriodicSessionRefresh(!0),this.prefs.addEventListener("change",(({key:e,value:t})=>this._onPrefChanged(e,t)));for(const[e,t]of this.prefs.entries())this._onPrefChanged(e,t)}_openTorrentFromUrl(){setTimeout((()=>{const e=new URLSearchParams(window.location.search).get("addtorrent");if(e){this.setCurrentPopup(new z(this,this.remote,e));const t=new URL(window.location);t.search="",window.history.pushState("","",t.toString())}}),0)}loadDaemonPrefs(){this.remote.loadDaemonPrefs((e=>{this.session_properties=e.arguments,this._openTorrentFromUrl()}))}get session_properties(){return this._session_properties}set session_properties(e){if(A(this._session_properties,e))return;this._session_properties=Object.seal(e);const t=new Event("session-change");t.session_properties=e,this.dispatchEvent(t),this._updateGuiFromSession(e)}_setupSearchBox(){const e=document.querySelector("#torrent-search"),t="blur";e.classList.add(t),e.addEventListener("blur",(()=>e.classList.add(t))),e.addEventListener("focus",(()=>e.classList.remove(t))),e.addEventListener("keyup",(()=>this._setFilterText(e.value)))}_onPrefChanged(e,t){switch(e){case b.DisplayMode:this.torrentRenderer="compact"===t?new ae:new ie,this.refilterAllSoon();break;case b.ContrastMode:document.body.classList.remove("contrast-more"),document.body.classList.remove("contrast-less"),document.body.classList.add(`contrast-${t}`);break;case b.FilterMode:case b.SortDirection:case b.SortMode:this.refilterAllSoon();break;case b.RefreshRate:{clearInterval(this.refreshTorrentsInterval);const e=this.refreshTorrents.bind(this),t=1e3*Math.max(2,this.prefs.refresh_rate_sec);this.refreshTorrentsInterval=setInterval(e,t);break}}}_getAllTorrents(){return Object.values(this._torrents)}static _getTorrentIds(e){return e.map((e=>e.getId()))}seedRatioLimit(){const e=this.session_properties;return e&&e.seedRatioLimited?e.seedRatioLimit:-1}_getSelectedRows(){return this._rows.filter((e=>e.isSelected()))}getSelectedTorrents(){return this._getSelectedRows().map((e=>e.getTorrent()))}_getSelectedTorrentIds(){return ce._getTorrentIds(this.getSelectedTorrents())}_setSelectedRow(e){const t=e?e.getElement():null;for(const e of this.elements.torrent_list.children)e.classList.toggle("selected",e===t);this.dispatchSelectionChangedSoon()}_selectRow(e){e.getElement().classList.add("selected"),this.dispatchSelectionChangedSoon()}_deselectRow(e){e.getElement().classList.remove("selected"),this.dispatchSelectionChangedSoon()}_selectAll(){for(const e of this.elements.torrent_list.children)e.classList.add("selected");this.dispatchSelectionChangedSoon()}_deselectAll(){for(const e of this.elements.torrent_list.children)e.classList.remove("selected");this.dispatchSelectionChangedSoon(),delete this._last_torrent_clicked}_indexOfLastTorrent(){return this._rows.findIndex((e=>e.getTorrentId()===this._last_torrent_clicked))}_selectRange(e){const t=this._indexOfLastTorrent();if(-1===t)this._selectRow(e);else{const n=this._rows.indexOf(e),r=Math.min(t,n),o=Math.max(t,n);for(let e=r;e<=o;++e)this._selectRow(this._rows[e])}this.dispatchSelectionChangedSoon()}_dispatchSelectionChanged(){const e=[],t=[];for(const n of this._rows)(n.isSelected()?t:e).push(n.getTorrent());const n=new Event("torrent-selection-changed");n.nonselected=e,n.selected=t,this.dispatchEvent(n)}static _createKeyShortcutFromKeyboardEvent(e){const t=[];return e.ctrlKey&&t.push("Control"),e.altKey&&t.push("Alt"),e.metaKey&&t.push("Meta"),e.shitKey&&t.push("Shift"),t.push(1===e.key.length?e.key.toUpperCase():e.key),t.join("+")}_keyDown(e){const{ctrlKey:t,keyCode:n,metaKey:r,shiftKey:o,target:s}=e,i=s.matches("input");if(!i){const t=ce._createKeyShortcutFromKeyboardEvent(e),n=this.action_manager.getActionForShortcut(t);if(n)return e.preventDefault(),void this.action_manager.click(n)}if(27===n&&this.popup)return this.setCurrentPopup(null),void e.preventDefault();const a=document.querySelector(".popup:not(.hidden)"),l=this._rows;if(!(i||a||r||t)){const t=16===n,r=38===n,s=40===n;if((r||s)&&l.length>0){const t=this._indexOfLastTorrent(),n=this._shift_index,i=0,a=l.length-1;let c=t;s&&c+1<=a?++c:r&&c-1>=i&&--c;const d=l[c];n>=0?n<=t&&t=t&&t>c?this._selectRow(d):(n>=t&&c>t||n<=t&&t>c)&&this._deselectRow(l[t]):o?this._selectRange(d):this._setSelectedRow(d),d&&(this._last_torrent_clicked=d.getTorrentId(),d.getElement().scrollIntoView(),e.preventDefault())}else t&&(this._shift_index=this._indexOfLastTorrent())}}_keyUp(e){16===e.keyCode&&delete this._shift_index}static _dragenter(e){if(e.dataTransfer&&e.dataTransfer.types){const t=new Set(["text/uri-list","text/plain"]);if(e.dataTransfer.types.some((e=>t.has(e)))||e.dataTransfer.types.includes("Files"))return e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="copy",!1}else e.dataTransfer&&(e.dataTransfer.dropEffect="none");return!0}static _isValidURL(e){try{return!!new URL(e)}catch{return!1}}shouldAddedTorrentsStart(){return this.session_properties["start-added-torrents"]}_drop(e){const t=!this.shouldAddedTorrentsStart();if(!e.dataTransfer||!e.dataTransfer.types)return!0;const n=e.dataTransfer.types.filter((e=>["text/uri-list","text/plain"].includes(e))).pop();for(const r of e.dataTransfer.getData(n).split("\n").map((e=>e.trim())).filter((e=>ce._isValidURL(e))))this.remote.addTorrentByUrl(r,t);const{files:r}=e.dataTransfer;return r.length>0&&(this.openDialog=new z(this,this.remote,"",r)),e.preventDefault(),!1}togglePeriodicSessionRefresh(e){if(!e&&this.sessionInterval&&(clearInterval(this.sessionInterval),delete this.sessionInterval),e&&(this.loadDaemonPrefs(),!this.sessionInterval)){const e=8e3;this.sessionInterval=setInterval(this.loadDaemonPrefs.bind(this),e)}}_setFilterText(e){this.filterText=e?e.trim():null,this.refilterAllSoon()}_onTorrentChanged(e){const t=e.currentTarget;this.dirtyTorrents.add(t.getId()),this.refilterSoon()}updateTorrents(e,t){this.remote.updateTorrents(e,t,((e,t)=>{const n=[],r=e.shift(),o={};for(const t of e){for(const[e,n]of r.entries())o[n]=t[e];const{id:e}=o;let s=this._torrents[e];if(s){const t=s.needsMetaData();s.refresh(o),t&&!s.needsMetaData()&&n.push(e)}else s=this._torrents[e]=new D(o),s.addEventListener("dataChanged",this._onTorrentChanged.bind(this)),this.dirtyTorrents.add(e),"name"in s.fields&&"status"in s.fields||n.push(e)}if(n.length>0){const e=["id",...D.Fields.Metadata,...D.Fields.Stats];this.updateTorrents(n,e),this.refilterSoon()}t&&(this._deleteTorrents(t),this.refilterSoon())}))}refreshTorrents(){const e=["id",...D.Fields.Stats];this.updateTorrents("recently-active",e)}_initializeTorrents(){const e=["id",...D.Fields.Metadata,...D.Fields.Stats];this.updateTorrents(null,e)}_onRowClicked(e){const t=e.metaKey||e.ctrlKey,{row:n}=e.currentTarget;if(this.popup&&"inspector"!==this.popup.name)this.setCurrentPopup(null);else{if(e.target.classList.contains("torrent-pauseresume-button"))switch(e.target.dataset.action){case"pause":this._stopTorrents([n.getTorrent()]);break;case"resume":this._startTorrents([n.getTorrent()])}e.stopPropagation(),e.shiftKey?(this._selectRange(n),window.focus()):!n.isSelected()&&t?this._selectRow(n):n.isSelected()?n.isSelected()&&t?this._deselectRow(n):n.isSelected()&&this._setSelectedRow(n):this._setSelectedRow(n),this._last_torrent_clicked=n.getTorrentId()}}_deleteTorrents(e){if(e&&e.length>0){for(const t of e)this.dirtyTorrents.add(t),delete this._torrents[t];this.refilterSoon()}}_removeSelectedTorrents(e){const t=this.getSelectedTorrents();t.length>0&&this.setCurrentPopup(new ee({remote:this.remote,torrents:t,trash:e}))}_startSelectedTorrents(e){this._startTorrents(this.getSelectedTorrents(),e)}_startTorrents(e,t){this.remote.startTorrents(ce._getTorrentIds(e),t,this.refreshTorrents,this)}_verifyTorrents(e){this.remote.verifyTorrents(ce._getTorrentIds(e),this.refreshTorrents,this)}_reannounceTorrents(e){this.remote.reannounceTorrents(ce._getTorrentIds(e),this.refreshTorrents,this)}_stopTorrents(e){this.remote.stopTorrents(ce._getTorrentIds(e),this.refreshTorrents,this)}changeFileCommand(e,t,n){this.remote.changeFileCommand(e,t,n)}_moveTop(){this.remote.moveTorrentsToTop(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveUp(){this.remote.moveTorrentsUp(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveDown(){this.remote.moveTorrentsDown(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_moveBottom(){this.remote.moveTorrentsToBottom(this._getSelectedTorrentIds(),this.refreshTorrents,this)}_updateGuiFromSession(e){const[,t,n]=e.version.match(/(.*)\s\(([\da-f]+)\)/);this.version_info={checksum:n,version:t};document.querySelector("#toolbar-overflow").classList.toggle("alt-speed-enabled",e[Z])}_updateStatusbar(){const e=_,t=this._getAllTorrents(),n=t.reduce(((e,t)=>e+t.getUploadSpeed()),0),r=t.reduce(((e,t)=>e+t.getDownloadSpeed()),0),o=e.countString("Transfer","Transfers",this._rows.length);h(document.querySelector("#speed-up-label"),e.speedBps(n)),h(document.querySelector("#speed-dn-label"),e.speedBps(r)),h(document.querySelector("#filter-count"),o)}static _displayName(e){let t=e;return t.length>0&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}_updateFilterSelect(){const e=this._getTrackerCounts(),t=Object.keys(e).sort();let n="";n+=this.filterTracker?'':'';for(const e of t)n+=``;this.filterTrackersStr&&this.filterTrackersStr===n||(this.filterTrackersStr=n,document.querySelector("#filter-tracker").innerHTML=n)}sortRows(e){const t=e.map((e=>e.getTorrent())),n=e.reduce(((e,t)=>(e[t.getTorrent().getId()]=t,e)),{});D.sortTorrents(t,this.prefs.sort_mode,this.prefs.sort_direction);for(const[r,o]of t.entries())e[r]=n[o.getId()]}_refilter(e){const{sort_mode:t,sort_direction:n,filter_mode:r}=this.prefs,o=this.filterTracker,s=this.torrentRenderer,i=this.elements.torrent_list;let a=null,l=null;const c=/^labels:([\w,-\s]*)(.*)$/.exec(this.filterText);c?(a=c[2].trim(),l=c[1].split(",")):(a=this.filterText,l=[]);const d=()=>[...i.children].length,A=()=>[...i.children].reduce(((e,t)=>e+t.classList.contains("selected")?1:0),0),p=d(),g=A();if(this._updateFilterSelect(),clearTimeout(this.refilterTimer),delete this.refilterTimer,e){for(;i.firstChild;)i.firstChild.remove();this._rows=[],this.dirtyTorrents=new Set(Object.keys(this._torrents))}const u=[];let m=[];for(const e of this._rows)this.dirtyTorrents.has(e.getTorrentId())?m.push(e):u.push(e);for(const e of m)e.getElement().remove();const h=[];for(const e of m){const t=e.getTorrentId(),n=this._torrents[t];n&&n.test(r,o,a,l)&&h.push(e),this.dirtyTorrents.delete(t)}m=h;for(const e of this.dirtyTorrents.values()){const t=this._torrents[e];if(t&&t.test(r,o,a,l)){const e=new le(s,this,t),n=e.getElement();n.row=e,m.push(e),n.addEventListener("click",this._onRowClicked.bind(this)),n.addEventListener("dblclick",(()=>this.action_manager.click("show-inspector")))}}this.sortRows(m);const C=[],b=u.length,f=m.length,v=document.createDocumentFragment();let y=0,x=0;for(;y!==b||x!==f;){let e=null;if(y===b)e=!1;else if(x===f)e=!0;else{e=D.compareTorrents(u[y].getTorrent(),m[x].getTorrent(),t,n)<0}if(e)C.push(u[y++]);else{const e=m[x++],t=e.getElement();y===b?v.append(t):i.insertBefore(t,u[y].getElement()),C.push(e)}}i.append(v),this._rows=C,this.dirtyTorrents.clear();for(const[e,t]of C.map((e=>e.getElement())).entries()){const n=e%2==0;t.classList.toggle("even",n),t.classList.toggle("odd",!n)}this._updateStatusbar(),g===A()&&p===d()||this.dispatchSelectionChangedSoon()}setFilterTracker(e){document.querySelector("#filter-tracker").value=e,this.filterTracker=e,this.refilterAllSoon()}_getTrackerCounts(){const e={};for(const t of this._getAllTorrents())for(const n of t.getTrackers()){const{sitename:t}=n;e[t]=(e[t]||0)+1}return e}popupCloseListener(e){if(e.target!==this.popup)throw new Error(e);this.popup.removeEventListener("close",this.boundPopupCloseListener),delete this.popup}setCurrentPopup(e){this.popup&&this.popup.close(),this.popup=e,this.popup&&this.popup.addEventListener("close",this.boundPopupCloseListener)}}var de=n(379),Ae=n.n(de),pe=n(795),ge=n.n(pe),ue=n(569),me=n.n(ue),he=n(565),Ce=n.n(he),be=n(216),fe=n.n(be),ve=n(589),ye=n.n(ve),xe=n(844),we={};we.styleTagTransform=ye(),we.setAttributes=Ce(),we.insert=me().bind(null,"head"),we.domAPI=ge(),we.insertStyleElement=fe();Ae()(xe.Z,we);xe.Z&&xe.Z.locals&&xe.Z.locals;document.addEventListener("DOMContentLoaded",(function(){const t=new e,n=new b,r=new C(n),o=new ce(t,r,n),s=d((()=>o.elements.torrent_list.scrollTo(0,1)));window.addEventListener("load",s),window.addEventListener("orientationchange",s)}))})()})(); //# sourceMappingURL=transmission-app.js.map