cista 1.4.3__py3-none-any.whl → 1.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ @charset "UTF-8";:root{--primary-background: #ddd;--header-background: var(--soft-color);--header-color: #ccc;--input-background: #fff;--input-color: #000;--primary-color: #000;--soft-color: #146;--accent-color: #f80;--transition-time: .2s;--root-font-size: 1rem;--header-font-size: 1rem;--header-height: 4rem}@media(prefers-color-scheme:dark){:root{--primary-color: #ddd;--primary-background: var(--soft-color);--header-background: #000;--header-color: #ccc;--input-background: var(--soft-color);--input-color: #ddd}}@media screen and (max-width:600px){.size,.modified,.summary{display:none}}@media screen and (min-width:1000px){:root{--root-font-size: calc(8px + .8vw) }}@media screen and (min-width:2000px){:root{--root-font-size: 1.5rem}}@media screen and (orientation:landscape)and (min-width:700px){header{display:flex;justify-content:space-between}header .headermain{order:1}header .breadcrumb{align-self:stretch}}@media print{:root{--primary-color: black;--primary-background: none;--header-background: none;--header-color: black}.headermain,.menu,.rename-button{display:none!important}.breadcrumb>a{color:#000!important;background:none!important;padding:0!important;margin:0!important;clip-path:none!important;max-width:none!important}.breadcrumb>a:after{content:"/"}.breadcrumb svg{fill:#000!important;margin:0 .5rem 0 1rem!important}body#app{position:static!important;height:auto!important}main{padding-bottom:0!important}thead tr{font-size:1rem!important;position:static!important;background:none!important;border-bottom:1pt solid black!important}audio::-webkit-media-controls-timeline,video::-webkit-media-controls-timeline{display:none}audio::-webkit-media-controls,video::-webkit-media-controls{display:none}tr,figure{page-break-inside:avoid}.selection{min-width:0!important;padding:0!important}.selection input{display:none}.selection input:checked{display:inherit}tbody .selection input:checked{opacity:1!important;transform:scale(.5);left:0}}*{box-sizing:border-box}html{font-size:var(--root-font-size);overflow:hidden}main{-ms-overflow-style:none;scrollbar-width:none}body{background-color:var(--primary-background);font-size:1rem;font-family:Roboto;color:var(--primary-color);margin:0;overflow:hidden;height:100vh;height:100dvh}tbody .size,tbody .modified{font-family:Roboto Mono}header{flex:0 0 auto;background-color:var(--header-background);color:var(--header-color);font-size:var(--header-font-size)}main{height:100%}::selection{color:#000;background:#ff0!important}button{font:inherit;color:inherit;margin:0;border:0;padding:0;background:none;cursor:pointer;min-width:1rem;min-height:1rem}input{margin:0}:focus{outline:none}a:link,a:visited,a:active,a:hover{color:var(--primary-color);text-decoration:none}table{border-collapse:collapse;border-spacing:0;border:0;gap:0}body#app{position:fixed;inset:0;display:flex;flex-direction:column}main{flex:1 1 auto;min-height:0;padding-bottom:3em;overflow-y:scroll;text-align:center}header nav.headermain{position:relative;z-index:100}.spacer{flex-grow:1}.smallgap{flex-shrink:1;width:2em}.error-message{padding:.5em;font-weight:700;background:var(--accent-color);color:#000}.ghost{opacity:.5}.transferprogress[data-v-ee5a3f0e]{--bar: var(--accent-color);--nobar: transparent;display:flex;flex-direction:column;justify-content:center;color:var(--primary-color);width:100%}.statustext[data-v-ee5a3f0e]{display:flex;align-items:center;justify-content:center;margin:0 .5em;padding:.5rem 0}span[data-v-ee5a3f0e]{color:#ccc;white-space:nowrap;text-align:right;padding:0 .5em}.filename[data-v-ee5a3f0e]{color:#fff;flex:1 1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.index[data-v-ee5a3f0e]{min-width:3.5em}.position[data-v-ee5a3f0e],.speed[data-v-ee5a3f0e]{min-width:4em}.upload .statustext[data-v-ee5a3f0e]:before{font-size:1.5em;content:"🔺"}.download .statustext[data-v-ee5a3f0e]:before{font-size:1.5em;content:"🔻"}.cursor-tooltip[data-v-7e1f0ce6]{position:fixed;z-index:10000;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem #00000080;background:#0000004d;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);color:#fff;pointer-events:none;font-size:1rem}.action-button{background:none;border:none;color:#ccc;cursor:pointer;transition:all .2s ease;padding:.2em;width:3em;height:3em}.action-button:hover,.action-button:focus{color:#fff;transform:scale(1.1)}svg{fill:#ccc;transform:fill .2s ease}.action-button:hover svg,.action-button:focus svg{fill:#fff}.selection-bar{display:flex;align-items:center;justify-content:center;padding:.3em .5em;background:transparent;color:var(--header-color)}.select-text{color:var(--accent-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;padding-right:.5em}:root{--breadcrumb-background-odd: #2d2d2d;--breadcrumb-background-even: #404040;--breadcrumb-color: #ddd;--breadcrumb-hover-color: #fff;--breadcrumb-hover-background-odd: #25a;--breadcrumb-hover-background-even: #812;--breadcrumb-transtime: .3s}.breadcrumb{flex:1 1 auto;display:flex;min-width:20%;max-width:100%;min-height:2em;margin:0;padding:0 1em 0 0;overflow:hidden}.breadcrumb>a{flex:0 4 auto;display:flex;align-items:center;margin:0 -.5em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:var(--breadcrumb-color);padding:.3em 1.5em;clip-path:polygon(0 0,1em 50%,0 100%,100% 100%,100% 0,0 0);transition:all var(--breadcrumb-transtime)}.breadcrumb>a:first-child{flex:0 0 auto;padding-left:1.5em;padding-right:1.7em;clip-path:none}.breadcrumb>a:last-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,1em 50%,0 0)}.breadcrumb>a:only-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,0 0)}.breadcrumb svg{width:1.3em;height:1.3em;margin:-.5em;fill:var(--breadcrumb-color);transition:fill var(--breadcrumb-transtime)}.breadcrumb a:nth-child(odd){background:var(--breadcrumb-background-odd)}.breadcrumb a:nth-child(2n){background:var(--breadcrumb-background-even)}.breadcrumb a:nth-child(odd):hover,.breadcrumb a:focus:nth-child(odd){background:var(--breadcrumb-hover-background-odd)}.breadcrumb a:nth-child(2n):hover,.breadcrumb a:focus:nth-child(2n){background:var(--breadcrumb-hover-background-even)}.breadcrumb a:hover{color:var(--breadcrumb-hover-color)}.breadcrumb a:hover svg{fill:var(--breadcrumb-hover-color)}.breadcrumb a.current{color:var(--accent-color);max-width:none;flex:0 1 auto}.breadcrumb a.current svg{fill:var(--accent-color)}@keyframes rotate-a89fc5ad{0%{transform:rotate(0)}to{transform:rotate(360deg)}}svg.cog[data-v-a89fc5ad]{width:10rem;height:10rem;margin:0 auto;animation:rotate-a89fc5ad 10s linear infinite;filter:drop-shadow(0 0 1rem black);fill:#888}svg.cog.stopped[data-v-a89fc5ad]{animation:none}input#FileRenameInput{color:var(--input-color);background:var(--input-background);border:0;border-radius:.3rem;padding:.4rem;margin:-.4rem;width:100%;outline:none;font:inherit}.gallery input#FileRenameInput{padding:.75em;font-weight:600;width:auto}img[data-v-47490c5c],embed[data-v-47490c5c],.icon[data-v-47490c5c],audio[data-v-47490c5c],video[data-v-47490c5c]{font-size:8em;overflow:hidden;min-width:50%;max-width:100%;max-height:100%;border-radius:.0625em}.folder[data-v-47490c5c]:before{content:"📁"}.folder[data-v-47490c5c]:hover:before,.cursor .folder[data-v-47490c5c]:before{content:"📂"}.archive[data-v-47490c5c]:before{content:"📦"}.file[data-v-47490c5c]:before{content:"📄"}.ext-img[data-v-47490c5c]:before{content:"💿"}.ext-exe[data-v-47490c5c]:before,.ext-msi[data-v-47490c5c]:before,.ext-dmg[data-v-47490c5c]:before,.ext-pkg[data-v-47490c5c]:before{content:"⚙️"}.ext-torrent[data-v-47490c5c]:before{content:"🏴‍☠️"}.audio audio[data-v-47490c5c]{opacity:0;transition:opacity var(--transition-time) ease-in-out}.audio:hover audio[data-v-47490c5c]{opacity:1}.audio.icon[data-v-47490c5c]:before{width:100%;content:"🔈"}.audio.icon[data-v-47490c5c]:has(audio[data-playing]):before{position:absolute;content:"🔊";bottom:0}.icon[data-v-47490c5c]{filter:brightness(.9)}figure.cursor .icon[data-v-47490c5c]{filter:brightness(1)}img[data-v-47490c5c]:before{text-shadow:0 0 .5rem #000;filter:grayscale(1);content:"❌"}.video-container[data-v-47490c5c]{position:relative;display:flex;align-items:center;justify-content:center;min-width:50%;max-width:100%;max-height:100%}.video-container video[data-v-47490c5c]{width:100%;height:100%;border-radius:.0625em;object-fit:contain}.play-overlay[data-v-47490c5c]{position:absolute;display:flex;align-items:center;justify-content:center;pointer-events:none;width:4em;height:4em;background:#0003;border-radius:50%;transition:opacity .2s ease,transform .2s ease}.play-overlay svg[data-v-47490c5c]{width:2em;height:2em;fill:#fff;margin-left:.25em}.video-container:hover .play-overlay[data-v-47490c5c]{transform:scale(1.1)}video[data-playing]+.play-overlay[data-v-47490c5c]{opacity:0}.tooltip-name[data-v-79b3799a]{font-weight:600;text-align:center}.tooltip-details[data-v-79b3799a]{text-align:center}figure[data-v-79b3799a]{max-height:15em;position:relative;border-radius:.5em;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}figure>article[data-v-79b3799a]{flex:0 0 auto}figure[data-v-79b3799a] .video-container{height:15em}.titlespacer[data-v-79b3799a]{flex-shrink:100000;width:100%;height:2em}figcaption[data-v-79b3799a]{position:absolute;overflow:hidden;bottom:0;display:flex;align-items:center;justify-content:center;width:100%}figcaption input[type=checkbox][data-v-79b3799a]{width:1.5em;height:1.5em;margin:.25em 0 .25em .25em;opacity:0;flex-shrink:0;transition:opacity var(--transition-time) ease-in-out}figcaption input[type=checkbox][data-v-79b3799a]:checked,figcaption:hover input[type=checkbox][data-v-79b3799a]{opacity:1}figcaption span[data-v-79b3799a]{cursor:default;padding:.5em;color:#fff;font-weight:600;text-shadow:0 0 .2em #000,0 0 .2em #000;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}.cursor figcaption span[data-v-79b3799a]{color:var(--accent-color)}figcaption .namespacer[data-v-79b3799a]{flex-shrink:100000;height:2em;width:2em}.gallery[data-v-c339c53f]{padding:1em;width:100%;display:grid;gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));align-items:end}.folder-indicator[data-v-c339c53f]{grid-column:1 / -1}.folder-start[data-v-c339c53f]{grid-column-start:1}.size.empty[data-v-444c7802]{color:#555}.size.bytes[data-v-444c7802]{color:#77a}.size.kB[data-v-444c7802]{color:#474}.size.MB[data-v-444c7802]{color:#a80}.size.GB[data-v-444c7802]{color:#f83}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f44;text-shadow:0 0 .2em}@media(prefers-color-scheme:dark){.size.empty[data-v-444c7802]{color:#bbb}.size.bytes[data-v-444c7802]{color:#99d}.size.kB[data-v-444c7802]{color:#aea}.size.MB[data-v-444c7802]{color:#ff4}.size.GB[data-v-444c7802]{color:#f86}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f55}}.cursor .size[data-v-444c7802]{color:inherit;text-shadow:none}table[data-v-b1596785]{width:100%;table-layout:fixed}thead tr[data-v-b1596785]{position:sticky;top:0;z-index:2}tbody tr[data-v-b1596785]{position:relative;z-index:auto}table thead .selection input[type=checkbox][data-v-b1596785]{position:inherit;width:1rem;height:1rem;padding:0;margin:auto}table tbody .selection input[type=checkbox][data-v-b1596785]{width:2rem;height:2rem}table .selection[data-v-b1596785]{width:3rem;text-align:center;text-overflow:clip;padding:0}table .selection input[data-v-b1596785]{margin:auto}table .modified[data-v-b1596785]{width:10rem;text-overflow:clip}table .size[data-v-b1596785]{width:7rem;text-overflow:clip}table .menu[data-v-b1596785]{width:2rem}tbody td[data-v-b1596785]{font-size:1.2rem}table th[data-v-b1596785],table td[data-v-b1596785]{padding:0 .5rem;font-weight:400;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name[data-v-b1596785]{white-space:nowrap;position:relative}.name .rename-button[data-v-b1596785]{position:absolute;right:0;animation:appear-b1596785 calc(5 * var(--transition-time)) linear}@keyframes appear-b1596785{0%{opacity:0}80%{opacity:0}to{opacity:1}}thead tr[data-v-b1596785]{font-size:.8rem;background:linear-gradient(to bottom,#eee,#fff 30%,#ddd);color:#000;box-shadow:0 0 .2rem #000}tbody tr.cursor[data-v-b1596785]{background:var(--accent-color)}.right[data-v-b1596785]{text-align:right}.sortcolumn[data-v-b1596785]:hover{cursor:pointer}.sortcolumn[data-v-b1596785]{padding-right:1.5rem}.sortcolumn[data-v-b1596785]:after{font-size:1rem;content:"▸";color:#888;margin-left:.5rem;margin-top:-.2rem;position:absolute;transition:all var(--transition-time) linear}.sortactive[data-v-b1596785]:after{transform:rotate(90deg);color:var(--accent-color)}.name a[data-v-b1596785]{text-decoration:none}tbody .selection input[data-v-b1596785]{z-index:1;position:absolute;opacity:0;left:.5rem;top:0}.selection[data-v-b1596785]{width:2em;height:2em}.selection input[data-v-b1596785]:checked{opacity:.7}.file .selection[data-v-b1596785]:before{content:"📄";font-size:1.5rem}.folder .selection[data-v-b1596785]:before{height:2rem;content:"📁";font-size:1.5rem}.empty-container[data-v-b1596785]{padding-top:3rem;text-align:center;font-size:3rem;color:var(--accent-color)}.folder-change[data-v-b1596785]{margin-left:-.5rem}.loc[data-v-b1596785],.summary[data-v-b1596785]{color:#888}.empty-container[data-v-493ea011]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:2rem;text-shadow:0 0 .3rem #000,0 0 2rem #0008;color:var(--accent-color)}.search-loading[data-v-493ea011]{position:fixed;bottom:1rem;right:1rem;padding:.5rem 1rem;background:var(--accent-color, #007bff);color:#fff;border-radius:.25rem;font-size:.875rem;opacity:.9}.buttons[data-v-7e0e5f3d]{flex:1000 0 auto;padding:0;display:flex;align-items:center;z-index:10}.search-group[data-v-7e0e5f3d]{position:relative;display:flex;align-items:center;background:#ffffff1a;border-radius:1.5em;padding:0 .3em;transition:background .2s ease;flex:1 1 auto;min-width:5.5em;max-width:20em}.search-group[data-v-7e0e5f3d]:focus-within{background:#fff3}.search-group:focus-within .search-hint[data-v-7e0e5f3d]{opacity:0;pointer-events:none}.search-group[data-v-7e0e5f3d] .action-button{width:2.2em;height:2.2em;flex-shrink:0}.search-group input[type=search][data-v-7e0e5f3d]{background:transparent;color:var(--header-color);border:none;outline:none;padding:.2em .5em .2em 0;font-size:var(--header-font-size);flex:1 1 3em;min-width:3em}.search-hint[data-v-7e0e5f3d]{position:absolute;right:.5em;font-family:system-ui,sans-serif;font-size:1em;font-weight:700;color:#333;background:#ccc;border:1px solid #999;border-radius:.3em;padding:0 .45em;line-height:1.4;cursor:pointer;transition:opacity .15s ease}.disk-space[data-v-7e0e5f3d]{display:flex;align-items:center;cursor:default}.pie-mini[data-v-7e0e5f3d]{width:1.4em;height:1.4em}.disk-tooltip[data-v-7e0e5f3d]{line-height:1.5}.pie-tooltip[data-v-7e0e5f3d]{display:block}.pie-tooltip .pie-label[data-v-7e0e5f3d]{fill:#fff;font-size:9px}.modal-overlay{position:fixed;inset:0;z-index:1100;display:flex;align-items:center;justify-content:center}.modal-dialog{background:#ddd;color:#000;border:none;border-radius:.5rem;box-shadow:0 0 1rem #0008;padding:0;max-width:90vw;max-height:90vh;overflow:auto;font-size:1rem}.modal-dialog>h1{background:#146;color:#fff;font-size:1.2rem;font-weight:400;margin:0;padding:.5rem 1rem;position:sticky;top:0}.modal-dialog>.modal-content{padding:1rem}.modal-dialog h3{font-size:1rem;font-weight:600;margin:1rem 0 .5rem}.modal-dialog h3:first-child{margin-top:0}.modal-dialog a{color:#146}.modal-dialog a:hover{color:#f80}.modal-dialog input[type=text],.modal-dialog input[type=password],.modal-dialog select{font:inherit;font-size:1rem;padding:.5rem;border:2px solid #888;border-radius:.25rem;background:#fff;color:#000;min-width:12rem}.modal-dialog input[type=text]:focus,.modal-dialog input[type=password]:focus,.modal-dialog select:focus{outline:none;border-color:#f80}.modal-dialog label{font-size:1rem}.modal-dialog button,.modal-dialog input[type=submit],.modal-dialog input[type=reset],.modal-dialog .button{font:inherit;font-size:1rem;padding:.5rem 1rem;background:#146;color:#fff;border:none;border-radius:.25rem;cursor:pointer}.modal-dialog button:hover,.modal-dialog input[type=submit]:hover,.modal-dialog input[type=reset]:hover,.modal-dialog .button:hover{background:#f80}.modal-dialog button:disabled,.modal-dialog input[type=submit]:disabled,.modal-dialog input[type=reset]:disabled,.modal-dialog .button:disabled{background:#888;cursor:not-allowed}.modal-dialog .button.small{padding:.25rem .5rem;font-size:.875rem}.modal-dialog .button.danger{background:#c00}.modal-dialog .button.danger:hover:not(:disabled){background:red}.modal-dialog .form-row{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center;margin-bottom:.5rem}.modal-dialog .form-grid{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center}.modal-dialog .dialog-buttons{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:1rem}.modal-dialog .error-text{color:#c00;font-size:.875rem;min-height:1.2em;margin:.5rem 0}.modal-dialog .success-message{background:#f80;color:#000;padding:.5rem;border-radius:.25rem;margin:.5rem 0;display:flex;align-items:center;gap:.5rem;font-size:.875rem}.modal-dialog table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:1rem}.modal-dialog th,.modal-dialog td{border:1px solid #888;padding:.5rem;text-align:left}.modal-dialog th{background:#146;color:#fff;font-weight:400}.modal-dialog td{background:#fff}.modal-dialog td input[type=checkbox]{margin:0}.modal-dialog p{margin:0 0 .5rem;font-size:1rem}.modal-dialog .loading{padding:2rem;text-align:center;color:#666}.access-denied[data-v-eaaa3c09]{text-align:center;padding:2rem!important}.access-denied .icon[data-v-eaaa3c09]{font-size:4rem;margin:0 0 1rem}.access-denied .message[data-v-eaaa3c09]{font-size:1.5rem;font-weight:700;margin:0 0 1.5rem}.toast-message{position:fixed;top:1rem;left:50%;transform:translate(-50%);z-index:2000;padding:.75rem 1.5rem;background:var(--accent-color);color:#000;font-weight:700;border-radius:.25rem;box-shadow:0 .25rem 1rem #0000004d;cursor:pointer;max-width:90vw;text-align:center}.toast-message.status{background:#555;color:#fff}footer{position:fixed;bottom:0;left:0;right:0;display:flex;flex-direction:column;align-items:center;background:#0000004d;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:50}footer>*{justify-content:center}:root{--vue-scroll-rect-scrollbar-thumb-color: rgba(122,122,122, .3);--vue-scroll-rect-scrollbar-thumb-color-light: rgba(122, 122, 122, .5);--vue-scroll-rect-scrollbar-thumb-color-pressed: rgba(112, 112, 112, .2);--vue-scroll-rect-scrollbar-thumb-radius: 5px;--vue-scroll-rect-scrollbar-thumb-margin: 0px;--vue-scroll-rect-scrollbar-size: 8px}.vue-scroll-rect{position:relative;width:100%;height:100%;margin:0;overflow:hidden}.vue-scroll-rect>.scroll-content{position:relative;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.vue-scroll-rect>.scroll-content::-webkit-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content::-ms-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content.both{overflow:scroll}.vue-scroll-rect>.scroll-content.horizontal{overflow-x:scroll}.vue-scroll-rect>.scroll-content.vertical{overflow-y:scroll}.vue-scroll-rect:hover>.scrollbar{opacity:1;transition:opacity .1s}.vue-scroll-rect.always-show-scrollbar>.scrollbar,.vue-scroll-rect .dragging>.scrollbar{opacity:1}.vue-scroll-rect.background-clickable>.scrollbar{pointer-events:all}.vue-scroll-rect>.scrollbar{position:absolute;opacity:0;transition:opacity 1.5s;pointer-events:none}.vue-scroll-rect>.scrollbar:hover{opacity:1}.vue-scroll-rect>.scrollbar .thumb{position:absolute;background-color:var(--vue-scroll-rect-scrollbar-thumb-color);border-radius:var(--vue-scroll-rect-scrollbar-thumb-radius);pointer-events:all}.vue-scroll-rect>.scrollbar .thumb:hover{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-light)}.vue-scroll-rect>.scrollbar .thumb:active{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-pressed)}.vue-scroll-rect>.scrollbar.horizontal{left:0;bottom:0;right:0;height:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.horizontal .thumb{top:var(--vue-scroll-rect-scrollbar-thumb-margin);bottom:var(--vue-scroll-rect-scrollbar-thumb-margin)}.vue-scroll-rect>.scrollbar.vertical{top:0;bottom:0;right:0;width:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.vertical .thumb{left:var(--vue-scroll-rect-scrollbar-thumb-margin);right:var(--vue-scroll-rect-scrollbar-thumb-margin)}:root{--mx-menu-backgroud: #fff;--mx-menu-hover-backgroud: #f1f1f1;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #f1f1f1;--mx-menu-divider: #f0f0f0;--mx-menu-text: #2e2e2e;--mx-menu-hover-text: #2e2e2e;--mx-menu-active-text: #2e2e2e;--mx-menu-open-text: #2e2e2e;--mx-menu-open-hover-text: #2e2e2e;--mx-menu-disabled-text: #c9c8c8;--mx-menu-icon-size: 16px;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-scrollbar-thumb-color: rgba(0, 0, 0, .2);--mx-menu-scrollbar-thumb-color-light: rgba(0, 0, 0, .3);--mx-menu-scrollbar-thumb-color-pressed: rgba(0, 0, 0, .1);--mx-menu-shortcut-backgroud: #ebebeb;--mx-menu-shortcut-backgroud-hover:#ebebeb;--mx-menu-shortcut-backgroud-active:#ebebeb;--mx-menu-shortcut-backgroud-open:#ebebeb;--mx-menu-shortcut-backgroud-disabled:#fdfdfd;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #424242;--mx-menu-shortcut-text-active: #424242;--mx-menu-shortcut-text-open: #424242;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-placeholder-width: 24px}.mx-context-menu{pointer-events:all;display:inline-block;overflow:visible;position:absolute;background-color:var(--mx-menu-backgroud);border-radius:var(--mx-menu-backgroud-radius);padding:12px 0;box-shadow:0 10px 40px 10px var(--mx-menu-shadow-color);opacity:1;transition:opacity .2s ease-in-out;--vue-scroll-rect-scrollbar-thumb-color: var(--mx-menu-scrollbar-thumb-color);--vue-scroll-rect-scrollbar-thumb-color-light: var(--mx-menu-scrollbar-thumb-color-light);--vue-scroll-rect-scrollbar-thumb-color-pressed: var(--mx-menu-scrollbar-thumb-color-pressed)}.mx-context-menu-items{position:relative;overflow:visible}.mx-context-menu-scroll{overscroll-behavior:contain}.mx-context-menu-item{display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative;padding:6px 15px;-webkit-user-select:none;user-select:none;overflow:visible;white-space:nowrap;text-overflow:ellipsis;color:var(--mx-menu-text)}.mx-context-menu-item .mx-right-arrow,.mx-context-menu-item .mx-checked-mark{fill:var(--mx-menu-text)}.mx-context-menu-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-right-arrow,.mx-context-menu-item:hover .mx-checked-mark{fill:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-hover);color:var(--mx-menu-shortcut-text-hover)}.mx-context-menu-item:active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-right-arrow,.mx-context-menu-item:active .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-context-menu-item.open{background-color:var(--mx-menu-open-backgroud);color:var(--mx-menu-open-text)}.mx-context-menu-item.open:hover{background-color:var(--mx-menu-open-hover-backgroud);color:var(--mx-menu-open-hover-text)}.mx-context-menu-item.open .mx-right-arrow,.mx-context-menu-item.open .mx-checked-mark{fill:var(--mx-menu-open-text)}.mx-context-menu-item.open .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-open);color:var(--mx-menu-shortcut-text-open)}.mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud)}.mx-context-menu-item.disabled{color:var(--mx-menu-disabled-text);cursor:not-allowed}.mx-context-menu-item.disabled:hover,.mx-context-menu-item.disabled:active{background-color:transparent}.mx-context-menu-item.disabled .mx-right-arrow,.mx-context-menu-item.disabled .mx-checked-mark{fill:var(--mx-menu-disabled-text)}.mx-context-menu-item.disabled .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-disabled);color:var(--mx-menu-shortcut-text-second)}.mx-context-menu-item .mx-item-row{display:flex;flex-direction:row;align-items:center;max-width:100%}.mx-context-menu-item .mx-icon-placeholder{position:relative;display:flex;flex-direction:row;align-items:center;height:auto;overflow:hidden}.mx-context-menu-item .mx-icon-placeholder.preserve-width{width:var(--mx-menu-placeholder-width)}.mx-context-menu-item .icon{display:inline-block;font-size:var(--mx-menu-icon-size)}.mx-context-menu-item .icon.svg{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-context-menu-item .label{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-inline-end:16px}.mx-context-menu-item-wrapper{position:relative}.mx-context-menu-item-sperator{display:block;padding:5px 0;background-color:var(--mx-menu-backgroud)}.mx-context-menu-item-sperator:after{display:block;content:"";background-color:var(--mx-menu-divider);height:1px}.mx-right-arrow{width:14px;height:14px}.mx-checked-mark{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-shortcut{position:relative;justify-self:flex-end;font-size:11.5px;padding:2px 4px;background-color:var(--mx-menu-shortcut-backgroud);color:var(--mx-menu-shortcut-text)}.mx-menu-bar.dark,.mx-context-menu.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #464646;--mx-menu-text: #ffffff;--mx-menu-hover-text: #ffffff;--mx-menu-active-text: #ffffff;--mx-menu-open-text: #ffffff;--mx-menu-open-hover-text: #ffffff;--mx-menu-disabled-text: #9c9c9c;--mx-menu-shadow-color: rgba(51, 51, 51, .2);--mx-menu-scrollbar-thumb-color: rgba(255, 255, 255, .3);--mx-menu-scrollbar-thumb-color-light: rgba(255, 255, 255, .5);--mx-menu-scrollbar-thumb-color-pressed: rgba(255, 255, 255, .2);--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d}.mx-menu-bar.flat,.mx-context-menu.flat{border-radius:0;padding:7px 0;box-shadow:0 1px 2px 1px var(--mx-menu-shadow-color)}.mx-menu-bar.flat .mx-context-menu-item,.mx-context-menu.flat .mx-context-menu-item{padding:3px 12px}.mx-menu-bar.win10,.mx-context-menu.win10{border-radius:0;padding:8px 0;border:1px solid var(--mx-menu-border-color);box-shadow:2px 2px 1px 0 var(--mx-menu-shadow-color)}.mx-menu-bar.win10,.mx-context-menu.win10{--mx-menu-backgroud: #eeeeee;--mx-menu-hover-backgroud: #d8d8d8;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #d8d8d8;--mx-menu-divider: #aaaaaa;--mx-menu-border-color: #b1b1b1;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover: transparent;--mx-menu-shortcut-backgroud-active: transparent;--mx-menu-shortcut-backgroud-open: transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #272727;--mx-menu-shortcut-text-hover: #272727;--mx-menu-shortcut-text-active: #272727;--mx-menu-shortcut-text-open: #272727;--mx-menu-shortcut-text-disabled: #6b6b6b}.mx-menu-bar.win10 .mx-context-menu-item,.mx-context-menu.win10 .mx-context-menu-item{padding:2px 4px;margin:0 4px}.mx-menu-bar.win10 .mx-context-menu-item-sperator,.mx-context-menu.win10 .mx-context-menu-item-sperator{margin:0 4px}.mx-menu-bar.win10.dark,.mx-context-menu.win10.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #808080;--mx-menu-border-color: #656565;--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d;padding:8px 0}.mx-menu-bar.win10.dark .mx-context-menu-item,.mx-context-menu.win10.dark .mx-context-menu-item{padding:6px 12px;margin:0}.mx-menu-bar.win10.dark .mx-context-menu-item-sperator,.mx-context-menu.win10.dark .mx-context-menu-item-sperator{margin:0 7px}.mx-menu-bar.mac,.mx-context-menu.mac{padding:8px 0;box-shadow:0 5px 7px 1px var(--mx-menu-shadow-color);border:1px solid var(--mx-menu-border-color)}.mx-menu-bar.mac,.mx-context-menu.mac{--mx-menu-backgroud: #ececec;--mx-menu-hover-backgroud: #0165e1;--mx-menu-active-backgroud: #0165e1;--mx-menu-open-backgroud: #858585;--mx-menu-open-hover-backgroud: #0165e1;--mx-menu-divider: #d2d2d2;--mx-menu-text: #232323;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #bbbbbb;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-border-color: #bbbbbb}.mx-menu-bar.mac.dark,.mx-context-menu.mac.dark{--mx-menu-backgroud: #333333;--mx-menu-hover-backgroud: #0153d2;--mx-menu-active-backgroud: #0153d2;--mx-menu-open-hover-backgroud: #0153d2;--mx-menu-open-backgroud: #414346;--mx-menu-divider: #575757;--mx-menu-text: #dcdcdc;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #6a6a6a;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #dadada;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #6a6a6a;--mx-menu-border-color: #222}.mx-menu-bar.mac .mx-context-menu-item,.mx-context-menu.mac .mx-context-menu-item{border-radius:5px;margin:0 6px;padding:3px 6px}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text);outline:none}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-shortcut,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-menu-bar.mac .mx-context-menu-item-sperator,.mx-context-menu.mac .mx-context-menu-item-sperator{margin:0 12px}.mx-context-menu .vue-scroll-rect>.scroll-content{overflow-y:scroll;height:100%;width:auto;position:relative!important}.mx-menu-ghost-host{position:absolute;inset:0;overflow:hidden;pointer-events:none}.mx-menu-ghost-host.fullscreen{position:fixed}.mx-menu-bar{flex:1;display:flex;flex-direction:row;align-items:center;background-color:var(--mx-menu-backgroud);padding:5px 0}.mx-menu-bar.mini{flex-grow:0}.mx-menu-bar .mx-menu-bar-content{display:flex;flex-direction:row;align-items:center}.mx-menu-bar .mx-menu-bar-item{padding:2px 8px;border-radius:5px;-webkit-user-select:none;user-select:none;background-color:var(--mx-menu-backgroud);color:var(--mx-menu-text)}.mx-menu-bar .mx-menu-bar-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:hover .mx-menu-bar-icon-menu{fill:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:active,.mx-menu-bar .mx-menu-bar-item.active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-item:active .mx-menu-bar-icon-menu,.mx-menu-bar .mx-menu-bar-item.active .mx-menu-bar-icon-menu{fill:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-icon-menu{fill:var(--mx-menu-text);width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-menu-bar.flat .mx-menu-bar-item{border-radius:0}
@@ -0,0 +1,32 @@
1
+ import{r as F,m as ko,e as bo,i as ie,h as fs,a as Bt,b as Co,t as ps,g as hs,o as ms,c as lt,n as be,d as Ze,f as G,w as ze,j as Q,k as N,l as S,p as te,q,s as Ce,u as nt,v as E,x as xe,y as at,z as ee,A as fe,T as bn,B as Cn,C as y,D as vs,E as we,F as Wt,G as V,H as gs,I as it,J as ye,K as ys,L as Pe,M as ws,N as he,O as me,P as ve,Q as ft,R as Je,S as xo,U as So,V as ks,W as bs,X as zt,Y as un,Z as Cs,_ as Tn,$ as $o,a0 as xs,a1 as Rt,a2 as dn,a3 as Ss,a4 as _o,a5 as $s}from"./icons-lBBdjRTZ.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();let Eo;const Ut=e=>Eo=e,Ro=Symbol();function fn(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var kt;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(kt||(kt={}));function _s(){const e=bo(!0),t=e.run(()=>F({}));let n=[],o=[];const s=ko({install(r){Ut(s),s._a=r,r.provide(Ro,s),r.config.globalProperties.$pinia=s,o.forEach(l=>n.push(l)),o=[]},use(r){return this._a?n.push(r):o.push(r),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return s}const Io=()=>{};function Nn(e,t,n,o=Io){e.add(t);const s=()=>{e.delete(t)&&o()};return!n&&hs()&&ms(s),s}function Qe(e,...t){e.forEach(n=>{n(...t)})}const Es=e=>e(),Dn=Symbol(),en=Symbol();function pn(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],s=e[n];fn(s)&&fn(o)&&e.hasOwnProperty(n)&&!Bt(o)&&!Co(o)?e[n]=pn(s,o):e[n]=o}return e}const Rs=Symbol();function Is(e){return!fn(e)||!Object.prototype.hasOwnProperty.call(e,Rs)}const{assign:De}=Object;function Ms(e){return!!(Bt(e)&&e.effect)}function As(e,t,n,o){const{state:s,actions:r,getters:l}=t,i=n.state.value[e];let a;function c(){i||(n.state.value[e]=s?s():{});const u=Ze(n.state.value[e]);return De(u,r,Object.keys(l||{}).reduce((f,v)=>(f[v]=ko(G(()=>{Ut(n);const g=n._s.get(e);return l[v].call(g,g)})),f),{}))}return a=Mo(e,c,t,n,o,!0),a}function Mo(e,t,n={},o,s,r){let l;const i=De({actions:{}},n),a={deep:!0};let c,u,f=new Set,v=new Set,g;const x=o.state.value[e];!r&&!x&&(o.state.value[e]={});let $;function m(b){let d;c=u=!1,typeof b=="function"?(b(o.state.value[e]),d={type:kt.patchFunction,storeId:e,events:g}):(pn(o.state.value[e],b),d={type:kt.patchObject,payload:b,storeId:e,events:g});const _=$=Symbol();be().then(()=>{$===_&&(c=!0)}),u=!0,Qe(f,d,o.state.value[e])}const k=r?function(){const{state:d}=n,_=d?d():{};this.$patch(R=>{De(R,_)})}:Io;function M(){l.stop(),f.clear(),v.clear(),o._s.delete(e)}const A=(b,d="")=>{if(Dn in b)return b[en]=d,b;const _=function(){Ut(o);const R=Array.from(arguments),O=new Set,D=new Set;function L(z){O.add(z)}function j(z){D.add(z)}Qe(v,{args:R,name:_[en],store:w,after:L,onError:j});let X;try{X=b.apply(this&&this.$id===e?this:w,R)}catch(z){throw Qe(D,z),z}return X instanceof Promise?X.then(z=>(Qe(O,z),z)).catch(z=>(Qe(D,z),Promise.reject(z))):(Qe(O,X),X)};return _[Dn]=!0,_[en]=d,_},P={_p:o,$id:e,$onAction:Nn.bind(null,v),$patch:m,$reset:k,$subscribe(b,d={}){const _=Nn(f,b,d.detached,()=>R()),R=l.run(()=>ze(()=>o.state.value[e],O=>{(d.flush==="sync"?u:c)&&b({storeId:e,type:kt.direct,events:g},O)},De({},a,d)));return _},$dispose:M},w=lt(P);o._s.set(e,w);const p=(o._a&&o._a.runWithContext||Es)(()=>o._e.run(()=>(l=bo()).run(()=>t({action:A}))));for(const b in p){const d=p[b];if(Bt(d)&&!Ms(d)||Co(d))r||(x&&Is(d)&&(Bt(d)?d.value=x[b]:pn(d,x[b])),o.state.value[e][b]=d);else if(typeof d=="function"){const _=A(d,b);p[b]=_,i.actions[b]=d}}return De(w,p),De(ps(w),p),Object.defineProperty(w,"$state",{get:()=>o.state.value[e],set:b=>{m(d=>{De(d,b)})}}),o._p.forEach(b=>{De(w,l.run(()=>b({store:w,app:o._a,pinia:o,options:i})))}),x&&r&&n.hydrate&&n.hydrate(w.$state,x),c=!0,u=!0,w}function Ao(e,t,n){let o;const s=typeof t=="function";o=s?n:t;function r(l,i){const a=fs();return l=l||(a?ie(Ro,null):null),l&&Ut(l),l=Eo,l._s.has(e)||(s?Mo(e,t,o,l):As(e,o,l)),l._s.get(e)}return r.$id=e,r}const Ps={class:"statustext"},Os={key:0,class:"index"},Ts={class:"filename"},Ns={key:0,class:"percent"},Ds={key:1,class:"position"},Ls={class:"speed"},Bs=Q({__name:"TransferBar",props:{status:{}},emits:["cancel"],setup(e){const t=e,n=G(()=>t.status.xfer/t.status.total*100),o=G(()=>{let r=t.status.statbytes/t.status.statdur/1e3;const l=(Date.now()-t.status.tlast)/1e3;return l>5/r?0:l>1/r?1/l:r}),s=G(()=>o.value?o.value.toFixed(o.value<10?1:0)+" MB/s":"stalled");return(r,l)=>e.status.total?(E(),N("div",{key:0,class:"transferprogress",style:nt(`background: linear-gradient(to right, var(--bar) 0, var(--bar) ${n.value}%, var(--nobar) ${n.value}%, var(--nobar) 100%);`)},[S("div",Ps,[e.status.filecount>1?(E(),N("span",Os," ["+te(e.status.fileidx)+"/"+te(e.status.filecount)+"] ",1)):q("",!0),S("span",Ts,[Ce(te(e.status.filename.split("/").pop())+" ",1),e.status.filesize>1e7?(E(),N("span",Ns,te((e.status.filepos/e.status.filesize*100).toFixed(0)+" %"),1)):q("",!0)]),e.status.total>1e7?(E(),N("span",Ds,te((e.status.xfer/1e6).toFixed(0)+" / "+(e.status.total/1e6).toFixed(0)+" MB"),1)):q("",!0),S("span",Ls,te(s.value),1),S("button",{class:"close",onClick:l[0]||(l[0]=i=>r.$emit("cancel"))},"❌")])],4)):q("",!0)}}),Se=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},Hs=Se(Bs,[["__scopeId","data-v-ee5a3f0e"]]);let tn=!1,et=null,Ln=0;const Fs=Q({__name:"CursorTooltip",props:{text:{},delay:{}},setup(e,{expose:t}){const n=e,o=F(!1),s=F(0),r=F(0),l=F(0),i=F(0),a=F(null);let c=null,u=0,f=0;const v=8,g=G(()=>{let C=s.value,p=r.value;return l.value>0&&i.value>0&&(C+l.value+8>window.innerWidth&&(C=window.innerWidth-l.value-8),p+i.value+8>window.innerHeight&&(p=window.innerHeight-i.value-8),C=Math.max(8,C),p=Math.max(8,p)),{left:`${C}px`,top:`${p}px`}}),x=()=>{Ln=Date.now()};xe(()=>document.addEventListener("touchstart",x,{passive:!0})),at(()=>document.removeEventListener("touchstart",x));const $=()=>Date.now()-Ln<500,m=()=>{o.value=!0,tn=!0,requestAnimationFrame(()=>{a.value&&(l.value=a.value.offsetWidth,i.value=a.value.offsetHeight)})},k=()=>{c&&clearTimeout(c),et&&(clearTimeout(et),et=null);const w=tn?0:n.delay??900;c=setTimeout(m,w)};return t({startHover:w=>{$()||(s.value=w.clientX,r.value=w.clientY,u=w.clientX,f=w.clientY)},updatePosition:w=>{if($()||(s.value=w.clientX,r.value=w.clientY,o.value))return;const C=w.clientX-u,p=w.clientY-f;Math.sqrt(C*C+p*p)>v&&(u=w.clientX,f=w.clientY,c&&(clearTimeout(c),c=null)),c||k()},endHover:()=>{c&&(clearTimeout(c),c=null),o.value=!1,et&&clearTimeout(et),et=setTimeout(()=>{tn=!1},400)}}),(w,C)=>(E(),ee(bn,{to:"body"},[o.value?(E(),N("div",{key:0,ref_key:"tooltipEl",ref:a,class:"cursor-tooltip",style:nt(g.value)},[fe(w.$slots,"default",{},void 0,!0)],4)):q("",!0)]))}}),Xe=Se(Fs,[["__scopeId","data-v-7e1f0ce6"]]),jt=Q({__name:"SvgButton",props:{name:{},tooltip:{}},setup(e){const t=e,n=F(null),o=t.tooltip??"";return(s,r)=>(E(),N("button",{class:"action-button",onMouseenter:r[0]||(r[0]=(...l)=>n.value?.startHover&&n.value?.startHover(...l)),onMousemove:r[1]||(r[1]=(...l)=>n.value?.updatePosition&&n.value?.updatePosition(...l)),onMouseleave:r[2]||(r[2]=(...l)=>n.value?.endHover&&n.value?.endHover(...l))},[(E(),ee(Cn(y(vs)[e.name]))),fe(s.$slots,"default"),y(o)?(E(),ee(Xe,{key:0,ref_key:"tooltip",ref:n,text:y(o)},{default:we(()=>[Ce(te(y(o)),1)]),_:1},8,["text"])):q("",!0)],32))}});function bt(e){if(e===0)return"empty";for(const t of[null,"kB","MB","GB","TB","PB","EB"]){if(e<1e4)return e.toLocaleString().replace(","," ")+(t?` ${t}`:"");e=Math.round(e/1e3)}return"huge"}function Po(e){const t=new Date(e*1e3),n=new Date,o=t.getTime()-n.getTime(),s=Math.abs(o),r=new Intl.RelativeTimeFormat("en",{numeric:"auto"});if(s<=5e3)return"now";if(s<=6e4)return r.format(Math.round(o/1e3),"second").replace(" ago","").replaceAll(" "," ");if(s<=36e5)return r.format(Math.round(o/6e4),"minute").replace("utes","").replace("ute","").replaceAll(" "," ");if(s<=864e5)return r.format(Math.round(o/36e5),"hour").replaceAll(" "," ");if(s<=6048e5)return r.format(Math.round(o/864e5),"day").replaceAll(" "," ");let l=t.toLocaleDateString("en-ie",{weekday:"short",year:"numeric",month:"short",day:"numeric"}).replace("Sept","Sep");return l.length===14&&(l=l.replace(" ","  ")),l=l.replaceAll(" "," ").replace(" "," "),l=l.slice(0,-4)+l.slice(-2),l}const Vt=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});class ct{loc="";key="";size=0;mtime=0;dir=!1;ghost=!1;expires=0;_name="";constructor(t={}){const{name:n,...o}=t;Object.assign(this,o),n&&(this._name=n)}get name(){return this._name}set name(t){if(t.includes("/")||t.startsWith("."))throw Error(`Invalid name: ${t}`);this._name=t}get sizedisp(){return bt(this.size)}get modified(){return Po(this.mtime)}get url(){const t=this.loc?`${this.loc}/${this.name}`:this.name;return this.dir?"/#/"+`${t}/`.replaceAll("#","%23"):`/files/${t}`.replaceAll("?","%3F").replaceAll("#","%23")}get urlrouter(){return this.url.replace(/^\/#/,"")}get img(){return this.dir?!1:["jpg","jpeg","png","gif","webp","avif","heic","heif","svg"].includes(this.ext)}get previewable(){return this.dir?!1:this.img?!0:["mp4","mkv","webm","ogg","mp3","flac","aac","pdf"].includes(this.ext)}get previewurl(){return this.url.replace(/^\/files/,"/preview")}get ext(){const t=this.name.lastIndexOf(".");return t===-1||t===this.name.length-1?"":this.name.slice(t+1).toLowerCase()}}const Ht="paskia-iframe",Bn="paskia-dialog",Ws=`body::before {
2
+ content: '';
3
+ position: fixed;
4
+ inset: 0;
5
+ z-index: 1099;
6
+ background: transparent;
7
+ backdrop-filter: blur(0) brightness(1);
8
+ -webkit-backdrop-filter: blur(0) brightness(1);
9
+ pointer-events: none;
10
+ visibility: hidden;
11
+ transition: all 0.2s ease-out;
12
+ }
13
+ body.paskia-backdrop::before {
14
+ -webkit-backdrop-filter: blur(.2rem) brightness(0.5);
15
+ backdrop-filter: blur(.2rem) brightness(0.5);
16
+ visibility: visible;
17
+ }
18
+ body.paskia-backdrop {
19
+ overflow: auto;
20
+ }
21
+ #${Ht} {
22
+ border: none;
23
+ position: fixed;
24
+ top: 0;
25
+ left: 0;
26
+ width: 100%;
27
+ height: 100%;
28
+ z-index: 9999;
29
+ color-scheme: auto;
30
+ background: transparent;
31
+ }
32
+ `;let Be=null,Ge=null,ot=null,st=null,Hn=!1,Tt=0;function zs(){if(document.getElementById(Bn))return;const e=document.createElement("style");e.id=Bn,e.textContent=Ws,document.head.insertBefore(e,document.head.firstChild)}class rt extends Error{constructor(){super("Authentication cancelled"),this.name="AuthCancelledError"}}function xn(){Tt++,document.body.classList.add("paskia-backdrop")}function Oo(){Tt=Math.max(0,Tt-1),Tt===0&&document.body.classList.remove("paskia-backdrop")}function Us(){return!!document.getElementById(Ht)}function hn(){Be&&(Be.remove(),Be=null,Oo())}function js(e){const t=e.data;if(t?.type)switch(t.type){case"auth-success":hn(),ot&&(ot(),Ge=null,ot=null,st=null);break;case"auth-back":hn(),st&&(st(new rt),Ge=null,ot=null,st=null);break}}function Vs(){Hn||typeof window<"u"&&(window.addEventListener("message",js),Hn=!0)}function Sn(e,t="Authentication"){return zs(),Vs(),Ge||(document.getElementById(Ht)?(Ge=new Promise((n,o)=>{ot=n,st=o}),Ge):(Ge=new Promise((n,o)=>{ot=n,st=o}),hn(),xn(),Be=document.createElement("iframe"),Be.id=Ht,Be.title=t,Be.src=e,document.body.appendChild(Be),Ge))}const Gs=1e3;class qs extends Error{constructor(t,n,o){super(o?.detail||`Request failed: ${n.status}`),this.name="ApiError",this.url=t,this.status=n.status,this.statusText=n.statusText,this.data=o}}class nn extends Error{constructor(t,n=null){super(t),this.name="NetworkError",this.originalError=n}}async function To(e,t={}){const{timeout:n=Gs,...o}=t;for(o.credentials=o.credentials||"include";;){let s;try{s=await fetch(e,{...o,signal:n?AbortSignal.timeout(n):void 0})}catch(r){const l=r;throw l.name==="TimeoutError"?new nn("Request timed out",l):l.name==="AbortError"?r:l.name==="TypeError"&&l.message==="Failed to fetch"?new nn("Unable to connect to server",l):new nn(l.message||"Network error",l)}if(s.status===401||s.status===403){let r=null;try{r=await s.clone().json()}catch{}if(r?.auth?.iframe&&window===window.top){await Sn(r.auth.iframe);continue}}return s}}async function At(e,t={}){return Ks(e,t,To)}async function Ks(e,t={},n=fetch){const o={Accept:"application/json",...t.headers};let s;t.body&&typeof t.body=="object"&&!(t.body instanceof FormData)?(o["Content-Type"]="application/json",s=JSON.stringify(t.body)):s=t.body;const r={...t,headers:o,body:s},l=await n(e,r),i=await l.json();if(!l.ok)throw new qs(e,l,i);return i}const Ye="/api/control",Js="/api/upload",Ys="/api/watch";let _e=[],Nt=500,Ct=null,xt=!1;const No=()=>{_e=[]},Xs=()=>{const e=localStorage["cista-files"];if(!e)return!1;const t=re();try{return _e=JSON.parse(e),t.updateRoot(_e),console.log(`Loaded session with ${_e.length} items cached`),!0}catch(n){return console.log("Loading session failed",n),!1}},Do=()=>{localStorage["cista-files"]=JSON.stringify(_e)},Ae=(e,t)=>{const n=new WebSocket(new URL(e,location.origin.replace(/^http/,"ws")));for(const[o,s]of Object.entries(t))n.addEventListener(o,s);return n};async function Lo(e){const t=e.error?.auth?.iframe;if(t){const n=re();n.clearSensitiveData(),No(),xt=!0,n.authInProgress=!0,n.error="",$e!==null&&(clearTimeout($e),$e=null);try{await Sn(t),xt=!1,n.authInProgress=!1,Gt()}catch(o){xt=!1,n.authInProgress=!1,o instanceof rt?(console.log("User cancelled authentication"),n.dialog="accessdenied"):console.error("Auth iframe error:",o)}return!0}return!1}const Gt=()=>{$e!==null&&(clearTimeout($e),$e=null);const e=re();e.error!=="Reconnecting..."&&(e.error="Connecting..."),console.log(e.error),Ct=Ae(Ys,{message:er,close:Qs}),Ct.addEventListener("message",t=>{if(e.connected)return;const n=JSON.parse(t.data);if("error"in n){n.error.code===401||n.error.code===403?Lo(n):e.error=n.error.message;return}"server"in n&&(console.log("Connected to backend",n),e.server=n.server,e.connected=!0,Nt=500,e.error="",n.user?e.login(n.user.username,n.user.privileged):e.isUserLogged&&e.logout())})},Zs=()=>{Ct&&(Ct.close(),Ct=null)},mn=()=>{xt=!1,$e!==null&&(clearTimeout($e),$e=null),Gt()};let $e=null;const Qs=e=>{const t=re();if(xt||Us()){console.log("Skipping reconnect - awaiting authentication");return}t.connected&&(console.warn("Disconnected from server",e),t.connected=!1,t.error="Reconnecting..."),$e!==null&&clearTimeout($e),Nt=Math.min(5e3,Nt+500),$e=setTimeout(Gt,Nt)},er=e=>{const t=JSON.parse(e.data);switch(!0){case!!t.root:tr(t);break;case!!t.update:nr(t);break;case!!t.space:const n=re();n.space=t.space;break;case!!t.error:or(t);break}};function tr({root:e}){const t=re();console.log("Watch root",e),t.updateRoot(e),_e=e,Do()}function nr(e){const t=re(),n=e.update;if(console.log("Watch update",n),!_e)return console.error("Watch update before root");let o=[],s=0;for(const[r,l]of n)r==="k"?(o.push(..._e.slice(s,s+l)),s+=l):r==="d"?s+=l:r==="i"?o.push(...l):console.log("Unknown update action",r,l);if(s!=_e.length)throw Error(`Tree update out of sync, number of entries mismatch: got ${s}, expected ${_e.length}, new tree ${o.length}`);t.updateRoot(o),_e=o,Do()}function or(e){if(re(),e.error.code===401||e.error.code===403){Lo(e);return}}const Bo={name:(e,t)=>Vt.compare(e.name,t.name),modified:(e,t)=>t.mtime-e.mtime,size:(e,t)=>t.size-e.size},Ho=(e,t)=>{if(!t)return e;const n=[...e];return n.sort(Bo[t]),n},sr=(e,t)=>{if(!t)return e;const n=Bo[t],o=new Map;for(const i of e){const a=i.loc;o.has(a)||o.set(a,[]),o.get(a).push(i)}for(const i of o.values())i.sort(n);const s=new Map;for(const[i,a]of o)s.set(i,a[0]);const r=[...o.keys()].sort((i,a)=>t==="name"?Vt.compare(i,a):n(s.get(i),s.get(a))),l=[];for(const i of r)l.push(...o.get(i));return l};function rr(e){return new Worker("/assets/searchWorker-DbTcSX-c.js",{name:e?.name})}const Fo=Wt([]);function qe(){return Fo.value}function Fn(e){Fo.value=e}let Pt=null,Dt=0,Lt=null,He=null,Fe=null,Wn=0;function zn(){return Pt||(Pt=new rr,Pt.onmessage=e=>{if(!Lt||e.data.id!==Dt)return;const t=e.data.docs.map(o=>new ct(o));Fe&&(clearTimeout(Fe),Fe=null);const n=performance.now();!e.data.done&&n-Wn<50||(Wn=n,Lt.searchResults=t,e.data.done&&(He&&(clearTimeout(He),He=null),Lt.searchLoading=!1))}),Pt}const Un=30;let gt=null;const re=Ao("main",{state:()=>({ghosts:[],hiddenPaths:new Map,docVersion:0,selected:new Set([]),query:"",searchResults:[],searchLoading:!1,_searchRouteTimer:null,fileExplorer:null,error:"",toast:"",toastTimeout:null,connected:!1,authInProgress:!1,cursor:"",server:{},dialog:"",uprogress:{},dprogress:{},prefs:{gallery:!1,sortListing:"",sortFiltered:""},user:{username:"",privileged:!1,isLoggedIn:!1},space:{disk:0,free:0,usage:0,storage:0}}),persist:{pick:["prefs","cursor","selected"],serializer:{deserialize:e=>{const t=JSON.parse(e);return t.selected=new Set(t.selected),t},serialize:e=>(e.selected=Array.from(e.selected),JSON.stringify(e))}},actions:{updateRoot(e){const t=[];let n=[];for(const[s,r,l,i,a,c]of e)n=n.slice(0,s-1),t.push(new ct({name:r,loc:s?n.join("/"):"/",key:l,size:a,mtime:i,dir:!c})),n.push(r);Fn(t);const o=new Set(t.map(s=>s.loc?`${s.loc}/${s.name}`:s.name));this.ghosts=this.ghosts.filter(s=>!o.has(s.loc?`${s.loc}/${s.name}`:s.name));for(const s of this.hiddenPaths.keys())o.has(s)||this.hiddenPaths.delete(s);this.startCleanupTimer(),this.docVersion++,this.syncSearchWorker()},addGhost(e){e.ghost=!0,e.expires=Math.floor(Date.now()/1e3)+Un,this.ghosts.push(e)},clearGhosts(){this.ghosts=[]},hideDoc(e){this.hiddenPaths.set(e,Math.floor(Date.now()/1e3)+Un)},unhideDoc(e){this.hiddenPaths.delete(e)},startCleanupTimer(){gt||(gt=setInterval(()=>this.cleanupExpired(),5e3))},stopCleanupTimer(){gt&&(clearInterval(gt),gt=null)},cleanupExpired(){const e=Math.floor(Date.now()/1e3);this.ghosts.length,this.hiddenPaths.size,this.ghosts=this.ghosts.filter(t=>t.expires>e);for(const[t,n]of this.hiddenPaths)n<=e&&this.hiddenPaths.delete(t);this.ghosts.length===0&&this.hiddenPaths.size===0&&this.stopCleanupTimer()},showToast(e,t=3e3){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=e,this.toastTimeout=setTimeout(()=>{this.toast="",this.toastTimeout=null},t)},clearToast(){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=""},syncSearchWorker(){const e=zn(),n=qe().map(o=>({loc:o.loc,name:o.name,key:o.key,size:o.size,mtime:o.mtime,dir:o.dir}));e.postMessage({type:"update",documents:n})},search(e,t){const n=zn(),o=++Dt;if(Lt=this,this.query=e,He&&(clearTimeout(He),He=null),Fe&&(clearTimeout(Fe),Fe=null),!e){this.searchResults=[],this.searchLoading=!1;return}Fe=setTimeout(()=>{Dt===o&&(this.searchResults=[]),Fe=null},50),He=setTimeout(()=>{Dt===o&&(this.searchLoading=!0),He=null},100),n.postMessage({type:"search",query:e,loc:t,id:o})},login(e,t){this.user.username=e,this.user.privileged=t,this.user.isLoggedIn=!0,this.dialog="",this.connected||mn()},clearSensitiveData(){localStorage.removeItem("cista-files"),Fn([]),this.ghosts=[],this.hiddenPaths.clear(),this.stopCleanupTimer(),this.docVersion++,this.selected.clear(),this.user.username="",this.user.privileged=!1,this.user.isLoggedIn=!1,this.connected=!1,this.dialog="",this.cursor=""},async logout(){console.log("Logout");try{const e=await fetch("/auth/api/logout",{method:"POST"});if(!e.ok){const t=await e.json().catch(()=>({}));this.error=t.message||t.detail||"Logout failed";return}}catch{this.error="Logout failed";return}this.clearSensitiveData(),mn()},toggleSort(e){const n=(this.query?this.prefs.sortFiltered:this.prefs.sortListing)===e?"":e;this.query?this.prefs.sortFiltered=n:this.prefs.sortListing=n,this.showSortToast(n)},sort(e){this.query?this.prefs.sortFiltered=e:this.prefs.sortListing=e,this.showSortToast(e)},showSortToast(e){const t={"":"Folders first",name:"Alphabetical order",modified:"Newest first",size:"Largest first"};this.showToast(t[e]||e,1200)},focusBreadcrumb(){document.querySelector(".breadcrumb").focus()},cancelDownloads(){location.reload()},cancelUploads(){location.reload()}},getters:{sortOrder(){return this.query?this.prefs.sortFiltered:this.prefs.sortListing},isUserLogged(){return this.user.isLoggedIn},documentCount(){return this.docVersion,qe().length},recentDocuments(){return this.docVersion,Ho(qe(),"modified")},selectedFiles(){this.docVersion;const e=qe(),t=this.selected,n=new Set,o={missing:new Set,docs:{},keys:[],recursive:[]};for(const l of e)t.has(l.key)&&(n.add(l.key),o.keys.push(l.key),o.docs[l.key]=l);for(const l of t)n.has(l)||o.missing.add(l);const s=new Set;function r(l,i,a){if(!a.dir&&s.has(l))throw Error(`Multiple selections conflict for: ${l}`);s.add(l),o.recursive.push([l,i,a])}for(const l of o.keys){const i=o.docs[l],a=i.loc?`${i.loc}/${i.name}`:i.name,c=i.loc.length;r(i.name,a,i);for(const u of e)if(u.loc===a||u.loc.startsWith(a)&&u.loc[a.length]==="/"){const f=u.loc?`${u.loc}/${u.name}`:u.name,v=f.slice(c);r(v,f,u)}}return o.recursive.sort((l,i)=>Vt.compare(l[0],i[0])),o}}});function Ot(e){return typeof e=="object"&&e!==null&&"error"in e}class lr{async get(t){try{const n=await At(t,{method:"GET"});if(Ot(n))throw new Te(n.error.code,n.error.message);return n}catch(n){throw n instanceof rt?new Te(401,"Authentication cancelled"):n}}async post(t,n){try{const o=await At(t,{method:"POST",body:n});if(Ot(o))throw new Te(o.error.code,o.error.message);return o}catch(o){throw o instanceof rt?new Te(401,"Authentication cancelled"):o}}async put(t,n){try{const o=await At(t,{method:"PUT",body:n});if(Ot(o))throw new Te(o.error.code,o.error.message);return o}catch(o){throw o instanceof rt?new Te(401,"Authentication cancelled"):o}}async delete(t){try{const n=await At(t,{method:"DELETE"});if(Ot(n))throw new Te(n.error.code,n.error.message);return n}catch(n){throw n instanceof rt?new Te(401,"Authentication cancelled"):n}}}const pt=new lr;class Te extends Error{code;constructor(t,n){super(n),this.code=t}}const Wo=e=>{re().docVersion;const n=e.join("/");return qe().some(o=>(o.loc?`${o.loc}/${o.name}`:o.name)===n)},on=e=>{const t=[".tar.gz",".tar.bz2",".tar.xz",".tar.zst"],n=e.toLowerCase();for(const s of t)if(n.endsWith(s))return e.slice(0,-s.length);const o=e.lastIndexOf(".");if(o>0){const s=e.slice(o+1);if(s.length>=2&&s.length<=5&&/^[a-zA-Z0-9]+$/.test(s))return e.slice(0,o)}return e},ar=e=>{const t=e.map(s=>s.name);if(t.length===1)return on(t[0]);const n=e.map(s=>s.loc);return n.every(s=>s===n[0])&&n[0]?n[0].split("/").pop():t.length<=3?t.map(on).join("."):`${on(t[0])}.etc`},ir=Q({__name:"DownloadButton",setup(e){const t=re(),n={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};t.dprogress={...n},setInterval(()=>{Date.now()-t.dprogress.tlast>3e3?(t.dprogress.statbytes=0,t.dprogress.statdur=1):(t.dprogress.statbytes*=.9,t.dprogress.statdur*=.9)},100);const o=()=>{Object.assign(t.dprogress,n),t.dprogress.t0=Date.now(),t.dprogress.tlast=t.dprogress.t0+1},s=a=>{const c=document.createElement("a");c.href=a,c.download="",c.click()},r=async(a,c)=>{let u="",f=c;console.log("Downloading to filesystem",a.recursive);for(const[v,g,x]of a.recursive)x.dir||(t.dprogress.files.push(v),++t.dprogress.filecount,t.dprogress.total+=x.size);for(const[v,g,x]of a.recursive){u&&!v.startsWith(u+"/")&&(u="",f=c);const $=v.slice(u.length);for(const M of $.split("/").slice(0,x.dir?void 0:-1))if(M){u+=`${M}/`;try{f=await f.getDirectoryHandle(M.normalize("NFC"),{create:!0})}catch(A){throw console.error("Failed to create directory",u,A),new Error(`Failed to create directory ${u}: ${A}`)}console.log("Created",u)}if(x.dir)continue;const m=v.split("/").pop().normalize("NFC");let k;try{k=await f.getFileHandle(m,{create:!0})}catch(M){throw console.error("Failed to create file",v,g,u+m,M),new Error(`Failed to create file ${u+m}: ${M}`)}try{const M=await k.createWritable(),A=`/files/${v}`;console.log("Fetching",A);const P=await To(A);if(!P.ok)throw t.error=`Failed to download ${A}: ${P.status} ${P.statusText}`,new Error(`Failed to download ${A}: ${P.status} ${P.statusText}`);if(P.body){++t.dprogress.fileidx;const w=P.body.getReader();for(await M.truncate(0),t.dprogress.tlast=Date.now();;){const{value:C,done:p}=await w.read();if(p)break;await M.write(C);const b=Date.now(),d=C.byteLength;t.dprogress.xfer+=d,t.dprogress.filepos+=d,t.dprogress.statbytes+=d,t.dprogress.statdur+=b-t.dprogress.tlast,t.dprogress.tlast=b}}await M.close(),console.log("Saved",u+m)}catch(M){throw console.error("Failed to write file",u+m,M),new Error(`Failed to write file ${u+m}: ${M}`)}}o()},l=a=>{const c=a.keys.map(f=>a.docs[f]),u=ar(c);s(`/zip/${Array.from(a.keys).join("+")}/${u}.zip`),t.showToast(`Downloading ${u}.zip`),t.selected.clear()},i=async a=>{const c=t.selectedFiles;if(c.keys.length===0){t.showToast("No existing files selected"),t.selected.clear();return}const u=c.recursive.filter(([f,v,g])=>!g.dir);if(u.length===1)return t.selected.clear(),t.showToast(`Downloading ${u[0][0].split("/").pop()}`),s(`/files/${u[0][1]}`);if(a.altKey&&"showDirectoryPicker"in window){try{const f=await window.showDirectoryPicker({startIn:"downloads",mode:"readwrite"});await r(c,f),t.selected.clear()}catch(f){console.error("Download to folder failed",f),t.showToast("Download to folder failed")}return}l(c)};return(a,c)=>{const u=jt;return E(),ee(u,{name:"download",tooltip:"Download",onClick:i})}}}),cr={key:0,class:"selection-bar"},ur={class:"select-text"},dr=Q({__name:"HeaderSelected",props:{path:Array},setup(e){const t=F(null),n=re(),o=e,s=G(()=>o.path.join("/")),r=(l,i)=>{const a=n.selectedFiles,c=a.keys.map(v=>{const g=a.docs[v];return g.loc?`${g.loc}/${g.name}`:g.name}),u={op:l,sel:c};if(i!==void 0&&(u.dst=i),l==="rm"||l==="mv")for(const v of c)n.hideDoc(v);const f=Ae(Ye,{message(v){const g=JSON.parse(v.data);if("error"in g){if(console.error("Control socket error",u,g.error),n.error=g.error.message,l==="rm"||l==="mv")for(const x of c)n.unhideDoc(x);return}else if(g.status==="ack"){console.log("Control ack OK",g),f.close(),n.selected.clear();return}else console.log("Unknown control response",u,g)}});f.onopen=()=>{f.send(JSON.stringify(u))}};return(l,i)=>{const a=ir,c=jt;return y(n).selected.size?(E(),N("div",cr,[S("p",ur,te(y(n).selected.size)+" selected",1),V(a),V(c,{name:"copy",tooltip:"Copy here",onClick:i[0]||(i[0]=u=>r("cp",s.value))}),V(c,{name:"paste",tooltip:"Move here",onClick:i[1]||(i[1]=u=>r("mv",s.value))}),V(c,{name:"trash",tooltip:"Delete ⚠️",onClick:i[2]||(i[2]=u=>r("rm"))}),S("button",{class:"action-button unselect",onClick:i[3]||(i[3]=u=>y(n).selected.clear()),onMouseenter:i[4]||(i[4]=(...u)=>t.value?.startHover&&t.value?.startHover(...u)),onMousemove:i[5]||(i[5]=(...u)=>t.value?.updatePosition&&t.value?.updatePosition(...u)),onMouseleave:i[6]||(i[6]=(...u)=>t.value?.endHover&&t.value?.endHover(...u))},[i[8]||(i[8]=Ce("❌",-1)),V(Xe,{ref_key:"unselectTooltip",ref:t,text:"Unselect all"},{default:we(()=>[...i[7]||(i[7]=[Ce("Unselect all",-1)])]),_:1},512)],32)])):q("",!0)}}});const tt=typeof document<"u";function zo(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function fr(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&zo(e.default)}const oe=Object.assign;function sn(e,t){const n={};for(const o in t){const s=t[o];n[o]=Ee(s)?s.map(e):e(s)}return n}const St=()=>{},Ee=Array.isArray;function jn(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}let ce=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const Uo=Symbol("");ce.MATCHER_NOT_FOUND+"",ce.NAVIGATION_GUARD_REDIRECT+"",ce.NAVIGATION_ABORTED+"",ce.NAVIGATION_CANCELLED+"",ce.NAVIGATION_DUPLICATED+"";function ut(e,t){return oe(new Error,{type:e,[Uo]:!0},t)}function Me(e,t){return e instanceof Error&&Uo in e&&(t==null||!!(e.type&t))}const pr=["params","query","hash"];function hr(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of pr)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const mr=Symbol(""),Vn=Symbol(""),qt=Symbol(""),jo=Symbol(""),vn=Symbol("");function Kt(){return ie(qt)}const Vo=/#/g,vr=/&/g,gr=/\//g,yr=/=/g,wr=/\?/g,Go=/\+/g,kr=/%5B/g,br=/%5D/g,qo=/%5E/g,Cr=/%60/g,Ko=/%7B/g,xr=/%7C/g,Jo=/%7D/g,Sr=/%20/g;function $n(e){return e==null?"":encodeURI(""+e).replace(xr,"|").replace(kr,"[").replace(br,"]")}function $r(e){return $n(e).replace(Ko,"{").replace(Jo,"}").replace(qo,"^")}function gn(e){return $n(e).replace(Go,"%2B").replace(Sr,"+").replace(Vo,"%23").replace(vr,"%26").replace(Cr,"`").replace(Ko,"{").replace(Jo,"}").replace(qo,"^")}function _r(e){return gn(e).replace(yr,"%3D")}function Er(e){return $n(e).replace(Vo,"%23").replace(wr,"%3F")}function Rr(e){return Er(e).replace(gr,"%2F")}function It(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Ir=/\/$/,Mr=e=>e.replace(Ir,"");function rn(e,t,n="/"){let o,s={},r="",l="";const i=t.indexOf("#");let a=t.indexOf("?");return a=i>=0&&a>i?-1:a,a>=0&&(o=t.slice(0,a),r=t.slice(a,i>0?i:t.length),s=e(r.slice(1))),i>=0&&(o=o||t.slice(0,i),l=t.slice(i,t.length)),o=Tr(o??t,n),{fullPath:o+r+l,path:o,query:s,hash:It(l)}}function Ar(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Gn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Pr(e,t,n){const o=t.matched.length-1,s=n.matched.length-1;return o>-1&&o===s&&dt(t.matched[o],n.matched[s])&&Yo(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function dt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Yo(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Or(e[n],t[n]))return!1;return!0}function Or(e,t){return Ee(e)?qn(e,t):Ee(t)?qn(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function qn(e,t){return Ee(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Tr(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),s=o[o.length-1];(s===".."||s===".")&&o.push("");let r=n.length-1,l,i;for(l=0;l<o.length;l++)if(i=o[l],i!==".")if(i==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(l).join("/")}const Ne={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let yn=(function(e){return e.pop="pop",e.push="push",e})({}),ln=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Nr(e){if(!e)if(tt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Mr(e)}const Dr=/^[^#]+#/;function Lr(e,t){return e.replace(Dr,"#")+t}function Br(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Jt=()=>({left:window.scrollX,top:window.scrollY});function Hr(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=Br(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Kn(e,t){return(history.state?history.state.position-t:-1)+e}const wn=new Map;function Fr(e,t){wn.set(e,t)}function Wr(e){const t=wn.get(e);return wn.delete(e),t}function zr(e){return typeof e=="string"||e&&typeof e=="object"}function Xo(e){return typeof e=="string"||typeof e=="symbol"}function Ur(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;o<n.length;++o){const s=n[o].replace(Go," "),r=s.indexOf("="),l=It(r<0?s:s.slice(0,r)),i=r<0?null:It(s.slice(r+1));if(l in t){let a=t[l];Ee(a)||(a=t[l]=[a]),a.push(i)}else t[l]=i}return t}function Jn(e){let t="";for(let n in e){const o=e[n];if(n=_r(n),o==null){o!==void 0&&(t+=(t.length?"&":"")+n);continue}(Ee(o)?o.map(s=>s&&gn(s)):[o&&gn(o)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function jr(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Ee(o)?o.map(s=>s==null?null:""+s):o==null?o:""+o)}return t}function yt(){let e=[];function t(o){return e.push(o),()=>{const s=e.indexOf(o);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Le(e,t,n,o,s,r=l=>l()){const l=o&&(o.enterCallbacks[s]=o.enterCallbacks[s]||[]);return()=>new Promise((i,a)=>{const c=v=>{v===!1?a(ut(ce.NAVIGATION_ABORTED,{from:n,to:t})):v instanceof Error?a(v):zr(v)?a(ut(ce.NAVIGATION_GUARD_REDIRECT,{from:t,to:v})):(l&&o.enterCallbacks[s]===l&&typeof v=="function"&&l.push(v),i())},u=r(()=>e.call(o&&o.instances[s],t,n,c));let f=Promise.resolve(u);e.length<3&&(f=f.then(c)),f.catch(v=>a(v))})}function an(e,t,n,o,s=r=>r()){const r=[];for(const l of e)for(const i in l.components){let a=l.components[i];if(!(t!=="beforeRouteEnter"&&!l.instances[i]))if(zo(a)){const c=(a.__vccOpts||a)[t];c&&r.push(Le(c,n,o,l,i,s))}else{let c=a();r.push(()=>c.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${i}" at "${l.path}"`);const f=fr(u)?u.default:u;l.mods[i]=u,l.components[i]=f;const v=(f.__vccOpts||f)[t];return v&&Le(v,n,o,l,i,s)()}))}}return r}function Vr(e,t){const n=[],o=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let l=0;l<r;l++){const i=t.matched[l];i&&(e.matched.find(c=>dt(c,i))?o.push(i):n.push(i));const a=e.matched[l];a&&(t.matched.find(c=>dt(c,a))||s.push(a))}return[n,o,s]}let Gr=()=>location.protocol+"//"+location.host;function Zo(e,t){const{pathname:n,search:o,hash:s}=t,r=e.indexOf("#");if(r>-1){let l=s.includes(e.slice(r))?e.slice(r).length:1,i=s.slice(l);return i[0]!=="/"&&(i="/"+i),Gn(i,"")}return Gn(n,e)+o+s}function qr(e,t,n,o){let s=[],r=[],l=null;const i=({state:v})=>{const g=Zo(e,location),x=n.value,$=t.value;let m=0;if(v){if(n.value=g,t.value=v,l&&l===x){l=null;return}m=$?v.position-$.position:0}else o(g);s.forEach(k=>{k(n.value,x,{delta:m,type:yn.pop,direction:m?m>0?ln.forward:ln.back:ln.unknown})})};function a(){l=n.value}function c(v){s.push(v);const g=()=>{const x=s.indexOf(v);x>-1&&s.splice(x,1)};return r.push(g),g}function u(){if(document.visibilityState==="hidden"){const{history:v}=window;if(!v.state)return;v.replaceState(oe({},v.state,{scroll:Jt()}),"")}}function f(){for(const v of r)v();r=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",u),document.removeEventListener("visibilitychange",u)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",u),document.addEventListener("visibilitychange",u),{pauseListeners:a,listen:c,destroy:f}}function Yn(e,t,n,o=!1,s=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:s?Jt():null}}function Kr(e){const{history:t,location:n}=window,o={value:Zo(e,n)},s={value:t.state};s.value||r(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,c,u){const f=e.indexOf("#"),v=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Gr()+e+a;try{t[u?"replaceState":"pushState"](c,"",v),s.value=c}catch(g){console.error(g),n[u?"replace":"assign"](v)}}function l(a,c){r(a,oe({},t.state,Yn(s.value.back,a,s.value.forward,!0),c,{position:s.value.position}),!0),o.value=a}function i(a,c){const u=oe({},s.value,t.state,{forward:a,scroll:Jt()});r(u.current,u,!0),r(a,oe({},Yn(o.value,a,null),{position:u.position+1},c),!1),o.value=a}return{location:o,state:s,push:i,replace:l}}function Jr(e){e=Nr(e);const t=Kr(e),n=qr(e,t.state,t.location,t.replace);function o(r,l=!0){l||n.pauseListeners(),history.go(r)}const s=oe({location:"",base:e,go:o,createHref:Lr.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function Yr(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),Jr(e)}let Ke=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var de=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(de||{});const Xr={type:Ke.Static,value:""},Zr=/[a-zA-Z0-9_]/;function Qr(e){if(!e)return[[]];if(e==="/")return[[Xr]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=de.Static,o=n;const s=[];let r;function l(){r&&s.push(r),r=[]}let i=0,a,c="",u="";function f(){c&&(n===de.Static?r.push({type:Ke.Static,value:c}):n===de.Param||n===de.ParamRegExp||n===de.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),r.push({type:Ke.Param,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function v(){c+=a}for(;i<e.length;){if(a=e[i++],a==="\\"&&n!==de.ParamRegExp){o=n,n=de.EscapeNext;continue}switch(n){case de.Static:a==="/"?(c&&f(),l()):a===":"?(f(),n=de.Param):v();break;case de.EscapeNext:v(),n=o;break;case de.Param:a==="("?n=de.ParamRegExp:Zr.test(a)?v():(f(),n=de.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--);break;case de.ParamRegExp:a===")"?u[u.length-1]=="\\"?u=u.slice(0,-1)+a:n=de.ParamRegExpEnd:u+=a;break;case de.ParamRegExpEnd:f(),n=de.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--,u="";break;default:t("Unknown state");break}}return n===de.ParamRegExp&&t(`Unfinished custom RegExp for param "${c}"`),f(),l(),s}const Xn="[^/]+?",el={sensitive:!1,strict:!1,start:!0,end:!0};var ge=(function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e})(ge||{});const tl=/[.+*?^${}()[\]/\\]/g;function nl(e,t){const n=oe({},el,t),o=[];let s=n.start?"^":"";const r=[];for(const c of e){const u=c.length?[]:[ge.Root];n.strict&&!c.length&&(s+="/");for(let f=0;f<c.length;f++){const v=c[f];let g=ge.Segment+(n.sensitive?ge.BonusCaseSensitive:0);if(v.type===Ke.Static)f||(s+="/"),s+=v.value.replace(tl,"\\$&"),g+=ge.Static;else if(v.type===Ke.Param){const{value:x,repeatable:$,optional:m,regexp:k}=v;r.push({name:x,repeatable:$,optional:m});const M=k||Xn;if(M!==Xn){g+=ge.BonusCustomRegExp;try{`${M}`}catch(P){throw new Error(`Invalid custom RegExp for param "${x}" (${M}): `+P.message)}}let A=$?`((?:${M})(?:/(?:${M}))*)`:`(${M})`;f||(A=m&&c.length<2?`(?:/${A})`:"/"+A),m&&(A+="?"),s+=A,g+=ge.Dynamic,m&&(g+=ge.BonusOptional),$&&(g+=ge.BonusRepeatable),M===".*"&&(g+=ge.BonusWildcard)}u.push(g)}o.push(u)}if(n.strict&&n.end){const c=o.length-1;o[c][o[c].length-1]+=ge.BonusStrict}n.strict||(s+="/?"),n.end?s+="$":n.strict&&!s.endsWith("/")&&(s+="(?:/|$)");const l=new RegExp(s,n.sensitive?"":"i");function i(c){const u=c.match(l),f={};if(!u)return null;for(let v=1;v<u.length;v++){const g=u[v]||"",x=r[v-1];f[x.name]=g&&x.repeatable?g.split("/"):g}return f}function a(c){let u="",f=!1;for(const v of e){(!f||!u.endsWith("/"))&&(u+="/"),f=!1;for(const g of v)if(g.type===Ke.Static)u+=g.value;else if(g.type===Ke.Param){const{value:x,repeatable:$,optional:m}=g,k=x in c?c[x]:"";if(Ee(k)&&!$)throw new Error(`Provided param "${x}" is an array but it is not repeatable (* or + modifiers)`);const M=Ee(k)?k.join("/"):k;if(!M)if(m)v.length<2&&(u.endsWith("/")?u=u.slice(0,-1):f=!0);else throw new Error(`Missing required param "${x}"`);u+=M}}return u||"/"}return{re:l,score:o,keys:r,parse:i,stringify:a}}function ol(e,t){let n=0;for(;n<e.length&&n<t.length;){const o=t[n]-e[n];if(o)return o;n++}return e.length<t.length?e.length===1&&e[0]===ge.Static+ge.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===ge.Static+ge.Segment?1:-1:0}function Qo(e,t){let n=0;const o=e.score,s=t.score;for(;n<o.length&&n<s.length;){const r=ol(o[n],s[n]);if(r)return r;n++}if(Math.abs(s.length-o.length)===1){if(Zn(o))return 1;if(Zn(s))return-1}return s.length-o.length}function Zn(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const sl={strict:!1,end:!0,sensitive:!1};function rl(e,t,n){const o=nl(Qr(e.path),n),s=oe(o,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function ll(e,t){const n=[],o=new Map;t=jn(sl,t);function s(f){return o.get(f)}function r(f,v,g){const x=!g,$=eo(f);$.aliasOf=g&&g.record;const m=jn(t,f),k=[$];if("alias"in f){const P=typeof f.alias=="string"?[f.alias]:f.alias;for(const w of P)k.push(eo(oe({},$,{components:g?g.record.components:$.components,path:w,aliasOf:g?g.record:$})))}let M,A;for(const P of k){const{path:w}=P;if(v&&w[0]!=="/"){const C=v.record.path,p=C[C.length-1]==="/"?"":"/";P.path=v.record.path+(w&&p+w)}if(M=rl(P,v,m),g?g.alias.push(M):(A=A||M,A!==M&&A.alias.push(M),x&&f.name&&!to(M)&&l(f.name)),es(M)&&a(M),$.children){const C=$.children;for(let p=0;p<C.length;p++)r(C[p],M,g&&g.children[p])}g=g||M}return A?()=>{l(A)}:St}function l(f){if(Xo(f)){const v=o.get(f);v&&(o.delete(f),n.splice(n.indexOf(v),1),v.children.forEach(l),v.alias.forEach(l))}else{const v=n.indexOf(f);v>-1&&(n.splice(v,1),f.record.name&&o.delete(f.record.name),f.children.forEach(l),f.alias.forEach(l))}}function i(){return n}function a(f){const v=cl(f,n);n.splice(v,0,f),f.record.name&&!to(f)&&o.set(f.record.name,f)}function c(f,v){let g,x={},$,m;if("name"in f&&f.name){if(g=o.get(f.name),!g)throw ut(ce.MATCHER_NOT_FOUND,{location:f});m=g.record.name,x=oe(Qn(v.params,g.keys.filter(A=>!A.optional).concat(g.parent?g.parent.keys.filter(A=>A.optional):[]).map(A=>A.name)),f.params&&Qn(f.params,g.keys.map(A=>A.name))),$=g.stringify(x)}else if(f.path!=null)$=f.path,g=n.find(A=>A.re.test($)),g&&(x=g.parse($),m=g.record.name);else{if(g=v.name?o.get(v.name):n.find(A=>A.re.test(v.path)),!g)throw ut(ce.MATCHER_NOT_FOUND,{location:f,currentLocation:v});m=g.record.name,x=oe({},v.params,f.params),$=g.stringify(x)}const k=[];let M=g;for(;M;)k.unshift(M.record),M=M.parent;return{name:m,path:$,params:x,matched:k,meta:il(k)}}e.forEach(f=>r(f));function u(){n.length=0,o.clear()}return{addRoute:r,resolve:c,removeRoute:l,clearRoutes:u,getRoutes:i,getRecordMatcher:s}}function Qn(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function eo(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:al(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function al(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function to(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function il(e){return e.reduce((t,n)=>oe(t,n.meta),{})}function cl(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;Qo(e,t[r])<0?o=r:n=r+1}const s=ul(e);return s&&(o=t.lastIndexOf(s,o-1)),o}function ul(e){let t=e;for(;t=t.parent;)if(es(t)&&Qo(e,t)===0)return t}function es({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function no(e){const t=ie(qt),n=ie(jo),o=G(()=>{const a=y(e.to);return t.resolve(a)}),s=G(()=>{const{matched:a}=o.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const v=f.findIndex(dt.bind(null,u));if(v>-1)return v;const g=oo(a[c-2]);return c>1&&oo(u)===g&&f[f.length-1].path!==g?f.findIndex(dt.bind(null,a[c-2])):v}),r=G(()=>s.value>-1&&ml(n.params,o.value.params)),l=G(()=>s.value>-1&&s.value===n.matched.length-1&&Yo(n.params,o.value.params));function i(a={}){if(hl(a)){const c=t[y(e.replace)?"replace":"push"](y(e.to)).catch(St);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:o,href:G(()=>o.value.href),isActive:r,isExactActive:l,navigate:i}}function dl(e){return e.length===1?e[0]:e}const fl=Q({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:no,setup(e,{slots:t}){const n=lt(no(e)),{options:o}=ie(qt),s=G(()=>({[so(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[so(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&dl(t.default(n));return e.custom?r:it("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),pl=fl;function hl(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function ml(e,t){for(const n in t){const o=t[n],s=e[n];if(typeof o=="string"){if(o!==s)return!1}else if(!Ee(s)||s.length!==o.length||o.some((r,l)=>r.valueOf()!==s[l].valueOf()))return!1}return!0}function oo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const so=(e,t,n)=>e??t??n,vl=Q({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=ie(vn),s=G(()=>e.route||o.value),r=ie(Vn,0),l=G(()=>{let c=y(r);const{matched:u}=s.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),i=G(()=>s.value.matched[l.value]);ye(Vn,G(()=>l.value+1)),ye(mr,i),ye(vn,s);const a=F();return ze(()=>[a.value,i.value,e.name],([c,u,f],[v,g,x])=>{u&&(u.instances[f]=c,g&&g!==u&&c&&c===v&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!dt(u,g)||!v)&&(u.enterCallbacks[f]||[]).forEach($=>$(c))},{flush:"post"}),()=>{const c=s.value,u=e.name,f=i.value,v=f&&f.components[u];if(!v)return ro(n.default,{Component:v,route:c});const g=f.props[u],x=g?g===!0?c.params:typeof g=="function"?g(c):g:null,m=it(v,oe({},x,t,{onVnodeUnmounted:k=>{k.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return ro(n.default,{Component:m,route:c})||m}}});function ro(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const ts=vl;function gl(e){const t=ll(e.routes,e),n=e.parseQuery||Ur,o=e.stringifyQuery||Jn,s=e.history,r=yt(),l=yt(),i=yt(),a=Wt(Ne);let c=Ne;tt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=sn.bind(null,h=>""+h),f=sn.bind(null,Rr),v=sn.bind(null,It);function g(h,B){let T,H;return Xo(h)?(T=t.getRecordMatcher(h),H=B):H=h,t.addRoute(H,T)}function x(h){const B=t.getRecordMatcher(h);B&&t.removeRoute(B)}function $(){return t.getRoutes().map(h=>h.record)}function m(h){return!!t.getRecordMatcher(h)}function k(h,B){if(B=oe({},B||a.value),typeof h=="string"){const K=rn(n,h,B.path),ue=t.resolve({path:K.path},B),Ue=s.createHref(K.fullPath);return oe(K,ue,{params:v(ue.params),hash:It(K.hash),redirectedFrom:void 0,href:Ue})}let T;if(h.path!=null)T=oe({},h,{path:rn(n,h.path,B.path).path});else{const K=oe({},h.params);for(const ue in K)K[ue]==null&&delete K[ue];T=oe({},h,{params:f(K)}),B.params=f(B.params)}const H=t.resolve(T,B),J=h.hash||"";H.params=u(v(H.params));const le=Ar(o,oe({},h,{hash:$r(J),path:H.path})),Y=s.createHref(le);return oe({fullPath:le,hash:J,query:o===Jn?jr(h.query):h.query||{}},H,{redirectedFrom:void 0,href:Y})}function M(h){return typeof h=="string"?rn(n,h,a.value.path):oe({},h)}function A(h,B){if(c!==h)return ut(ce.NAVIGATION_CANCELLED,{from:B,to:h})}function P(h){return p(h)}function w(h){return P(oe(M(h),{replace:!0}))}function C(h,B){const T=h.matched[h.matched.length-1];if(T&&T.redirect){const{redirect:H}=T;let J=typeof H=="function"?H(h,B):H;return typeof J=="string"&&(J=J.includes("?")||J.includes("#")?J=M(J):{path:J},J.params={}),oe({query:h.query,hash:h.hash,params:J.path!=null?{}:h.params},J)}}function p(h,B){const T=c=k(h),H=a.value,J=h.state,le=h.force,Y=h.replace===!0,K=C(T,H);if(K)return p(oe(M(K),{state:typeof K=="object"?oe({},J,K.state):J,force:le,replace:Y}),B||T);const ue=T;ue.redirectedFrom=B;let Ue;return!le&&Pr(o,H,T)&&(Ue=ut(ce.NAVIGATION_DUPLICATED,{to:ue,from:H}),Z(H,H,!0,!1)),(Ue?Promise.resolve(Ue):_(ue,H)).catch(pe=>Me(pe)?Me(pe,ce.NAVIGATION_GUARD_REDIRECT)?pe:ae(pe):ne(pe,ue,H)).then(pe=>{if(pe){if(Me(pe,ce.NAVIGATION_GUARD_REDIRECT))return p(oe({replace:Y},M(pe.to),{state:typeof pe.to=="object"?oe({},J,pe.to.state):J,force:le}),B||ue)}else pe=O(ue,H,!0,Y,J);return R(ue,H,pe),pe})}function b(h,B){const T=A(h,B);return T?Promise.reject(T):Promise.resolve()}function d(h){const B=W.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(h):h()}function _(h,B){let T;const[H,J,le]=Vr(h,B);T=an(H.reverse(),"beforeRouteLeave",h,B);for(const K of H)K.leaveGuards.forEach(ue=>{T.push(Le(ue,h,B))});const Y=b.bind(null,h,B);return T.push(Y),U(T).then(()=>{T=[];for(const K of r.list())T.push(Le(K,h,B));return T.push(Y),U(T)}).then(()=>{T=an(J,"beforeRouteUpdate",h,B);for(const K of J)K.updateGuards.forEach(ue=>{T.push(Le(ue,h,B))});return T.push(Y),U(T)}).then(()=>{T=[];for(const K of le)if(K.beforeEnter)if(Ee(K.beforeEnter))for(const ue of K.beforeEnter)T.push(Le(ue,h,B));else T.push(Le(K.beforeEnter,h,B));return T.push(Y),U(T)}).then(()=>(h.matched.forEach(K=>K.enterCallbacks={}),T=an(le,"beforeRouteEnter",h,B,d),T.push(Y),U(T))).then(()=>{T=[];for(const K of l.list())T.push(Le(K,h,B));return T.push(Y),U(T)}).catch(K=>Me(K,ce.NAVIGATION_CANCELLED)?K:Promise.reject(K))}function R(h,B,T){i.list().forEach(H=>d(()=>H(h,B,T)))}function O(h,B,T,H,J){const le=A(h,B);if(le)return le;const Y=B===Ne,K=tt?history.state:{};T&&(H||Y?s.replace(h.fullPath,oe({scroll:Y&&K&&K.scroll},J)):s.push(h.fullPath,J)),a.value=h,Z(h,B,T,Y),ae()}let D;function L(){D||(D=s.listen((h,B,T)=>{if(!I.listening)return;const H=k(h),J=C(H,I.currentRoute.value);if(J){p(oe(J,{replace:!0,force:!0}),H).catch(St);return}c=H;const le=a.value;tt&&Fr(Kn(le.fullPath,T.delta),Jt()),_(H,le).catch(Y=>Me(Y,ce.NAVIGATION_ABORTED|ce.NAVIGATION_CANCELLED)?Y:Me(Y,ce.NAVIGATION_GUARD_REDIRECT)?(p(oe(M(Y.to),{force:!0}),H).then(K=>{Me(K,ce.NAVIGATION_ABORTED|ce.NAVIGATION_DUPLICATED)&&!T.delta&&T.type===yn.pop&&s.go(-1,!1)}).catch(St),Promise.reject()):(T.delta&&s.go(-T.delta,!1),ne(Y,H,le))).then(Y=>{Y=Y||O(H,le,!1),Y&&(T.delta&&!Me(Y,ce.NAVIGATION_CANCELLED)?s.go(-T.delta,!1):T.type===yn.pop&&Me(Y,ce.NAVIGATION_ABORTED|ce.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),R(H,le,Y)}).catch(St)}))}let j=yt(),X=yt(),z;function ne(h,B,T){ae(h);const H=X.list();return H.length?H.forEach(J=>J(h,B,T)):console.error(h),Promise.reject(h)}function se(){return z&&a.value!==Ne?Promise.resolve():new Promise((h,B)=>{j.add([h,B])})}function ae(h){return z||(z=!h,L(),j.list().forEach(([B,T])=>h?T(h):B()),j.reset()),h}function Z(h,B,T,H){const{scrollBehavior:J}=e;if(!tt||!J)return Promise.resolve();const le=!T&&Wr(Kn(h.fullPath,0))||(H||!T)&&history.state&&history.state.scroll||null;return be().then(()=>J(h,B,le)).then(Y=>Y&&Hr(Y)).catch(Y=>ne(Y,h,B))}const ke=h=>s.go(h);let Oe;const W=new Set,I={currentRoute:a,listening:!0,addRoute:g,removeRoute:x,clearRoutes:t.clearRoutes,hasRoute:m,getRoutes:$,resolve:k,options:e,push:P,replace:w,go:ke,back:()=>ke(-1),forward:()=>ke(1),beforeEach:r.add,beforeResolve:l.add,afterEach:i.add,onError:X.add,isReady:se,install(h){h.component("RouterLink",pl),h.component("RouterView",ts),h.config.globalProperties.$router=I,Object.defineProperty(h.config.globalProperties,"$route",{enumerable:!0,get:()=>y(a)}),tt&&!Oe&&a.value===Ne&&(Oe=!0,P(s.location).catch(H=>{}));const B={};for(const H in Ne)Object.defineProperty(B,H,{get:()=>a.value[H],enumerable:!0});h.provide(qt,I),h.provide(jo,gs(B)),h.provide(vn,a);const T=h.unmount;W.add(h),h.unmount=function(){W.delete(h),W.size<1&&(c=Ne,D&&D(),D=null,a.value=Ne,Oe=!1,z=!1),T()}}};function U(h){return h.reduce((B,T)=>B.then(()=>d(T)),Promise.resolve())}return I}const yl=["aria-current"],wl=["href","aria-current","onClick","onMouseenter","onMousemove","onMouseleave"],_n=Q({__name:"BreadCrumb",props:{path:{},primary:{type:Boolean}},setup(e){const t=ws,n=Kt(),o=[],s=(x,$)=>{$&&(o[x]=$)};ys(()=>{o.length=1});const r=F(null),l=F(new Map),i=(x,$)=>{$?l.value.set(x,$):l.value.delete(x)},a=e,c=F([]),u=x=>x==a.path.length?"location":void 0,f=()=>{be(()=>{const x=a.path.length;x<o.length&&o[x].focus()})},v=x=>{if(!o[x])throw Error(`No link at index ${x} (path: ${a.path})`);const m=x?`/${c.value.slice(0,x).join("/")}/`:"/",k=c.value.length?`/${c.value.join("/")}/`:"/",M=decodeURIComponent(location.hash.slice(1).split("//")[0]??""),A=m.replaceAll("?","%3F").replaceAll("#","%23");u(x)?(c.value.splice(x),n.push(A)):k.startsWith(M)?n.replace(A):n.push(A)},g=x=>{const $=a.path.length+x;$<0||$>c.value.length||v($)};return Pe(()=>{const x=c.value.slice(0,a.path.length);if(!x.every((m,k)=>m===a.path[k]))c.value=a.path;else if(a.path.length>x.length)c.value=x.concat(a.path.slice(x.length));else for(let m=a.path.length;m<c.value.length;++m)if(!Wo(c.value.slice(0,m+1))){c.value=c.value.slice(0,m);break}a.primary&&be(()=>{const m=document.activeElement;(!m||[...o,document.body].includes(m))&&f()})}),(x,$)=>(E(),N("nav",{class:"breadcrumb","aria-label":"Breadcrumb",onKeydown:[$[4]||($[4]=Je(he(m=>g(-1),["stop"]),["left"])),$[5]||($[5]=Je(he(m=>g(1),["stop"]),["right"]))],onKeyup:$[6]||($[6]=Je(m=>g(0),["enter"])),onFocus:f,tabindex:"0"},[S("a",{href:"#/",ref:m=>s(0,m),class:me(["home",{current:!!u(0)}]),"aria-current":u(0),onClick:$[0]||($[0]=he(m=>v(0),["prevent"])),onMouseenter:$[1]||($[1]=(...m)=>r.value?.startHover&&r.value?.startHover(...m)),onMousemove:$[2]||($[2]=(...m)=>r.value?.updatePosition&&r.value?.updatePosition(...m)),onMouseleave:$[3]||($[3]=(...m)=>r.value?.endHover&&r.value?.endHover(...m))},[(E(),ee(Cn(y(t)))),V(Xe,{ref_key:"homeTooltip",ref:r,text:"/"},{default:we(()=>[...$[7]||($[7]=[Ce("/",-1)])]),_:1},512)],42,yl),(E(!0),N(ve,null,ft(c.value,(m,k)=>(E(),N("a",{key:k,href:`/#/${c.value.slice(0,k+1).join("/")}/`,class:me({current:!!u(k+1)}),"aria-current":u(k+1),onClick:he(M=>v(k+1),["prevent"]),ref_for:!0,ref:M=>s(k+1,M),onMouseenter:l.value.get(k)?.startHover,onMousemove:l.value.get(k)?.updatePosition,onMouseleave:l.value.get(k)?.endHover},[Ce(te(m),1),V(Xe,{ref_for:!0,ref:M=>i(k,M),text:`/${c.value.slice(0,k+1).join("/")}`},{default:we(()=>[Ce(te(`/${c.value.slice(0,k+1).join("/")}`),1)]),_:2},1032,["text"])],42,wl))),128))],32))}}),kl=Q({__name:"UploadButton",props:{path:Array},setup(e){const t=Kt(),n=F(),o=F(),s=re(),r=e;function l(w){const C=Array.from(w.clipboardData?.items??[]),p=[],b=[];for(const d of C){if(d.kind!=="file")continue;const _=d.webkitGetAsEntry();if(_?.isFile){const R=d.getAsFile();R&&p.push(R)}else _?.isDirectory&&b.push(_)}if(p.length||b.length){w.preventDefault(),c(p);for(const d of b)i(d,`${r.path.join("/")}/${d.name}`)}}const i=async(w,C)=>{const p=w.createReader(),b=await new Promise(_=>p.readEntries(_)),d=[];for(const _ of b){const R=`${C}/${_.name}`;if(_.isFile){const O=await new Promise(D=>_.file(D));d.push({file:O,cloudName:R,cloudPos:0})}else _.isDirectory&&await i(_,R)}d.length&&u(d)};function a(w){w.preventDefault();const C=w.target,p=Array.from((C??w.dataTransfer)?.files??[]);C&&(C.value=""),p.length&&c(p)}const c=w=>{const C=r.path.join("/");let p=[],b="";for(const d of w){const _=d.webkitRelativePath||d.name;!b&&d.webkitRelativePath&&(b=_.split("/")[0]??""),p.push({file:d,cloudName:C+"/"+_,cloudPos:0})}u(p),b&&t.push("/"+(C?C+"/":"")+b+"/")},u=w=>{if(w.filter(R=>R.cloudName.includes("/.")).length&&(s.showToast("Won't upload dotfiles"),w=w.filter(R=>!R.cloudName.includes("/."))),!w.length)return;w.sort((R,O)=>Vt.compare(R.cloudName,O.cloudName));const p=Math.floor(Date.now()/1e3),b=qe(),d=new Map(b.map(R=>[R.loc?`${R.loc}/${R.name}`:R.name,R]));for(const R of s.ghosts)d.set(R.loc?`${R.loc}/${R.name}`:R.name,R);const _=new Set;for(const R of w){const O=R.cloudName.lastIndexOf("/"),D=O>0?R.cloudName.slice(0,O):"",L=R.cloudName.slice(O+1),j=D.split("/");for(let z=0;z<j.length;z++){const ne=j.slice(0,z+1).join("/");ne&&!d.has(ne)&&!_.has(ne)&&(s.addGhost(new ct({loc:j.slice(0,z).join("/"),name:j[z],key:crypto.randomUUID(),size:0,mtime:p,dir:!0})),_.add(ne))}d.get(R.cloudName)||s.addGhost(new ct({loc:D,name:L,key:crypto.randomUUID(),size:R.file.size,mtime:p,dir:!1}))}m=[...m,...w],$(w),P()},f={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};s.uprogress={...f},setInterval(()=>{Date.now()-s.uprogress.tlast>3e3?(s.uprogress.statbytes=0,s.uprogress.statdur=1):(s.uprogress.statbytes*=.9,s.uprogress.statdur*=.9)},100);const v=({name:w,size:C,start:p,end:b})=>{if(w!==s.uprogress.filename)return;const d=Date.now();s.uprogress.xfer=s.uprogress.filestart+b,s.uprogress.filepos=b,s.uprogress.statbytes+=b-p,s.uprogress.statdur+=d-s.uprogress.tlast,s.uprogress.tlast=d,b===C&&(s.uprogress.filestart+=C,g(),++s.uprogress.fileidx>=s.uprogress.filecount&&x())},g=()=>{const w=s.uprogress.files.shift();if(!w)return x();s.uprogress.filepos=0,s.uprogress.filesize=w.file.size,s.uprogress.filename=w.cloudName},x=()=>{Object.assign(s.uprogress,f),s.uprogress.t0=Date.now(),s.uprogress.tlast=s.uprogress.t0+1},$=w=>{s.uprogress.files.length===0&&x(),s.uprogress.total+=w.reduce((C,p)=>C+p.file.size,0),s.uprogress.filecount+=w.length,s.uprogress.files=[...s.uprogress.files,...w],g()};let m=[];const k=async()=>await new Promise(w=>{const C=Ae(Js,{open(p){w(C)},error(p){console.error("Upload socket error",p),s.error="Upload socket error"},message(p){const b=JSON.parse(p.data);if("error"in b){console.error("Upload socket error",b.error),s.error=b.error.message;return}b.status==="ack"?v(b.req):console.log("Unknown upload response",b)}});C.sendMsg=p=>C.send(JSON.stringify(p)),C.sendData=async p=>{s.uprogress.status="uploading",await new Promise(b=>{const d=setInterval(()=>{C.bufferedAmount>1048576||(b(void 0),clearInterval(d))},1)}),s.uprogress.status="processing",C.send(p)}}),M=async()=>{const w=await k();for(;m.length;){const C=m[0],p=C.cloudPos,b=Math.min(C.file.size,p+(1<<20)),d={name:C.cloudName,size:C.file.size,start:p,end:b},_=C.file.slice(p,b);C.cloudPos=b,w.sendMsg(d),await w.sendData(_),C.cloudPos===C.file.size&&m.shift()}m.length&&P(),s.uprogress.status="idle",A=!1};let A=!1;const P=()=>{A===!1&&(A=setTimeout(()=>{A=!0,M()},0))};return xe(()=>{addEventListener("dragover",a),addEventListener("drop",a),addEventListener("paste",l)}),at(()=>{removeEventListener("paste",l),removeEventListener("dragover",a),removeEventListener("drop",a)}),(w,C)=>{const p=jt;return E(),N(ve,null,[S("template",null,[S("input",{ref_key:"fileInput",ref:n,onChange:a,type:"file",multiple:""},null,544),S("input",{ref_key:"folderInput",ref:o,onChange:a,type:"file",webkitdirectory:""},null,544)]),V(p,{name:"add-file",tooltip:"Upload files",onClick:C[0]||(C[0]=b=>n.value.click())}),V(p,{name:"add-folder",tooltip:"Upload folder",onClick:C[1]||(C[1]=b=>o.value.click())})],64)}}}),bl=Ao("ssoAuth",()=>{const e=G(()=>re().server?.paskia===!0);function t(){re().clearSensitiveData(),No()}return{isExternalAuth:e,clearDataOnUnauth:t}});let We=null;function Cl(){return We!==null}function xl(e){We&&ns(),We=e}function lo(e){e===We&&(We=null)}function ns(){We&&(We.closeMenu(),We=null)}const Ie={defaultDirection:"br",defaultMinWidth:100,defaultMaxWidth:600,defaultZindex:100,defaultZoom:1,defaultAdjustPadding:{x:0,y:10}};function $t(e,t){let n=e.offsetTop;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollTop,n+=$t(e.offsetParent,t)),n}function _t(e,t){let n=e.offsetLeft;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollLeft,n+=_t(e.offsetParent,t)),n}function Sl(e,t,n,o){return{x:_t(e,o)+t,y:$t(e,o)+n}}const cn="mx-menu-default-container",$l="mx-menu-container-";let _l=0;function os(e){const{getContainer:t,zIndex:n}=e;if(t){const s=typeof t=="function"?t():t;if(s){let r=s.getAttribute("id");return r||(r=$l+_l++,s.setAttribute("id",r)),{eleId:r,container:s,isNew:!1}}}let o=document.getElementById(cn);return o||(o=document.createElement("div"),o.setAttribute("id",cn),o.setAttribute("class","mx-menu-ghost-host fullscreen"),document.body.appendChild(o)),o.style.zIndex=n?.toString()||Ie.defaultZindex.toString(),{eleId:cn,container:o,isNew:!0}}function El(e){let t=0;for(let n=0;n<e.length;n++){const o=e.charCodeAt(n);t=(t<<5)-t+o,t|=0}return t}function ao(e){return typeof e=="number"?`${e}px`:e}const Re=Q({props:{vnode:{type:null},data:{type:null,default:null}},setup(e){const{vnode:t,data:n}=Ze(e);return()=>typeof t.value=="function"?t.value(n.value):t.value}});function Rl(e,t){const n={...e};return delete n[t],n}var Il=Object.defineProperty,Ml=(e,t,n)=>t in e?Il(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,io=(e,t,n)=>Ml(e,typeof t!="symbol"?t+"":t,n);class co{constructor(t,n){io(this,"x",0),io(this,"y",0),this.x=t||0,this.y=n||0}set(t,n){this.x=t,this.y=n}substract(t){this.x-=t.x,this.y-=t.y}}function uo(e){const{onDown:t,onMove:n,onUp:o}=e,s=new co,r=new co;let l;function i(c){c.stopPropagation(),r.set(c.x,c.y),r.substract(s),n(s,r,c,l)}function a(c){o(c,l),s.set(0,0),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",a)}return(c,u)=>t(c,u)?(l=u,s.set(c.x,c.y),document.addEventListener("mousemove",i),document.addEventListener("mouseup",a),c.stopPropagation(),!0):!1}function Al(e,t){let n=0;return{start(){n>0&&clearInterval(n),n=setInterval(()=>{n=0,t()},e)},stop(){n>0&&(clearInterval(n),n=0)}}}const wt=[],fo=Al(100,()=>{for(const e of wt)e()});function Pl(e,t,n,o){let s=0,r=0;function l(){e.value&&(t&&s!==e.value.offsetWidth&&t(e.value.offsetWidth),n&&r!==e.value.offsetHeight&&n(e.value.offsetHeight),s=e.value.offsetWidth,r=e.value.offsetHeight)}return{startResizeChecker(){fo.start(),wt.push(l)},stopResizeChecker(){const i=wt.indexOf(l);i>=0&&wt.splice(i,1),wt.length===0&&fo.stop()}}}const po=140,Ol=70,Tl=Q({__name:"ScrollRect",props:{scroll:{type:String,default:"both"},scrollBarAlwaysShow:{type:Boolean,default:!1},scrollBarBackgroundClickable:{type:Boolean,default:!1},height:{type:Number,default:void 0},width:{type:Number,default:void 0},maxHeight:{type:Number,default:void 0},maxWidth:{type:Number,default:void 0},containerClass:{type:String,default:""},containerStyle:{type:null}},emits:["scroll","resized"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=F(),l=F(),i=F(),a=F(),c=F(),u=F(),f=F(!1),v=G(()=>o.scroll==="horizontal"||o.scroll==="both"),g=G(()=>o.scroll==="vertical"||o.scroll==="both"),x=lt({show:!1,size:0,sizeRaw:0,pos:0}),$=lt({show:!1,size:0,sizeRaw:0,pos:0});let m=0,k=0,M=0,A=0,P=null;const w={attributes:!0,childList:!0};function C(){if(r.value){if(x.show){const I=r.value.offsetWidth/r.value.scrollWidth;x.sizeRaw=I*r.value.offsetWidth,x.size=I*100,x.pos=r.value.scrollLeft/(r.value.scrollWidth-r.value.offsetWidth)*(100-x.size),I>=1&&(x.show=!1)}if($.show){const I=r.value.offsetHeight/r.value.scrollHeight;$.sizeRaw=I*r.value.offsetHeight,$.size=I*100,$.pos=r.value.scrollTop/(r.value.scrollHeight-r.value.offsetHeight)*(100-$.size),I>=1&&($.show=!1)}s("scroll",r.value.scrollLeft,r.value.scrollTop)}}function p(I=!1){if(!r.value)return;let U=v.value,h=g.value;const B=U&&(m!==r.value.scrollWidth||M!==r.value.offsetWidth),T=g&&(k!==r.value.scrollHeight||A!==r.value.offsetHeight);if(!I&&!B&&!T)return;const H=window.getComputedStyle(r.value);(H.overflow==="hidden"||H.overflowX==="hidden")&&(U=!1),(H.overflow==="hidden"||H.overflowY==="hidden")&&(h=!1),x.show=U,$.show=h,C(),M=r.value.offsetWidth,A=r.value.offsetHeight,m=r.value.scrollWidth,k=r.value.scrollHeight,s("resized",m,k)}function b(I){var U;o.scroll=="horizontal"&&(I.deltaMode==0&&((U=r.value)==null||U.scrollTo({left:r.value.scrollLeft+(I.deltaY>0?po:-140),behavior:"smooth"})),I.preventDefault(),I.stopPropagation())}function d(I){var U;I.deltaMode==0&&((U=r.value)==null||U.scrollTo({left:r.value.scrollLeft+(I.deltaY>0?po:-140),behavior:"smooth"}),I.preventDefault(),I.stopPropagation())}function _(I){var U;I.deltaMode==0&&((U=r.value)==null||U.scrollTo({top:r.value.scrollTop+(I.deltaY>0?Ol:-70),behavior:"smooth"}),I.preventDefault(),I.stopPropagation())}let R=0,O=0,D=0,L=0;const j=uo({onDown(I){return!i.value||!c.value?!1:(R=I.offsetX,O=I.x-I.offsetX-c.value.offsetLeft,I.preventDefault(),f.value=!0,!0)},onMove(I,U,h){r.value&&i.value&&(se(h.x-R-O),h.preventDefault(),h.stopPropagation())},onUp(){f.value=!1}}),X=uo({onDown(I){return!a.value||!u.value?!1:(D=I.offsetY,L=I.y-I.offsetY-u.value.offsetTop,I.preventDefault(),f.value=!0,!0)},onMove(I,U,h){r.value&&a.value&&(ae(h.y-D-L),h.preventDefault(),h.stopPropagation())},onUp(){f.value=!1}});function z(I){r.value&&(r.value.scrollLeft=I/100*(r.value.scrollWidth-r.value.offsetWidth))}function ne(I){r.value&&(r.value.scrollLeft=I/100*(r.value.scrollHeight-r.value.offsetHeight))}function se(I){r.value&&(r.value.scrollLeft=I/(r.value.offsetWidth-x.sizeRaw)*(r.value.scrollWidth-r.value.offsetWidth))}function ae(I){r.value&&(r.value.scrollTop=I/(r.value.offsetHeight-$.sizeRaw)*(r.value.scrollHeight-r.value.offsetHeight))}function Z(I){o.scrollBarBackgroundClickable&&se(I.offsetX-x.sizeRaw/2)}function ke(I){o.scrollBarBackgroundClickable&&ae(I.offsetY-$.sizeRaw/2)}const{startResizeChecker:Oe,stopResizeChecker:W}=Pl(r,()=>p(),()=>p());return xe(()=>{be(()=>{setTimeout(()=>p(!0),200),p(!0),Oe(),P=new MutationObserver(()=>p()),P.observe(r.value,w)})}),zt(()=>{W(),P&&(P.disconnect(),P=null)}),t({refreshScrollState(){p(!0)},getScrollContainer(){return r.value},scrollTo(I,U){var h;(h=r.value)==null||h.scrollTo(I,U)},scrollToTop(){var I;(I=r.value)==null||I.scrollTo(0,0)},scrollToBottom(){var I;(I=r.value)==null||I.scrollTo(r.value.scrollWidth,r.value.scrollHeight)}}),(I,U)=>(E(),N("div",{ref_key:"scrollrect",ref:l,class:me(["vue-scroll-rect",e.scrollBarAlwaysShow?"always-show-scrollbar":"",e.scrollBarBackgroundClickable?"background-clickable":"",f.value?"dragging":""]),style:nt({width:e.width?`${e.width}px`:void 0,height:e.height?`${e.height}px`:void 0}),onWheel:b},[S("div",{ref_key:"container",ref:r,class:me(["scroll-content",e.scroll,e.containerClass]),style:nt({maxWidth:e.maxWidth?`${e.maxWidth}px`:void 0,maxHeight:e.maxHeight?`${e.maxHeight}px`:void 0,...e.containerStyle}),onScroll:C},[fe(I.$slots,"default")],38),x.show?fe(I.$slots,"scrollBarX",{key:0,scrollBarValue:x,onScroll:z},()=>[S("div",{ref_key:"scrollBarRefX",ref:i,class:"scrollbar horizontal",onClick:Z,onWheel:d},[S("div",{class:"thumb",ref_key:"scrollBarThumbRefX",ref:c,style:nt({left:`${x.pos}%`,width:`${x.size}%`}),onMousedown:U[0]||(U[0]=(...h)=>y(j)&&y(j)(...h)),onWheel:d},null,36)],544)]):q("",!0),$.show?fe(I.$slots,"scrollBarY",{key:1,scrollBarValue:$,onScroll:ne},()=>[$.show?(E(),N("div",{key:0,ref_key:"scrollBarRefY",ref:a,class:"scrollbar vertical",onClick:ke,onWheel:_},[S("div",{class:"thumb",ref_key:"scrollBarThumbRefY",ref:u,style:nt({top:`${$.pos}%`,height:`${$.size}%`}),onMousedown:U[1]||(U[1]=(...h)=>y(X)&&y(X)(...h)),onWheel:_},null,36)],544)):q("",!0)]):q("",!0)],38))}}),En=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},Nl={},Dl={class:"mx-checked-mark","aria-hidden":"true",viewBox:"0 0 1024 1024"},Ll=S("path",{d:"M129.3,428.6L52,512l345,372.5l575-620.8l-69.5-75L400.4,718.2L129.3,428.6z"},null,-1),Bl=[Ll];function Hl(e,t){return E(),N("svg",Dl,Bl)}const Fl=En(Nl,[["render",Hl]]),Wl={},zl={class:"mx-right-arrow","aria-hidden":"true",viewBox:"0 0 1024 1024"},Ul=S("path",{d:"M307.018 49.445c11.517 0 23.032 4.394 31.819 13.18L756.404 480.18c8.439 8.438 13.181 19.885 13.181 31.82s-4.741 23.38-13.181 31.82L338.838 961.376c-17.574 17.573-46.065 17.573-63.64-0.001-17.573-17.573-17.573-46.065 0.001-63.64L660.944 512 275.198 126.265c-17.574-17.573-17.574-46.066-0.001-63.64C283.985 53.839 295.501 49.445 307.018 49.445z"},null,-1),jl=[Ul];function Vl(e,t){return E(),N("svg",zl,jl)}const Gl=En(Wl,[["render",Vl]]),ql={class:"mx-item-row"},Kl=["xlink:href"],Jl={key:1,class:"label"},Yl={class:"mx-item-row"},Xl={class:"mx-shortcut"},Rn=Q({__name:"ContextMenuItem",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},customRender:{type:Function,default:null},customClass:{type:String,default:""},clickHandler:{type:Function,default:null},label:{type:[String,Object,Function],default:""},icon:{type:[String,Object,Function],default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},hasChildren:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},clickableWhenHasChildren:{type:Boolean,default:!1},rawMenuItem:{type:Object,default:void 0}},emits:["click","subMenuOpen","subMenuClose"],setup(e,{expose:t,emit:n}){const o=e,s=n,{clickHandler:r,clickClose:l,clickableWhenHasChildren:i,disabled:a,hidden:c,label:u,icon:f,iconFontClass:v,showRightArrow:g,shortcut:x,hasChildren:$}=Ze(o),m=F(!1),k=F(!1),M=F(),A=ie("globalOptions"),P=ie("globalHasSlot"),w=ie("globalRenderSlot"),C=ie("globalCloseMenu"),p=ie("menuContext"),b=G(()=>typeof u.value=="string"?u.value:typeof u.value=="function"?El(u.value.toString()):"MenuItem[unknow]");ye("MenuItemName",b);const d={getSubMenuInstance:()=>{},showSubMenu:()=>m.value?(p.markActiveMenuItem(d,!0),!0):$.value?(R(),!0):!1,hideSubMenu:()=>{p.closeOtherSubMenu()},isDisabledOrHidden:()=>a.value||c.value,getElement:()=>M.value,focus:()=>k.value=!0,blur:()=>k.value=!1,click:_};ye("menuItemInstance",d),xe(()=>{p.isMenuItemDataCollectedFlag()?be(()=>{let L=0;const j=p.getElement();if(j){let X=0;for(let z=0;z<j.children.length;z++){const ne=j.children[z];if(ne.getAttribute("data-type")==="ContextMenuItem"){if(ne===M.value){L=X;break}X++}}}p.addChildMenuItem(d,L)}):p.addChildMenuItem(d)}),zt(()=>{p.removeChildMenuItem(d)});function _(L){if(!a.value){if(L){const j=L.target;if(j.classList.contains("mx-context-no-clickable")||A.value.ignoreClickClassName&&j.classList.contains(A.value.ignoreClickClassName))return;if(A.value.clickCloseClassName&&j.classList.contains(A.value.clickCloseClassName)){L.stopPropagation(),C(o.rawMenuItem);return}}$.value?i.value?(typeof r.value=="function"&&r.value(L),s("click",L)):m.value||R():(typeof r.value=="function"&&r.value(L),s("click",L),l.value&&C(o.rawMenuItem))}}function R(L){k.value=!1,p.checkCloseOtherSubMenuTimeOut()||p.closeOtherSubMenu(),a.value||(p.markActiveMenuItem(d),$.value&&(L||p.markThisOpenedByKeyBoard(),p.addOpenedSubMenu(O),m.value=!0,be(()=>s("subMenuOpen",d))))}function O(){k.value=!1,m.value=!1,s("subMenuClose",d)}function D(){return{disabled:a.value,label:u.value,icon:f.value,iconFontClass:v.value,showRightArrow:g.value,clickClose:l.value,clickableWhenHasChildren:i.value,shortcut:x.value,theme:A.value.theme,isOpen:m,hasChildren:$,onClick:_,onMouseEnter:R,closeMenu:C}}return t(d),(L,j)=>y(c)?q("",!0):(E(),N("div",{key:0,class:"mx-context-menu-item-wrapper",ref_key:"menuItemRef",ref:M,"data-type":"ContextMenuItem"},[y(P)("itemRender")?(E(),ee(y(Re),{key:0,vnode:()=>y(w)("itemRender",D())},null,8,["vnode"])):e.customRender?(E(),ee(y(Re),{key:1,vnode:e.customRender,data:D()},null,8,["vnode","data"])):(E(),N("div",{key:2,class:me(["mx-context-menu-item",y(a)?"disabled":"",k.value?"keyboard-focus":"",e.customClass?" "+e.customClass:"",m.value?"open":""]),onClick:_,onMouseenter:R},[fe(L.$slots,"default",{},()=>[S("div",ql,[S("div",{class:me(["mx-icon-placeholder",e.preserveIconWidth?"preserve-width":""])},[fe(L.$slots,"icon",{},()=>[y(P)("itemIconRender")?(E(),ee(y(Re),{key:0,vnode:()=>y(w)("itemIconRender",D())},null,8,["vnode"])):typeof e.svgIcon=="string"&&e.svgIcon?(E(),N("svg",un({key:1,class:"icon svg"},e.svgProps),[S("use",{"xlink:href":e.svgIcon},null,8,Kl)],16)):typeof y(f)!="string"?(E(),ee(y(Re),{key:2,vnode:y(f),data:y(f)},null,8,["vnode","data"])):typeof y(f)=="string"&&y(f)!==""?(E(),N("i",{key:3,class:me(y(f)+" icon "+y(v)+" "+y(A).iconFontClass)},null,2)):q("",!0)]),e.checked?fe(L.$slots,"check",{key:0},()=>[y(P)("itemCheckRender")?(E(),ee(y(Re),{key:0,vnode:()=>y(w)("itemCheckRender",D())},null,8,["vnode"])):q("",!0),V(Fl)]):q("",!0)],2),fe(L.$slots,"label",{},()=>[y(P)("itemLabelRender")?(E(),ee(y(Re),{key:0,vnode:()=>y(w)("itemLabelRender",D())},null,8,["vnode"])):typeof y(u)=="string"?(E(),N("span",Jl,te(y(u)),1)):(E(),ee(y(Re),{key:2,vnode:y(u),data:y(u)},null,8,["vnode","data"]))])]),S("div",Yl,[y(x)||L.$slots.shortcut?fe(L.$slots,"shortcut",{key:0},()=>[y(P)("itemShortcutRender")?(E(),ee(y(Re),{key:0,vnode:()=>y(w)("itemShortcutRender",D())},null,8,["vnode"])):q("",!0),S("span",Xl,te(y(x)),1)]):q("",!0),y(g)?fe(L.$slots,"rightArrow",{key:1},()=>[y(P)("itemRightArrowRender")?(E(),ee(y(Re),{key:0,vnode:()=>y(w)("itemRightArrowRender",D())},null,8,["vnode"])):q("",!0),V(Gl)]):q("",!0)])])],34)),fe(L.$slots,"submenu",{context:d,show:m.value})],512))}}),Zl=Q({name:"ContextMenuSperator",components:{VNodeRender:Re},setup(){const e=ie("globalHasSlot"),t=ie("globalRenderSlot");return{globalHasSlot:e,globalRenderSlot:t}}}),Ql={key:1,class:"mx-context-menu-item-sperator mx-context-no-clickable"};function ea(e,t,n,o,s,r){const l=$o("VNodeRender");return e.globalHasSlot("separatorRender")?(E(),ee(l,{key:0,vnode:()=>e.globalRenderSlot("separatorRender",{})},null,8,["vnode"])):(E(),N("div",Ql))}const Et=En(Zl,[["render",ea]]),In=Q({__name:"ContextSubMenu",props:{items:{type:Object,default:null},show:{type:Boolean,default:!1},maxHeight:{type:Number,default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0},adjustPosition:{type:Boolean,default:!0},direction:{type:String,default:"br"},parentMenuItemContext:{type:Object,default:null}},emits:["closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=F(!1),l=ie("globalGetMenuHostId",""),i=ie("menuContext"),a=ie("globalOptions");ie("globalHasSlot"),ie("globalRenderSlot");const c=F("UnknowOrRoot"),u=ie("MenuItemName",c),{zIndex:f,getParentWidth:v,getParentHeight:g,getZoom:x}=i,{adjustPosition:$}=Ze(o),m=F(),k=F(),M=F(),A=[],P=ie("globalSetCurrentSubMenu"),w=[];let C=null,p=0;function b(){C&&C.blur()}function d(W,I){if(W){for(let U=I!==void 0?I:0;U<w.length;U++)if(!w[U].isDisabledOrHidden()){_(U);break}}else for(let U=I!==void 0?I:w.length-1;U>=0;U--)if(!w[U].isDisabledOrHidden()){_(U);break}}function _(W){if(C&&b(),W!==void 0&&(C=w[Math.max(0,Math.min(W,w.length-1))]),!C)return;C.focus();const I=C.getElement();I&&I.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})}function R(){P(O)}const O={el:M,name:u,isTopLevel:()=>i.getParentContext()===null,closeSelfAndActiveParent:()=>{const W=j.getParentContext();if(W){W.closeOtherSubMenu();const I=W.getSubMenuInstanceContext();if(I)return I.focusCurrentItem(),!0}return!1},closeCurrentSubMenu:()=>{var W;return(W=j.getParentContext())==null?void 0:W.closeOtherSubMenu()},moveCurrentItemFirst:()=>d(!0),moveCurrentItemLast:()=>d(!1),moveCurrentItemDown:()=>d(!0,C?w.indexOf(C)+1:0),moveCurrentItemUp:()=>d(!1,C?w.indexOf(C)-1:0),focusCurrentItem:()=>_(),openCurrentItemSubMenu:()=>C?C?.showSubMenu():!1,triggerCurrentItemClick:W=>C?.click(W)};let D=!1,L=!1;const j={zIndex:f+1,container:i.container,adjustPadding:a.value.adjustPadding||Ie.defaultAdjustPadding,getParentWidth:()=>{var W;return((W=M.value)==null?void 0:W.offsetWidth)||0},getParentHeight:()=>{var W;return((W=M.value)==null?void 0:W.offsetHeight)||0},getPositon:()=>[Z.value.x,Z.value.y],getZoom:()=>a.value.zoom||Ie.defaultZoom,addOpenedSubMenu(W){A.push(W)},closeOtherSubMenu(){A.forEach(W=>W()),A.splice(0,A.length),P(O)},checkCloseOtherSubMenuTimeOut(){return p?(clearTimeout(p),p=0,!0):!1},closeOtherSubMenuWithTimeOut(){p=setTimeout(()=>{p=0,this.closeOtherSubMenu()},200)},addChildMenuItem:(W,I)=>{I===void 0?w.push(W):w.splice(I,0,W)},removeChildMenuItem:W=>{w.splice(w.indexOf(W),1),W.getSubMenuInstance=()=>{}},markActiveMenuItem:(W,I=!1)=>{b(),C=W,I&&_()},markThisOpenedByKeyBoard:()=>{D=!0},isOpenedByKeyBoardFlag:()=>D?(D=!1,!0):!1,isMenuItemDataCollectedFlag:()=>L,getElement:()=>M.value||null,getParentContext:()=>i,getSubMenuInstanceContext:()=>O};ye("menuContext",j);const X={getChildItem:W=>w[W],getMenuDimensions:()=>k.value?{width:k.value.offsetWidth,height:k.value.offsetHeight}:{width:0,height:0},getSubmenuRoot:()=>k.value,getMenu:()=>M.value,getScrollValue:()=>{var W,I;return((I=(W=m.value)==null?void 0:W.getScrollContainer())==null?void 0:I.scrollTop)||0},setScrollValue:W=>{var I;return(I=m.value)==null?void 0:I.scrollTo(0,W)},getScrollHeight:()=>ne.value,adjustPosition:()=>{ke()},getMaxHeight:()=>se.value,getPosition:()=>Z.value,setPosition:(W,I)=>{Z.value.x=W,Z.value.y=I}},z=ie("menuItemInstance",void 0);z&&(z.getSubMenuInstance=()=>X);const ne=F(0),se=F(0),ae=F(!1),Z=F({x:0,y:0});function ke(){be(()=>{var W;const I=M.value,U=k.value;if(I&&U&&m.value){const{container:h}=i,B=v?.()??0,T=g?.()??0,H=getComputedStyle(U),J=parseFloat(H.paddingLeft),le=parseFloat(H.paddingTop),Y=T>0?le:0,K=document.documentElement.scrollHeight/x(),ue=document.documentElement.scrollWidth/x(),Ue=Math.min(ue,h.offsetWidth),pe=Math.min(K,h.offsetHeight);let Zt=_t(I,h),Qt=$t(I,h);if(o.direction.includes("l")?Z.value.x-=I.offsetWidth+J:o.direction.includes("r")?Z.value.x+=B+J:(Z.value.x+=B/2,Z.value.x-=(I.offsetWidth+J)/2),o.direction.includes("t")){const ht=(W=o.parentMenuItemContext)==null?void 0:W.getElement();ht&&(Z.value.y+=ht.offsetHeight),Z.value.y-=(I.offsetHeight+le)/x()}else o.direction.includes("b")?Z.value.y-=le/x():Z.value.y-=I.offsetHeight/2/x();be(()=>{var ht,An;Zt=_t(I,h),Qt=$t(I,h);const Pn=((An=(ht=m.value)==null?void 0:ht.getScrollContainer())==null?void 0:An.scrollHeight)||0,us=o.maxHeight;ne.value=o.maxHeight?Math.min(Pn,o.maxHeight):Pn;const ds=Zt+I.offsetWidth-Ue,On=Qt+ne.value+Y*2-pe;if(ae.value=On>0,$.value&&ds>0){const mt=B+I.offsetWidth-J,vt=Zt;mt>vt?Z.value.x-=vt:Z.value.x-=mt}if(ae.value){if($.value){const mt=On,vt=Qt;mt>vt?Z.value.y-=vt-Y:Z.value.y-=mt-Y}se.value=pe-(Z.value.y+le)}else se.value=us||0})}})}function Oe(){var W;const I=(W=o.parentMenuItemContext)==null?void 0:W.getElement();if(I){const U=_t(I,i.container),h=$t(I,i.container);Z.value.x=U,Z.value.y=h}else{const[U,h]=i.getPositon();Z.value.x=U,Z.value.y=h}be(()=>{var U;P(O),(U=M.value)==null||U.focus({preventScroll:!0}),i.isOpenedByKeyBoardFlag()&&be(()=>d(!0)),L=!0}),ke()}return ze(()=>o.show,W=>{W&&Oe()}),xe(()=>{r.value=!0,o.show?Oe():ke()}),zt(()=>{r.value=!1,z&&(z.getSubMenuInstance=()=>{})}),t(X),(W,I)=>{const U=$o("ContextSubMenu",!0);return r.value?(E(),ee(bn,{key:0,to:`#${y(l)}`},[V(Cs,un({appear:""},y(a).menuTransitionProps||{duration:10},{onAfterLeave:I[0]||(I[0]=h=>s("closeAnimFinished"))}),{default:we(()=>[e.show?(E(),N("div",un({key:0,ref_key:"submenuRoot",ref:k},W.$attrs,{class:["mx-context-menu",y(a).customClass?y(a).customClass:"",y(a).theme??""],style:{maxWidth:e.maxWidth?y(ao)(e.maxWidth):`${y(Ie).defaultMaxWidth}px`,minWidth:e.minWidth?y(ao)(e.minWidth):`${y(Ie).defaultMinWidth}px`,zIndex:y(f),left:`${Z.value.x}px`,top:`${Z.value.y}px`},"data-type":"ContextSubMenu",onClick:R}),[V(y(Tl),{ref_key:"scrollRectRef",ref:m,scroll:"vertical",maxHeight:se.value,containerClass:"mx-context-menu-scroll"},{default:we(()=>[S("div",{class:me(["mx-context-menu-items"]),ref_key:"menu",ref:M},[fe(W.$slots,"default",{},()=>[(E(!0),N(ve,null,ft(e.items,(h,B)=>(E(),N(ve,{key:B},[h.hidden!==!0&&h.divided==="up"?(E(),ee(Et,{key:0})):q("",!0),h.hidden!==!0&&h.divided==="self"?(E(),ee(Et,{key:1})):(E(),ee(Rn,{key:2,clickHandler:h.onClick?T=>h.onClick(T):void 0,disabled:typeof h.disabled=="object"?h.disabled.value:h.disabled,hidden:typeof h.hidden=="object"?h.hidden.value:h.hidden,icon:h.icon,iconFontClass:h.iconFontClass,svgIcon:h.svgIcon,svgProps:h.svgProps,label:h.label,customRender:h.customRender,customClass:h.customClass,checked:typeof h.checked=="object"?h.checked.value:h.checked,shortcut:h.shortcut,clickClose:h.clickClose,clickableWhenHasChildren:h.clickableWhenHasChildren,preserveIconWidth:h.preserveIconWidth!==void 0?h.preserveIconWidth:y(a).preserveIconWidth,showRightArrow:h.children&&h.children.length>0,hasChildren:h.children&&h.children.length>0,rawMenuItem:h,onSubMenuOpen:T=>{var H;return(H=h.onSubMenuOpen)==null?void 0:H.call(h,T)},onSubMenuClose:T=>{var H;return(H=h.onSubMenuClose)==null?void 0:H.call(h,T)}},So({_:2},[h.children&&h.children.length>0?{name:"submenu",fn:we(({context:T,show:H})=>[V(U,{show:H,parentMenuItemContext:T,items:h.children,maxWidth:h.maxWidth,minWidth:h.minWidth,maxHeight:h.maxHeight,adjustPosition:h.adjustSubMenuPosition!==void 0?h.adjustSubMenuPosition:y(a).adjustPosition,direction:h.direction!==void 0?h.direction:y(a).direction},null,8,["show","parentMenuItemContext","items","maxWidth","minWidth","maxHeight","adjustPosition","direction"])]),key:"0"}:void 0]),1032,["clickHandler","disabled","hidden","icon","iconFontClass","svgIcon","svgProps","label","customRender","customClass","checked","shortcut","clickClose","clickableWhenHasChildren","preserveIconWidth","showRightArrow","hasChildren","rawMenuItem","onSubMenuOpen","onSubMenuClose"])),h.hidden!==!0&&(h.divided==="down"||h.divided===!0)?(E(),ee(Et,{key:3})):q("",!0)],64))),128))])],512)]),_:3},8,["maxHeight"])],16)):q("",!0)]),_:3},16)],8,["to"])):q("",!0)}}}),ss=Q({__name:"ContextSubMenuWrapper",props:{options:{type:Object,default:null},show:{type:null,default:null},container:{type:Object,default:null},isFullScreenContainer:{type:Boolean,default:!0}},emits:["close","closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=xo(),l=F(),{options:i,show:a,container:c}=Ze(o);xe(()=>{a.value&&v()}),zt(()=>{m()}),ze(a,C=>{C?v():(lo(u),m())});const u={closeMenu:g,isClosed:x,getMenuRef:()=>l.value,getMenuDimensions:()=>{var C;return((C=l.value)==null?void 0:C.getMenuDimensions())??{width:0,height:0}}};let f=!1;function v(){$(),xl(u)}function g(C){f=!0,s("close",C),i.value.menuTransitionProps||s("closeAnimFinished"),lo(u)}function x(){return f}function $(){setTimeout(()=>{document.addEventListener("click",P,!0),document.addEventListener("contextmenu",P,!0),document.addEventListener("scroll",A,!0),!o.isFullScreenContainer&&c.value&&c.value.addEventListener("scroll",A,!0),i.value.keyboardControl!==!1&&document.addEventListener("keydown",M,!0)},50)}function m(){document.removeEventListener("contextmenu",P,!0),document.removeEventListener("click",P,!0),document.removeEventListener("scroll",A,!0),!o.isFullScreenContainer&&c.value&&c.value.removeEventListener("scroll",A,!0),i.value.keyboardControl!==!1&&document.removeEventListener("keydown",M,!0)}const k=F();ye("globalSetCurrentSubMenu",C=>k.value=C),ye("globalGetMenuHostId",c.value.id);function M(C){var p,b,d,_,R,O,D,L,j,X,z,ne,se;let ae=!0;switch(C.key){case"Escape":{((p=k.value)==null?void 0:p.isTopLevel())===!1?(b=k.value)==null||b.closeCurrentSubMenu():g();break}case"ArrowDown":(d=k.value)==null||d.moveCurrentItemDown();break;case"ArrowUp":(_=k.value)==null||_.moveCurrentItemUp();break;case"Home":(R=k.value)==null||R.moveCurrentItemFirst();break;case"End":(O=k.value)==null||O.moveCurrentItemLast();break;case"ArrowLeft":{(D=k.value)!=null&&D.closeSelfAndActiveParent()||(j=(L=i.value).onKeyFocusMoveLeft)==null||j.call(L);break}case"ArrowRight":(X=k.value)!=null&&X.openCurrentItemSubMenu()||(ne=(z=i.value).onKeyFocusMoveRight)==null||ne.call(z);break;case"Enter":(se=k.value)==null||se.triggerCurrentItemClick(C);break;default:ae=!1;break}ae&&k.value&&(C.stopPropagation(),C.preventDefault())}function A(C){i.value.closeWhenScroll!==!1&&w(C.target,null)}function P(C){w(C.target,C)}function w(C,p){for(var b,d;C;){if(C.classList&&C.classList.contains("mx-context-menu"))return;C=C.parentNode}p?i.value.clickCloseOnOutside!==!1?(m(),g()):(d=(b=i.value).onClickOnOutside)==null||d.call(b,p):(m(),g())}return ye("globalOptions",i),ye("globalCloseMenu",g),ye("globalIsFullScreenContainer",o.isFullScreenContainer),ye("globalHasSlot",C=>r[C]!==void 0),ye("globalRenderSlot",(C,p)=>fe(r,C,{...p},()=>[it("span","Render slot failed")],!1)),ye("menuContext",{zIndex:i.value.zIndex||Ie.defaultZindex,container:c.value,adjustPadding:{x:0,y:0},getZoom:()=>i.value.zoom||Ie.defaultZoom,getParentWidth:()=>0,getParentHeight:()=>0,getPositon:()=>[i.value.x,i.value.y],closeOtherSubMenuWithTimeOut:()=>{},checkCloseOtherSubMenuTimeOut:()=>!1,addOpenedSubMenu:()=>{},closeOtherSubMenu:()=>{},getParentContext:()=>null,getSubMenuInstanceContext:()=>null,getElement:()=>null,addChildMenuItem:()=>{},removeChildMenuItem:()=>{},markActiveMenuItem:()=>{},markThisOpenedByKeyBoard:()=>{},isOpenedByKeyBoardFlag:()=>!1,isMenuItemDataCollectedFlag:()=>!1}),t(u),(C,p)=>(E(),ee(In,{ref_key:"submenuInstance",ref:l,show:y(a),items:y(i).items,adjustPosition:y(i).adjustPosition,maxWidth:y(i).maxWidth||y(Ie).defaultMaxWidth,minWidth:y(i).minWidth||y(Ie).defaultMinWidth,maxHeight:y(i).maxHeight,direction:y(i).direction||y(Ie).defaultDirection,onCloseAnimFinished:p[0]||(p[0]=b=>s("closeAnimFinished"))},{default:we(()=>[fe(C.$slots,"default")]),_:3},8,["show","items","adjustPosition","maxWidth","minWidth","maxHeight","direction"]))}}),ta=Q({__name:"ContextMenu",props:{options:{type:Object,default:null},show:{type:Boolean,default:!1}},emits:["update:show","close"],setup(e,{expose:t,emit:n}){const o=n,s=e,{options:r,show:l}=Ze(s),{isNew:i,container:a,eleId:c}=os(r.value),u=F(null),f=xo();function v(g){var x,$;o("update:show",!1),o("close"),($=(x=r.value).onClose)==null||$.call(x,g)}return t({closeMenu:()=>o("update:show",!1),isClosed:()=>!l.value,getMenuRef:()=>{var g;return(g=u.value)==null?void 0:g.getMenuRef()},getMenuDimensions:()=>{var g;return((g=u.value)==null?void 0:g.getMenuDimensions())??{width:0,height:0}}}),(g,x)=>(E(),ee(bn,{to:`#${y(c)}`},[V(ss,{ref_key:"menuRef",ref:u,options:y(r),show:y(l),container:y(a),isFullScreenContainer:!y(i),onClose:v},So({_:2},[ft(y(f),($,m)=>({name:m,fn:we(k=>[fe(g.$slots,m,ks(bs(k)))])}))]),1032,["options","show","container","isFullScreenContainer"])],8,["to"]))}}),na=Q({name:"ContextMenuGroup",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},clickHandler:{type:Function,default:null},label:{type:String,default:""},icon:{type:String,default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},adjustSubMenuPosition:{type:Boolean,default:void 0},maxHeight:{type:[String,Number],default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0}},setup(e,t){const n=ie("globalOptions"),{adjustSubMenuPosition:o,maxWidth:s,minWidth:r,maxHeight:l}=Ze(e),i=typeof o.value<"u"?o.value:n.value.adjustPosition,a=F(),c=F();return t.expose({getSubMenuRef:()=>a.value,getMenuItemRef:()=>c.value}),()=>it(Rn,{...e,ref:c,showRightArrow:!0,maxWidth:void 0,minWidth:void 0,maxHeight:void 0,adjustSubMenuPosition:void 0,hasChildren:typeof t.slots.default!==void 0},t.slots.default?{submenu:u=>it(In,{ref:a,show:u.show,maxWidth:s.value,minWidth:r.value,maxHeight:l.value,adjustPosition:i,parentMenuItemContext:u.context},{default:t.slots.default}),...Rl(t.slots,"default")}:t.slots)}});function oa(e,t,n,o){const s=F(!0),r=it(ss,{options:e,show:s,container:t,isFullScreenContainer:!n,onCloseAnimFinished:()=>{Tn(null,t)},onClose:l=>{var i;(i=e.onClose)==null||i.call(e,l),s.value=!1}},o);return Tn(r,t),r.component}function ho(e,t){const n=os(e);return oa(e,n.container,n.isNew,t).exposed}const Yt={install(e){e.config.globalProperties.$contextmenu=ho,e.component("ContextMenu",ta),e.component("ContextMenuItem",Rn),e.component("ContextMenuGroup",na),e.component("ContextMenuSperator",Et),e.component("ContextMenuSeparator",Et),e.component("ContextSubMenu",In)},showContextMenu(e,t){return ho(e,t)},isAnyContextMenuOpen(){return Cl()},closeContextMenu:ns,transformMenuPosition:Sl},sa={key:0,class:"empty-container"},ra={key:0},la={key:1},aa={key:2},ia={key:3},ca={key:4},ua={key:5},da=Q({__name:"EmptyFolder",props:{path:{},documents:{}},setup(e){const t=xs,n=re(),o=e;return(s,r)=>!o.path||e.documents.length===0?(E(),N("div",sa,[(E(),ee(Cn(y(t)),{class:me(["cog",{stopped:y(n).dialog==="accessdenied"||y(n).authInProgress}])},null,8,["class"])),y(n).dialog==="accessdenied"?(E(),N("p",ra,"Access Denied")):y(n).connected?y(n).documentCount===0?(E(),N("p",aa,"Waiting for File List")):y(n).query?(E(),N("p",ia,"No matches!")):y(Wo)(o.path)?(E(),N("p",ua,"Empty folder")):(E(),N("p",ca,"Folder not found")):(E(),N("p",la,"No Connection"))])):q("",!0)}}),fa=Se(da,[["__scopeId","data-v-a89fc5ad"]]),pa=["checked"],ha=Q({__name:"SelectBox",props:{doc:{}},setup(e){const t=re();return(n,o)=>(E(),N("input",{type:"checkbox",tabindex:"-1",checked:y(t).selected.has(e.doc.key),onClick:o[0]||(o[0]=he(()=>{},["stop"])),onChange:o[1]||(o[1]=s=>{s.target.checked?y(t).selected.add(e.doc.key):y(t).selected.delete(e.doc.key)})},null,40,pa))}}),kn=Q({__name:"FileRenameInput",props:{doc:{},rename:{type:Function},exit:{type:Function}},setup(e){const t=F(null),n=F("");xe(()=>{n.value=o.doc.name;const r=n.value.lastIndexOf(".");be(()=>{t.value.focus(),t.value.setSelectionRange(0,r>0?r:n.value.length)})});const o=e,s=()=>{o.exit(),!(o.doc.key!=="new"&&(n.value===o.doc.name||n.value.length===0))&&o.rename(o.doc,n.value)};return(r,l)=>Rt((E(),N("input",{ref_key:"input",ref:t,id:"FileRenameInput",type:"text",autocorrect:"off","onUpdate:modelValue":l[0]||(l[0]=i=>n.value=i),onBlur:l[1]||(l[1]=(...i)=>e.exit&&e.exit(...i)),onKeyup:[l[2]||(l[2]=Je((...i)=>e.exit&&e.exit(...i),["esc"])),Je(s,["enter"])]},null,544)),[[dn,n.value]])}}),ma=["src"],va=["src"],ga={key:2,class:"folder icon"},ya={key:3,class:"video-container"},wa=["src","poster"],ka={class:"play-overlay"},ba={key:4,class:"audio icon"},Ca=["src"],xa={key:5,class:"archive icon"},Sa=Q({__name:"MediaPreview",props:{doc:{},quality:{}},setup(e,{expose:t}){const n=F(null),o=F(null),s=G(()=>n.value||o.value),r=G(()=>`${l.doc.previewurl}?${l.quality}&t=${l.doc.mtime}`),l=e,i=()=>{s.value&&(s.value.controls=!0,s.value.setAttribute("data-playing",""))},a=()=>{s.value&&(s.value.controls=!1,s.value.removeAttribute("data-playing"))};let c=null;const u=()=>{if(!s.value)return;s.value.load();const $=Array.from(document.querySelectorAll("video, audio"));if($.length===0)return;let m=null;for(const k in $)if($[k]===(c||s.value)){m=$[+k+1]??$[0]??null;break}if(m)if(m.tagName==="VIDEO"&&document.fullscreenElement===s.value){const k=s.value,M=m;if(k===M){M.play();return}c||k.addEventListener("fullscreenchange",A=>{c&&(c.currentTime=k.currentTime,c.click(),k.paused||c.play(),c=null,k.src=l.doc.url,k.poster=r.value,a())},{once:!0}),c=M,k.src=M.src,k.poster="",k.play()}else document.exitFullscreen(),m.click()};t({play(){if(!s.value)return!1;if(s.value.paused){s.value.play();for(const $ of Array.from(document.querySelectorAll("video, audio")))$!==s.value&&$.pause()}else s.value.pause();return!0},media:s});const f=()=>["mkv","mp4","webm","mov","avi"].includes(l.doc.ext),v=()=>["mp3","flac","ogg","aac"].includes(l.doc.ext),g=()=>["zip","tar","gz","bz2","xz","7z","rar"].includes(l.doc.ext),x=()=>["bmp","ico","tif","tiff","heic","heif","pdf","epub","mobi"].includes(l.doc.ext)||l.doc.size>5e5&&["avif","webp","png","jpg","jpeg"].includes(l.doc.ext);return($,m)=>x()?(E(),N("img",{key:0,src:`${e.doc.previewurl}?${e.quality}&t=${e.doc.mtime}`,alt:""},null,8,ma)):e.doc.img?(E(),N("img",{key:1,src:e.doc.url,alt:""},null,8,va)):e.doc.dir?(E(),N("span",ga)):f()?(E(),N("div",ya,[S("video",{ref_key:"vid",ref:o,src:e.doc.url,poster:r.value,preload:"none",onPlay:i,onPause:a,onEnded:u,onSeeking:m[0]||(m[0]=k=>s.value.play())},null,40,wa),S("div",ka,[V(y(Ss))])])):v()?(E(),N("div",ba,[S("audio",{ref_key:"aud",ref:n,src:e.doc.url,class:"icon",preload:"none",onPlay:i,onPause:a,onEnded:u,onSeeking:m[1]||(m[1]=k=>s.value.play())},null,40,Ca)])):g()?(E(),N("span",xa)):(E(),N("span",{key:6,class:me(["file icon",`ext-${e.doc.ext}`])},null,2))}}),$a=Se(Sa,[["__scopeId","data-v-47490c5c"]]),_a=["id","href"],Ea={class:"tooltip-name"},Ra={class:"tooltip-details"},Ia=Q({__name:"GalleryFigure",props:{doc:{},editing:{}},setup(e){const t=re(),n=e,o=F(null),s=F(null),r=G(()=>n.doc.key),l=i=>{o.value.play()&&i.preventDefault(),t.cursor=n.doc.key};return(i,a)=>{const c=kn,u=ha;return E(),N("a",{id:`file-${e.doc.key}`,href:e.doc.url,tabindex:"-1",class:me({file:!e.doc.dir,folder:e.doc.dir,cursor:y(t).cursor===e.doc.key,ghost:e.doc.ghost}),onContextmenu:a[3]||(a[3]=he(()=>{},["stop"])),onFocus:a[4]||(a[4]=he(f=>y(t).cursor=e.doc.key,["stop"])),onClick:l,onMouseenter:a[5]||(a[5]=(...f)=>s.value?.startHover&&s.value?.startHover(...f)),onMousemove:a[6]||(a[6]=(...f)=>s.value?.updatePosition&&s.value?.updatePosition(...f)),onMouseleave:a[7]||(a[7]=(...f)=>s.value?.endHover&&s.value?.endHover(...f))},[S("figure",null,[fe(i.$slots,"default",{},void 0,!0),V($a,{ref_key:"m",ref:o,doc:e.doc,tabindex:"-1",quality:"sz=512",class:"figcontent"},null,8,["doc"]),a[9]||(a[9]=S("div",{class:"titlespacer"},null,-1)),S("figcaption",{onClick:a[1]||(a[1]=he(()=>{},["prevent"])),onContextmenu:a[2]||(a[2]=he(f=>i.$emit("menu",f),["prevent"]))},[e.editing?(E(),ee(c,{key:0,doc:e.doc,rename:e.editing.rename,exit:e.editing.exit},null,8,["doc","rename","exit"])):(E(),N(ve,{key:1},[V(u,{doc:e.doc,onClick:a[0]||(a[0]=f=>y(t).cursor=e.doc.key)},null,8,["doc"]),S("span",null,te(e.doc.name),1),a[8]||(a[8]=S("div",{class:"namespacer"},null,-1))],64))],32)]),V(Xe,{ref_key:"tooltip",ref:s,text:r.value},{default:we(()=>[S("div",Ea,te(e.doc.name),1),S("div",Ra,te(e.doc.modified)+" — "+te(e.doc.sizedisp),1)]),_:1},8,["text"])],42,_a)}}}),Ma=Se(Ia,[["__scopeId","data-v-79b3799a"]]),Aa=Q({__name:"Gallery",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=re(),s=Kt(),r=Wt(null),l=()=>{r.value=null},i=(d,_)=>{const R=d.name,O=Ae(Ye,{message(D){const L=JSON.parse(D.data);"error"in L?(console.error("Rename failed",L.error.message,L.error),d.name=R):console.log("Rename succeeded",L)}});O.onopen=()=>{O.send(JSON.stringify({op:"rename",path:`${d.loc}/${R}`,to:_}))},d.name=_},a=F(),c=F(1),u=()=>{a.value&&(c.value=getComputedStyle(a.value).gridTemplateColumns.split(" ").length)},f=G(()=>c.value);t({newFolder(){const d=Math.floor(Date.now()/1e3);r.value=new ct({loc:A.value,key:"new",name:"New Folder",dir:!0,mtime:d,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),M.value=!M.value},toggleSortColumn(d){const _=["","name","modified","size",""][d];_&&o.toggleSort(_)},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(d=>d.key===o.cursor)??null},cursorSelect(){const d=o.cursor;d&&(o.selected.has(d)?o.selected.delete(d):o.selected.add(d),this.cursorMove(1,null))},up(d){this.cursorMove(-f.value,d)},down(d){this.cursorMove(f.value,d)},left(d){this.cursorMove(-1,d)},right(d){this.cursorMove(1,d)},cursorMove(d,_){const R=!!_?.shiftKey,O=n.documents;if(O.length===0){o.cursor="";return}const D=O.length,L=(se,ae)=>(se%ae+ae)%ae,j=(se,ae)=>L(se+ae,D+1),X=o.cursor?O.findIndex(se=>se.key===o.cursor):D;if(_&&X===0&&_.key==="ArrowLeft"||_&&X===D-1&&_.key==="ArrowRight")return;let z;X===D?z=d>0?0:D-1:(z=j(X,d),(Math.abs(d)>=D||Math.sign(d)!==Math.sign(z-X))&&(z=D)),o.cursor=O[z]?.key??"";const ne=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(R){let[se,ae]=d>0?[X,z]:[z,X];for(let Z=se;Z!==ae;Z=j(Z,1)){if(Z===D)continue;const ke=O[Z].key;o.selected.has(ke)?o.selected.delete(ke):o.selected.add(ke)}}x=ne,g||(g=setTimeout(()=>{x&&x.scrollIntoView({block:"center",behavior:"smooth"}),g=null},300)),z===D&&v()}});const v=()=>{const d=document.querySelector(".breadcrumb");d&&d.focus()};let g=null,x=null;Pe(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value.key),o.cursor){const d=document.querySelector(`#file-${o.cursor}`);d&&(d.focus(),d.scrollIntoView({block:"center",behavior:"smooth"}))}}),Pe(()=>{!n.documents.length&&o.cursor&&(o.cursor="",v())});let $=null;xe(()=>{const d=document.querySelector(".cursor");d&&(d.scrollIntoView({block:"center",behavior:"instant"}),d.focus()),u(),a.value&&($=new ResizeObserver(u),$.observe(a.value))}),at(()=>{$?.disconnect()});const m=(d,_)=>{const R=Ae(Ye,{open(){R.send(JSON.stringify({op:"mkdir",path:`${d.loc}/${_}`}))},message(O){const D=JSON.parse(O.data);"error"in D?(console.error("Mkdir failed",D.error.message,D.error),r.value=null):(console.log("mkdir",D),s.push(d.urlrouter))}});d.name=_,d.key=crypto.randomUUID(),o.addGhost(d),r.value=null},k=d=>{const _=n.documents,R=_[d].loc;return d===0?R!==A.value:R!==_[d-1].loc},M=G({get:()=>n.documents.length>0&&n.documents.every(d=>o.selected.has(d.key)),set:d=>{console.log("Setting allSelected",d);for(const _ of n.documents)d?o.selected.add(_.key):o.selected.delete(_.key)}}),A=G(()=>n.path.join("/")),P=d=>{const _=d.loc?`${d.loc}/${d.name}`:d.name;if(d.dir){const R=document.createElement("a");R.href=`/zip/${d.key}/${d.name}.zip`,R.download="",R.click(),o.showToast(`Downloading ${d.name}.zip`)}else{const R=document.createElement("a");R.href=`/files/${_}`,R.download="",R.click(),o.showToast(`Downloading ${d.name}`)}},w=async d=>{const _=new URL(d.url,window.location.origin).href;try{await navigator.clipboard.writeText(_),o.showToast("📋 Link copied!")}catch{o.showToast("Failed to copy link")}},C=async d=>{const _=d.loc?`${d.loc}/${d.name}`:d.name;try{o.showToast("Copying image...");const O=await(await fetch(`/files/${_}`)).blob();if(O.type!=="image/png"){const D=new Image;D.src=URL.createObjectURL(O),await new Promise(X=>D.onload=X);const L=document.createElement("canvas");L.width=D.naturalWidth,L.height=D.naturalHeight,L.getContext("2d").drawImage(D,0,0);const j=await new Promise(X=>L.toBlob(z=>X(z),"image/png"));URL.revokeObjectURL(D.src),await navigator.clipboard.write([new ClipboardItem({"image/png":j})])}else await navigator.clipboard.write([new ClipboardItem({"image/png":O})]);o.showToast("📋 Image copied!")}catch(R){console.error("Copy image failed",R),o.showToast("Failed to copy image")}},p=d=>{const _=d.loc?`${d.loc}/${d.name}`:d.name;o.hideDoc(_);const R=Ae(Ye,{message(O){const D=JSON.parse(O.data);"error"in D?(console.error("Delete failed",D.error),o.unhideDoc(_),o.showToast(D.error.message||"Delete failed")):D.status==="ack"&&(o.showToast(`🗑️ Deleted ${d.name}`),R.close())}});R.onopen=()=>{R.send(JSON.stringify({op:"rm",sel:[_]}))}},b=(d,_)=>{o.cursor=_.key;const R=[{label:"📥 Download",onClick:()=>P(_)},{label:"🔗 Copy Link",onClick:()=>w(_)}];_.img&&R.push({label:"📋 Copy Image",onClick:()=>C(_)}),R.push({label:"✏️ Rename",onClick:()=>{r.value=_}},{label:"🗑️ Delete",onClick:()=>p(_)}),Yt.showContextMenu({x:d.x,y:d.y,items:R})};return(d,_)=>{const R=Ma,O=_n;return n.documents.length||r.value?(E(),N("div",{key:0,class:"gallery",ref_key:"gallery",ref:a},[r.value?.key==="new"?(E(),ee(R,{doc:r.value,key:r.value.key,editing:{rename:m,exit:l}},null,8,["doc","editing"])):q("",!0),(E(!0),N(ve,null,ft(e.documents,(D,L)=>(E(),N(ve,{key:D.key},[k(L)?(E(),ee(O,{key:0,path:D.loc?D.loc.split("/"):[],class:"folder-indicator"},null,8,["path"])):q("",!0),V(R,{doc:D,editing:r.value===D?{rename:i,exit:l}:null,onMenu:j=>b(j,D),class:me({"folder-start":k(L)})},null,8,["doc","editing","onMenu","class"])],64))),128))],512)):q("",!0)}}}),Pa=Se(Aa,[["__scopeId","data-v-c339c53f"]]),Oa=Q({__name:"FileSize",props:{doc:{}},setup(e){const t=G(()=>{const o=n.doc.sizedisp.split(" ").slice(-1)[0];return+o?"bytes":o}),n=e;return(o,s)=>(E(),N("td",{class:me(["size right",t.value])},te(e.doc.sizedisp),3))}}),Ta=Se(Oa,[["__scopeId","data-v-444c7802"]]),Na={class:"modified right"},Da=["datetime"],La=Q({__name:"FileModified",props:{doc:{},now:{}},setup(e){const t=e,n=F(null),o=G(()=>(t.now,Po(t.doc.mtime))),s=G(()=>new Date(1e3*t.doc.mtime).toISOString().replace(".000Z","Z")),r=G(()=>s.value.replace("T"," ").replace("Z"," UTC"));return(l,i)=>(E(),N("td",Na,[S("time",{datetime:s.value,onMouseenter:i[0]||(i[0]=(...a)=>n.value?.startHover&&n.value?.startHover(...a)),onMousemove:i[1]||(i[1]=(...a)=>n.value?.updatePosition&&n.value?.updatePosition(...a)),onMouseleave:i[2]||(i[2]=(...a)=>n.value?.endHover&&n.value?.endHover(...a))},te(o.value),41,Da),V(Xe,{ref_key:"tooltip",ref:n,text:r.value},{default:we(()=>[Ce(te(r.value),1)]),_:1},8,["text"])]))}}),Ba={key:0},Ha={class:"selection"},Fa=["indeterminate"],Wa={key:0,class:"folder"},za={class:"name"},Ua={key:0,class:"folder-change"},ja={colspan:"5"},Va=["id","onClick","onContextmenu"],Ga=["onClick"],qa=["checked","onChange"],Ka={class:"name"},Ja=["href","onFocus"],Ya=["onClick"],Xa={class:"menu"},Za=["onClick"],Qa={key:1,class:"summary"},ei={colspan:"3",class:"right"},ti={class:"size right"},ni=Q({__name:"FileExplorer",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=re(),s=Kt(),r=Wt(null),l=(p,b)=>{const d=p.name,_=Ae(Ye,{message(R){const O=JSON.parse(R.data);"error"in O?(console.error("Rename failed",O.error.message,O.error),p.name=d):console.log("Rename succeeded",O)}});_.onopen=()=>{_.send(JSON.stringify({op:"rename",path:`${p.loc}/${d}`,to:b}))},p.name=b};t({newFolder(){console.log("New folder");const p=Math.floor(Date.now()/1e3);r.value=new ct({loc:k.value,key:"new",name:"New Folder",dir:!0,mtime:p,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),m.value=!m.value},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(p=>p.key===o.cursor)??null},cursorSelect(){const p=o.cursor;p&&(o.selected.has(p)?o.selected.delete(p):o.selected.add(p),this.cursorMove(1,null))},up(p){this.cursorMove(-1,p)},down(p){this.cursorMove(1,p)},left(p){s.back()},right(p){const b=document.querySelector(`#file-${o.cursor} a`);b&&b.click()},cursorMove(p,b){const d=!!b?.shiftKey,_=n.documents;if(_.length===0){o.cursor="";return}const R=_.length,O=(z,ne)=>(z%ne+ne)%ne,D=(z,ne)=>O(z+ne,R+1),L=o.cursor?_.findIndex(z=>z.key===o.cursor):_.length,j=D(L,p);o.cursor=_[j]?.key??"";const X=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(d){let[z,ne]=p>0?[L,j]:[j,L];for(let se=z;se!==ne;se=D(se,1)){if(se===R)continue;const ae=_[se].key;o.selected.has(ae)?o.selected.delete(ae):o.selected.add(ae)}}c=X,a||(a=setTimeout(()=>{c&&c.scrollIntoView({block:"center",behavior:"smooth"}),a=null},300)),j===R&&i()}});const i=()=>{const p=document.querySelector(".breadcrumb");p&&p.focus()};let a=null,c=null;Pe(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value?.key),o.cursor){const p=document.querySelector(`#file-${o.cursor} .name a`);p&&p.focus()}}),Pe(()=>{!n.documents.length&&o.cursor&&(o.cursor="",i())});let u=F(0),f=null;const v=()=>{u.value=Math.floor(Date.now()/1e3)};xe(()=>{v(),f=setInterval(v,1e3);const p=document.querySelector(".cursor");p&&(p.scrollIntoView({block:"center",behavior:"instant"}),p.focus())}),at(()=>{clearInterval(f)});const g=(p,b)=>{const d=Ae(Ye,{open(){d.send(JSON.stringify({op:"mkdir",path:`${p.loc}/${b}`}))},message(_){const R=JSON.parse(_.data);"error"in R?(console.error("Mkdir failed",R.error.message,R.error),r.value=null):(console.log("mkdir",R),s.push(p.urlrouter))}});p.name=b,p.key=crypto.randomUUID(),o.addGhost(p),r.value=null},x=p=>{const b=n.documents,d=b[p].loc;return p===0?d!==k.value:d!==b[p-1].loc},$=G({get:()=>n.documents.length>0&&n.documents.some(p=>o.selected.has(p.key))&&!m.value,set:p=>{}}),m=G({get:()=>n.documents.length>0&&n.documents.every(p=>o.selected.has(p.key)),set:p=>{console.log("Setting allSelected",p);for(const b of n.documents)p?o.selected.add(b.key):o.selected.delete(b.key)}}),k=G(()=>n.path.join("/")),M=p=>{const b=p.loc?`${p.loc}/${p.name}`:p.name;if(p.dir){const d=document.createElement("a");d.href=`/zip/${p.key}/${p.name}.zip`,d.download="",d.click(),o.showToast(`Downloading ${p.name}.zip`)}else{const d=document.createElement("a");d.href=`/files/${b}`,d.download="",d.click(),o.showToast(`Downloading ${p.name}`)}},A=async p=>{const b=new URL(p.url,window.location.origin).href;try{await navigator.clipboard.writeText(b),o.showToast("📋 Link copied!")}catch{o.showToast("Failed to copy link")}},P=async p=>{const b=p.loc?`${p.loc}/${p.name}`:p.name;try{o.showToast("Copying image...");const _=await(await fetch(`/files/${b}`)).blob();if(_.type!=="image/png"){const R=new Image;R.src=URL.createObjectURL(_),await new Promise(L=>R.onload=L);const O=document.createElement("canvas");O.width=R.naturalWidth,O.height=R.naturalHeight,O.getContext("2d").drawImage(R,0,0);const D=await new Promise(L=>O.toBlob(j=>L(j),"image/png"));URL.revokeObjectURL(R.src),await navigator.clipboard.write([new ClipboardItem({"image/png":D})])}else await navigator.clipboard.write([new ClipboardItem({"image/png":_})]);o.showToast("📋 Image copied!")}catch(d){console.error("Copy image failed",d),o.showToast("Failed to copy image")}},w=p=>{const b=p.loc?`${p.loc}/${p.name}`:p.name;o.hideDoc(b);const d=Ae(Ye,{message(_){const R=JSON.parse(_.data);"error"in R?(console.error("Delete failed",R.error),o.unhideDoc(b),o.showToast(R.error.message||"Delete failed")):R.status==="ack"&&(o.showToast(`🗑️ Deleted ${p.name}`),d.close())}});d.onopen=()=>{d.send(JSON.stringify({op:"rm",sel:[b]}))}},C=(p,b)=>{o.cursor=b.key;const d=[{label:"📥 Download",onClick:()=>M(b)},{label:"🔗 Copy Link",onClick:()=>A(b)}];b.img&&d.push({label:"📋 Copy Image",onClick:()=>P(b)}),d.push({label:"✏️ Rename",onClick:()=>{r.value=b}},{label:"🗑️ Delete",onClick:()=>w(b)}),Yt.showContextMenu({x:p.x,y:p.y,items:d})};return(p,b)=>{const d=La,_=Ta,R=_n;return n.documents.length||r.value?(E(),N("table",Ba,[S("thead",null,[S("tr",null,[S("th",Ha,[Rt(S("input",{type:"checkbox",tabindex:"-1","onUpdate:modelValue":b[0]||(b[0]=O=>m.value=O),indeterminate:$.value},null,8,Fa),[[_o,m.value]])]),S("th",{class:me(["sortcolumn",{sortactive:y(o).sortOrder==="name"}]),onClick:b[1]||(b[1]=O=>y(o).toggleSort("name"))},"Name",2),S("th",{class:me(["sortcolumn modified right",{sortactive:y(o).sortOrder==="modified"}]),onClick:b[2]||(b[2]=O=>y(o).toggleSort("modified"))},"Modified",2),S("th",{class:me(["sortcolumn size right",{sortactive:y(o).sortOrder==="size"}]),onClick:b[3]||(b[3]=O=>y(o).toggleSort("size"))},"Size",2),b[5]||(b[5]=S("th",{class:"menu"},null,-1))])]),S("tbody",null,[r.value?.key==="new"?(E(),N("tr",Wa,[b[6]||(b[6]=S("td",{class:"selection"},null,-1)),S("td",za,[V(kn,{doc:r.value,rename:g,exit:()=>{r.value=null}},null,8,["doc","exit"])]),V(d,{doc:r.value,now:y(u)},null,8,["doc","now"]),V(_,{doc:r.value},null,8,["doc"]),b[7]||(b[7]=S("td",{class:"menu"},null,-1))])):q("",!0),(E(!0),N(ve,null,ft(e.documents,(O,D)=>(E(),N(ve,{key:O.key},[x(D)?(E(),N("tr",Ua,[S("th",ja,[V(R,{path:O.loc?O.loc.split("/"):[]},null,8,["path"])])])):q("",!0),S("tr",{id:`file-${O.key}`,class:me({file:!O.dir,folder:O.dir,cursor:y(o).cursor===O.key,ghost:O.ghost}),onClick:L=>y(o).cursor=y(o).cursor===O.key?"":O.key,onContextmenu:he(L=>C(L,O),["prevent"])},[S("td",{class:"selection",onClick:he(L=>y(o).cursor=y(o).cursor===O.key?O.key:"",["stop"])},[S("input",{type:"checkbox",tabindex:"-1",checked:y(o).selected.has(O.key),onChange:L=>L.target.checked?y(o).selected.add(O.key):y(o).selected.delete(O.key)},null,40,qa)],8,Ga),S("td",Ka,[r.value===O?(E(),ee(kn,{key:0,doc:O,rename:l,exit:()=>{r.value=null}},null,8,["doc","exit"])):(E(),N(ve,{key:1},[S("a",{href:O.url,tabindex:"-1",onContextmenu:b[4]||(b[4]=he(()=>{},["stop"])),onFocus:he(L=>y(o).cursor=O.key,["stop"])},te(O.name),41,Ja),y(o).cursor==O.key?(E(),N("button",{key:0,tabindex:"-1",class:"rename-button",onClick:()=>r.value=O},"🖊️",8,Ya)):q("",!0)],64))]),V(d,{doc:O,now:y(u)},null,8,["doc","now"]),V(_,{doc:O},null,8,["doc"]),S("td",Xa,[S("button",{tabindex:"-1",onClick:he(L=>C(L,O),["stop"])},"⋮",8,Za)])],42,Va)],64))),128)),n.documents.length>1?(E(),N("tr",Qa,[S("td",ei,te(n.documents.length)+" items",1),S("td",ti,te(y(bt)(n.documents.reduce((O,D)=>O+D.size,0))),1),b[8]||(b[8]=S("td",{class:"menu"},null,-1))])):q("",!0)])])):q("",!0)}}}),oi=Se(ni,[["__scopeId","data-v-b1596785"]]),si={key:2,class:"search-loading"},ri=Q({__name:"ExplorerView",props:{path:{},query:{}},setup(e){const t=re(),n=F(),o=e,s=G(()=>o.path.join("/"));ze(()=>[o.query,o.path.join("/")],([l,i])=>{t.query!==l&&t.search(l,i)},{immediate:!0});const r=G(()=>{const l=o.path.join("/");if(!o.query){t.docVersion;const f=t.hiddenPaths,v=qe().filter(m=>m.loc===l&&!f.has(m.loc?`${m.loc}/${m.name}`:m.name)),g=t.ghosts.filter(m=>m.loc===l&&!f.has(m.loc?`${m.loc}/${m.name}`:m.name)),x=new Set(v.map(m=>m.name)),$=[...v,...g.filter(m=>!x.has(m.name))];return Ho($,t.prefs.sortListing)}const a=t.hiddenPaths,c=t.searchResults.filter(f=>!a.has(f.loc?`${f.loc}/${f.name}`:f.name)),u=t.prefs.sortFiltered;return u?sr(c,u):c});return Pe(()=>{t.fileExplorer=n.value}),ze([()=>o.path.join("/"),()=>t.documentCount],([l,i],[a,c])=>{l===a&&c!==void 0&&c>0||(t.prefs.gallery=r.value.some(u=>u.previewable))},{immediate:!0}),(l,i)=>{const a=Pa,c=fa;return E(),N(ve,null,[y(t).prefs.gallery?(E(),ee(a,{ref_key:"fileExplorer",ref:n,key:`gallery-${s.value}`,path:o.path,documents:r.value},null,8,["path","documents"])):(E(),ee(oi,{ref_key:"fileExplorer",ref:n,key:`explorer-${s.value}`,path:o.path,documents:r.value},null,8,["path","documents"])),y(t).searchLoading?(E(),N("div",si,"Searching...")):q("",!0),V(c,{documents:r.value,path:o.path},null,8,["documents","path"])],64)}}}),li=Se(ri,[["__scopeId","data-v-493ea011"]]),Ft=gl({history:Yr("/"),routes:[{path:"/:pathMatch(.*)*",name:"explorer",component:li}]}),ai={class:"headermain buttons"},ii={class:"search-group"},ci=["value"],ui={viewBox:"0 0 32 32",class:"pie-mini"},di=["stroke","stroke-dasharray","stroke-dashoffset"],fi=["stroke-dasharray"],pi={class:"disk-tooltip"},hi={viewBox:"0 0 160 80",width:"160",height:"80",class:"pie-tooltip"},mi=["stroke","stroke-dasharray","stroke-dashoffset"],vi=["stroke-dasharray"],gi={x:"92",y:"19",class:"pie-label"},yi={x:"92",y:"39",class:"pie-label"},wi=["fill"],ki={x:"92",y:"59",class:"pie-label"},je=50.27,Ve=100.53,bi=Q({__name:"HeaderMain",props:{path:{},query:{}},setup(e,{expose:t}){const n=re(),o=bl(),s=F(),r=F(null),l=G(()=>{const P=n.space;return P.disk?`${P.storage/P.disk*je} ${je}`:`0 ${je}`}),i=G(()=>{const P=n.space;return P.disk?`${P.free/P.disk*je} ${je}`:`0 ${je}`}),a=G(()=>{const P=n.space;return P.disk?-(P.storage/P.disk)*je:0}),c=G(()=>{const P=n.space;if(!P.disk)return"#6c6";const w=P.free/P.disk;return w>.25?"#5b5":w>.1?"#db3":"#d44"}),u=G(()=>{const P=n.space;return P.disk?`${P.storage/P.disk*Ve} ${Ve}`:`0 ${Ve}`}),f=G(()=>{const P=n.space;return P.disk?`${P.free/P.disk*Ve} ${Ve}`:`0 ${Ve}`}),v=G(()=>{const P=n.space;return P.disk?-(P.storage/P.disk)*Ve:0}),g=e,x=P=>{const w=s.value;w&&(w.value="",k(P)),document.querySelector(".breadcrumb").focus()},$=()=>{s.value?.focus()};let m=null;const k=P=>{const w=P.target.value,C=g.path.join("/");n.search(w,C),m!==null&&cancelAnimationFrame(m),m=requestAnimationFrame(()=>{m=null;let p=C;p=p?`/${p}`:"";const d=(w?`${p}//${w}`:p||"/").replaceAll("?","%3F").replaceAll("#","%23");Ft.replace(d)})},M=()=>{s.value?.focus()},A=P=>{const w=[];o.isExternalAuth&&n.user.isLoggedIn&&w.push({label:"👤 "+(n.user.username||"User Account"),onClick:()=>{window.location.href="/auth/"}}),!o.isExternalAuth&&n.user.isLoggedIn&&w.push({label:"🔑 Change Password",onClick:()=>{n.dialog="settings"}}),n.user.privileged&&w.push({label:"⚙️ Admin Settings",onClick:()=>{n.dialog="usermgmt"}}),n.user.isLoggedIn?w.push({label:"🚪 Logout",onClick:()=>n.logout()}):n.server.public&&w.push({label:"🔐 Login",onClick:async()=>{try{await Sn("/auth/restricted#theme=light"),mn()}catch{console.log("Login cancelled")}}}),Yt.showContextMenu({x:P.target.getBoundingClientRect().right,y:P.target.getBoundingClientRect().bottom,items:w})};return t({toggleSearchInput:M,clearSearch:x}),(P,w)=>{const C=kl,p=jt;return E(),N("nav",ai,[V(C,{path:g.path},null,8,["path"]),V(p,{name:"create-folder",tooltip:"New folder",onClick:w[0]||(w[0]=()=>{y(n).fileExplorer.newFolder()})}),w[11]||(w[11]=S("div",{class:"smallgap"},null,-1)),V(p,{name:"eye",onClick:w[1]||(w[1]=b=>y(n).prefs.gallery=!y(n).prefs.gallery),tooltip:"Details/Gallery"}),S("div",ii,[V(p,{name:"find",onClick:$,tooltip:"Search"}),S("input",{ref_key:"search",ref:s,type:"search",value:e.query,onInput:k,onKeydown:Je(x,["escape"])},null,40,ci),e.query?q("",!0):(E(),N("span",{key:0,class:"search-hint",onClick:$},"/"))]),w[12]||(w[12]=S("div",{class:"spacer smallgap"},null,-1)),y(n).space.disk?(E(),N("div",{key:0,class:"disk-space",onMouseenter:w[2]||(w[2]=(...b)=>r.value?.startHover&&r.value?.startHover(...b)),onMousemove:w[3]||(w[3]=(...b)=>r.value?.updatePosition&&r.value?.updatePosition(...b)),onMouseleave:w[4]||(w[4]=(...b)=>r.value?.endHover&&r.value?.endHover(...b))},[(E(),N("svg",ui,[w[5]||(w[5]=S("circle",{r:"16",cx:"16",cy:"16",fill:"#c8e"},null,-1)),S("circle",{r:"8",cx:"16",cy:"16",fill:"transparent",stroke:c.value,"stroke-width":"16","stroke-dasharray":i.value,"stroke-dashoffset":a.value,transform:"rotate(-90 16 16)"},null,8,di),S("circle",{r:"8",cx:"16",cy:"16",fill:"transparent",stroke:"#82d","stroke-width":"16","stroke-dasharray":l.value,transform:"rotate(-90 16 16)"},null,8,fi),w[6]||(w[6]=S("circle",{r:"2",cx:"16",cy:"16",fill:"rgba(255,255,255,0.2)"},null,-1))])),V(Xe,{ref_key:"diskTooltip",ref:r,text:"Disk space"},{default:we(()=>[S("div",pi,[(E(),N("svg",hi,[w[7]||(w[7]=S("circle",{r:"32",cx:"40",cy:"40",fill:"#c8e"},null,-1)),S("circle",{r:"16",cx:"40",cy:"40",fill:"transparent",stroke:c.value,"stroke-width":"32","stroke-dasharray":f.value,"stroke-dashoffset":v.value,transform:"rotate(-90 40 40)"},null,8,mi),S("circle",{r:"16",cx:"40",cy:"40",fill:"transparent",stroke:"#82d","stroke-width":"32","stroke-dasharray":u.value,transform:"rotate(-90 40 40)"},null,8,vi),w[8]||(w[8]=S("circle",{r:"4",cx:"40",cy:"40",fill:"rgba(255,255,255,0.25)"},null,-1)),w[9]||(w[9]=S("rect",{x:"78",y:"10",width:"10",height:"10",fill:"#82d",rx:"2"},null,-1)),S("text",gi,te(y(bt)(y(n).space.storage))+" stored",1),w[10]||(w[10]=S("rect",{x:"78",y:"30",width:"10",height:"10",fill:"#c8e",rx:"2"},null,-1)),S("text",yi,te(y(bt)(y(n).space.usage-y(n).space.storage))+" other",1),S("rect",{x:"78",y:"50",width:"10",height:"10",fill:c.value,rx:"2"},null,8,wi),S("text",ki,te(y(bt)(y(n).space.free))+" free",1)]))])]),_:1},512)],32)):q("",!0),V(p,{name:"cog",onClick:A})])}}}),Ci=Se(bi,[["__scopeId","data-v-7e0e5f3d"]]),xi=["id"],Si={key:0},$i={class:"modal-content"},rs=Q({__name:"ModalDialog",props:{title:{},name:{}},setup(e,{expose:t}){const n=F(null),o=F(null),s=re(),r=()=>{s.dialog="",Oo()},l=e;return t({show:()=>{s.dialog=l.name,xn(),be(()=>{n.value?.focus();const a=o.value?.querySelector("input");a&&a.focus()})},close:r}),Pe(()=>{if(n.value){n.value.focus();const a=o.value?.querySelector("input");a&&a.focus()}}),(a,c)=>y(s).dialog===e.name?(E(),N("div",{key:0,class:"modal-overlay",onClick:he(r,["self"]),onKeydown:Je(r,["escape"]),tabindex:"-1",ref_key:"overlay",ref:n},[S("div",{class:"modal-dialog",id:l.name,ref_key:"dialog",ref:o},[l.title?(E(),N("h1",Si,te(l.title),1)):q("",!0),S("div",$i,[fe(a.$slots,"default",{},()=>[c[0]||(c[0]=Ce(" Dialog with no content ",-1)),S("button",{onClick:r},"OK")])])],8,xi)],544)):q("",!0)}}),_i="/auth/password-change";async function Ei(e,t,n){return await pt.post(_i,{username:e,passwordChange:t,password:n})}const Xt="/auth/users";async function Ri(){return await pt.get(Xt)}async function mo(e,t,n){return await pt.post(Xt,{username:e,password:t,privileged:n})}async function vo(e,t){return await pt.put(`${Xt}/${e}`,t)}async function go(e){return await pt.delete(`${Xt}/${e}`)}async function Ii(e){return await pt.put("/api/config/public",{public:e})}const Mi={class:"form-grid"},Ai={class:"dialog-buttons"},Pi=Q({__name:"SettingsModal",setup(e){const t=F(!1),n=re(),o=F(),s=F(),r=lt({passwordChange:"",password:""}),l=()=>{r.passwordChange="",r.password="",n.dialog=""},i=async a=>{a.preventDefault();try{if(r.passwordChange){if(!r.password){n.showToast("⚠️ Current password is required"),s.value.focus();return}await Ei(n.user.username,r.passwordChange,r.password)}l()}catch(c){const u=c;n.showToast(u.message||"🛑 Unknown error")}finally{t.value=!1}};return(a,c)=>{const u=rs;return E(),ee(u,{name:"settings",title:"Settings"},{default:we(()=>[S("form",null,[y(n).user.isLoggedIn?(E(),N(ve,{key:0},[c[5]||(c[5]=S("h3",null,"Update your authentication",-1)),S("div",Mi,[c[2]||(c[2]=S("label",{for:"passwordChange"},"New password:",-1)),Rt(S("input",{ref_key:"passwordChange",ref:o,id:"passwordChange",type:"password",autocomplete:"new-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[0]||(c[0]=f=>r.passwordChange=f)},null,512),[[dn,r.passwordChange]]),c[3]||(c[3]=S("label",{for:"password"},"Current password:",-1)),Rt(S("input",{ref_key:"password",ref:s,id:"password",name:"password",type:"password",autocomplete:"current-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[1]||(c[1]=f=>r.password=f)},null,512),[[dn,r.password]])]),S("div",Ai,[S("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l}),c[4]||(c[4]=S("div",{class:"spacer"},null,-1)),S("input",{id:"submit",type:"submit",value:"Submit",class:"button",onClick:he(i,["prevent"])})])],64)):(E(),N(ve,{key:1},[c[7]||(c[7]=S("p",null,"No settings are available because you have not logged in.",-1)),S("div",{class:"dialog-buttons"},[c[6]||(c[6]=S("div",{class:"spacer"},null,-1)),S("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l})])],64))])]),_:1})}}}),Oi=Se(Pi,[["__scopeId","data-v-127c9237"]]),Ti={key:0,class:"loading"},Ni={key:1},Di={class:"form-row"},Li={for:"publicAccess"},Bi=["checked","onChange","disabled"],Hi=["onClick"],Fi=["onClick"],Wi=["onClick","disabled"],zi=Q({__name:"UserManagementModal",setup(e){const t=re(),n=F(!0),o=F([]),s=F(""),r=F("📋"),l=lt({public:!1}),i=()=>{t.dialog="",s.value=""},a=async()=>{try{n.value=!0;const m=await Ri();o.value=m.users}catch(m){const k=m;t.showToast(k.message||"Failed to load users")}finally{n.value=!1}},c=async()=>{const m=window.prompt("Enter username for new user:");if(!(!m||!m.trim()))try{s.value="";const k=await mo(m.trim(),void 0,!1);await a(),k.password&&(s.value=`User ${m.trim()} created. Password: ${k.password}`)}catch(k){const M=k;t.showToast(M.message||"Failed to add user")}},u=async(m,k)=>{const M=k.target;try{await vo(m.username,{privileged:M.checked}),m.privileged=M.checked}catch(A){const P=A;t.showToast(P.message||"Failed to update user"),M.checked=m.privileged}},f=async m=>{const k=window.prompt("Enter new username:",m.username);if(!(!k||!k.trim()||k.trim()===m.username))try{s.value="";const M=await mo(k.trim(),void 0,m.privileged);await go(m.username),await a(),M.password&&(s.value=`User renamed to ${k.trim()}. New password: ${M.password}`)}catch(M){const A=M;t.showToast(A.message||"Failed to rename user")}},v=async m=>{if(confirm(`Reset password for ${m.username}? A new password will be generated.`))try{s.value="";const k=await vo(m.username,{password:""});k.password&&(s.value=`Password reset for ${m.username}. New password: ${k.password}`)}catch(k){const M=k;t.showToast(M.message||"Failed to reset password")}},g=async m=>{if(confirm(`Delete user ${m}?`))try{await go(m),await a()}catch(k){const M=k;t.showToast(M.message||"Failed to delete user")}},x=async(m=!1)=>{const k=s.value.match(/(?:Password|New password): (.+)/);if(k)if(await navigator.clipboard.writeText(k[1]),m){r.value="✅ Copied!";const M=s.value.replace(/(?:Password|New password): .+/,"Password copied to clipboard!");s.value=M,setTimeout(()=>{s.value="",r.value="📋"},3e3)}else s.value=""},$=async()=>{try{s.value="",await Ii(l.public),t.server.public=l.public,s.value="Server settings updated"}catch(m){const k=m;t.showToast(k.message||"Failed to update settings")}};return xe(()=>{l.public=t.server.public||!1,n.value=!1}),ze(()=>t.dialog,m=>{m==="usermgmt"&&!t.server.paskia&&a()}),ze(()=>t.server.public,m=>{l.public=m||!1}),(m,k)=>{const M=rs;return E(),ee(M,{name:"usermgmt",title:"Admin Settings"},{default:we(()=>[n.value?(E(),N("div",Ti,"Loading...")):(E(),N("div",Ni,[k[8]||(k[8]=S("h3",null,"Server Settings",-1)),S("div",Di,[S("label",Li,[Rt(S("input",{type:"checkbox",id:"publicAccess","onUpdate:modelValue":k[0]||(k[0]=A=>l.public=A),onChange:$},null,544),[[_o,l.public]]),k[3]||(k[3]=Ce(" Public access (anyone can read and write) ",-1))])]),y(t).server.paskia?(E(),N(ve,{key:0},[k[4]||(k[4]=S("h3",null,"User Management",-1)),k[5]||(k[5]=S("p",null,[Ce("See "),S("a",{href:"/auth/admin/"},"Paskia Admin"),Ce(".")],-1))],64)):(E(),N(ve,{key:1},[k[7]||(k[7]=S("h3",null,"Users",-1)),S("button",{onClick:c,class:"button",title:"Add new user"},"➕ Add User"),s.value?(E(),N("div",{key:0,class:"success-message",onClick:k[2]||(k[2]=A=>x(!1))},[Ce(te(s.value)+" ",1),s.value.includes("Password:")||s.value.includes("New password:")?(E(),N("button",{key:0,onClick:k[1]||(k[1]=he(A=>x(!0),["stop"])),class:"button small",title:"Copy to clipboard"},te(r.value),1)):q("",!0)])):q("",!0),S("table",null,[k[6]||(k[6]=S("thead",null,[S("tr",null,[S("th",null,"Username"),S("th",null,"Admin"),S("th",null,"Actions")])],-1)),S("tbody",null,[(E(!0),N(ve,null,ft(o.value,A=>(E(),N("tr",{key:A.username},[S("td",null,te(A.username),1),S("td",null,[S("input",{type:"checkbox",checked:A.privileged,onChange:P=>u(A,P),disabled:A.username===y(t).user.username},null,40,Bi)]),S("td",null,[S("button",{onClick:P=>f(A),class:"button small",title:"Rename user"},"✏️",8,Hi),S("button",{onClick:P=>v(A),class:"button small",title:"Reset password"},"🔑",8,Fi),S("button",{onClick:P=>g(A.username),class:"button small danger",disabled:A.username===y(t).user.username,title:"Delete user"},"🗑️",8,Wi)])]))),128))])])],64)),S("div",{class:"dialog-buttons"},[S("button",{onClick:i,class:"button"},"Close")])]))]),_:1})}}}),Ui=Se(zi,[["__scopeId","data-v-afe859c3"]]),ji={key:0,class:"modal-overlay"},Vi=Q({__name:"AccessDeniedModal",setup(e){const t=re(),n=()=>{location.reload()};return Pe(()=>{t.dialog==="accessdenied"&&xn()}),(o,s)=>y(t).dialog==="accessdenied"?(E(),N("div",ji,[S("div",{class:"modal-dialog",id:"accessdenied"},[S("div",{class:"modal-content access-denied"},[s[0]||(s[0]=S("p",{class:"icon"},"⛔",-1)),s[1]||(s[1]=S("p",{class:"message"},"Access Denied",-1)),S("button",{onClick:n,class:"button"},"Reload")])])])):q("",!0)}}),Gi=Se(Vi,[["__scopeId","data-v-eaaa3c09"]]),qi={key:2},Ki=Q({__name:"App",setup(e){const t=re(),n=G(()=>{const l=decodeURIComponent(Ft.currentRoute.value.path).split("//"),i=(l[0]??"").split("/").filter(c=>c!==""),a=l.slice(1).join("//");return{path:l[0]??"",pathList:i,query:a}});Pe(()=>{document.title=n.value.path.replace(/\/$/,"").split("/").pop()||t.server.name||"Cista Storage"}),xe(Xs),xe(Gt),at(Zs);const o=F(null);let s=null;const r=l=>{if(t.dialog){s&&(clearTimeout(s),s=null);return}const i=t.fileExplorer;if(!i)return;const a=i.isCursor(),c=l.target.tagName==="INPUT",u=l.type==="keyup";if(l.repeat){(l.key==="ArrowUp"||l.key==="ArrowDown"||l.key==="ArrowLeft"||l.key==="ArrowRight"||a&&l.code==="Space")&&(c||l.preventDefault());return}let f="";if(!c&&l.key.startsWith("Arrow"))f=l.key.slice(5).toLowerCase();else if(!u&&l.key==="f"&&(l.ctrlKey||l.metaKey))o.value.toggleSearchInput();else if(!c&&u&&l.key==="/")o.value.toggleSearchInput();else if(u&&l.key==="Escape")t.error="",t.clearToast(),o.value.clearSearch(l),t.focusBreadcrumb();else if(!c&&u&&l.key==="Backspace")Ft.back();else if(!c&&!u&&l.key==="a"&&(l.ctrlKey||l.metaKey))i.toggleSelectAll();else if(!c&&u&&l.key==="g")t.prefs.gallery=!t.prefs.gallery;else if(!c&&u&&(l.code==="Backquote"||l.key==="1"||l.key==="2"||l.key==="3"))t.sort(["","name","modified","size"][+l.key||0]);else if(!c&&a&&u&&!l.ctrlKey&&(l.key==="F2"||l.key==="r"))i.cursorRename();else if(!c&&a&&l.code==="Space")u&&!l.altKey&&!l.ctrlKey&&i.cursorSelect();else return;l.preventDefault(),s&&(clearTimeout(s),s=null);let v;switch(f){case"up":v=()=>i.up(l);break;case"down":v=()=>i.down(l);break;case"left":v=()=>i.left(l);break;case"right":v=()=>i.right(l);break}if(v&&!u){const x=l.altKey?20:100;v(),s=setTimeout(()=>{s=setInterval(v,x)},200-x)}};return xe(()=>{window.addEventListener("keydown",r),window.addEventListener("keyup",r)}),at(()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",r)}),(l,i)=>{const a=Oi,c=Ci,u=_n,f=dr,v=Hs;return E(),N(ve,null,[y(t).toast?(E(),N("div",{key:0,class:"toast-message",onClick:i[0]||(i[0]=g=>y(t).clearToast())},te(y(t).toast),1)):y(t).error&&!y(t).authInProgress?(E(),N("div",{key:1,class:"toast-message status",onClick:i[1]||(i[1]=g=>y(t).error="")},te(y(t).error),1)):q("",!0),V(a),V(Ui),V(Gi),S("header",null,[V(c,{ref_key:"headerMain",ref:o,path:n.value.pathList,query:n.value.query},null,8,["path","query"]),V(u,{path:n.value.pathList,primary:""},null,8,["path"])]),S("main",null,[V(y(ts),{path:n.value.pathList,query:n.value.query},null,8,["path","query"])]),y(t).selected.size||y(t).uprogress.total||y(t).dprogress.total?(E(),N("footer",qi,[V(f,{path:n.value.pathList},null,8,["path"]),V(v,{status:y(t).uprogress,onCancel:y(t).cancelUploads,class:"upload"},null,8,["status","onCancel"]),V(v,{status:y(t).dprogress,onCancel:y(t).cancelDownloads,class:"download"},null,8,["status","onCancel"])])):q("",!0)],64)}}});function Ji(e,t){if(e==null)return;let n=e;for(let o=0;o<t.length;o++){if(n===void 0||n[t[o]]===void 0)return;if(n===null||n[t[o]]===null)return null;n=n[t[o]]}return n}function Mn(e,t,n){if(n.length===0)return t;const o=n[0];return n.length>1&&(t=Mn(typeof e!="object"||e===null||!Object.prototype.hasOwnProperty.call(e,o)?Number.isInteger(Number(n[1]))?[]:{}:e[o],t,Array.prototype.slice.call(n,1))),Number.isInteger(Number(o))&&Array.isArray(e)?e.slice()[o]:Object.assign({},e,{[o]:t})}function ls(e,t){if(e==null||t.length===0)return e;if(t.length===1){if(e==null)return e;if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.slice.call(e,0).splice(t[0],1);const n={};for(const o in e)n[o]=e[o];return delete n[t[0]],n}if(e[t[0]]==null){if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.concat.call([],e);const n={};for(const o in e)n[o]=e[o];return n}return Mn(e,ls(e[t[0]],Array.prototype.slice.call(t,1)),[t[0]])}function as(e,t){return t.map(n=>n.split(".")).map(n=>[n,Ji(e,n)]).filter(n=>n[1]!==void 0).reduce((n,o)=>Mn(n,o[1],o[0]),{})}function is(e,t){return t.map(n=>n.split(".")).reduce((n,o)=>ls(n,o),e)}function yo(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l,beforeHydrate:i,afterHydrate:a},c,u=!0){try{u&&i?.(c);const f=t.getItem(o);if(f){const v=n.deserialize(f),g=r?as(v,r):v,x=l?is(g,l):g;e.$patch(x)}u&&a?.(c)}catch(f){s&&console.error("[pinia-plugin-persistedstate]",f)}}function wo(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l}){try{const i=r?as(e,r):e,a=l?is(i,l):i,c=n.serialize(a);t.setItem(o,c)}catch(i){s&&console.error("[pinia-plugin-persistedstate]",i)}}function Yi(e,t){return typeof e=="function"?e(t):typeof e=="string"?e:t}function Xi(e,t,n){const{pinia:o,store:s,options:{persist:r=n}}=e;if(!r)return;if(!(s.$id in o.state.value)){const i=o._s.get(s.$id.replace("__hot:",""));i&&Promise.resolve().then(()=>i.$persist());return}const l=(Array.isArray(r)?r:r===!0?[{}]:[r]).map(t);s.$hydrate=({runHooks:i=!0}={})=>{l.forEach(a=>{yo(s,a,e,i)})},s.$persist=()=>{l.forEach(i=>{wo(s.$state,i)})},l.forEach(i=>{yo(s,i,e),s.$subscribe((a,c)=>wo(c,i),{detached:!0})})}function Zi(e={}){return function(t){Xi(t,n=>{const o=Yi(n.key,t.store.$id);return{key:(e.key?e.key:s=>s)(o),debug:n.debug??e.debug??!1,serializer:n.serializer??e.serializer??{serialize:s=>JSON.stringify(s),deserialize:s=>JSON.parse(s)},storage:n.storage??e.storage??window.localStorage,beforeHydrate:n.beforeHydrate??e.beforeHydrate,afterHydrate:n.afterHydrate??e.afterHydrate,pick:n.pick,omit:n.omit}},e.auto??!1)}}var Qi=Zi();const Mt=$s(Ki);Mt.config.errorHandler=e=>{console.log(e)};const cs=_s();cs.use(Qi);Mt.use(cs);Mt.use(Ft);Mt.use(Yt);Mt.mount("#app");
@@ -0,0 +1 @@
1
+ (function(){"use strict";let l=[],u=0;const c=[],q=10,a=100;function M(n){return"^"+n.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}function S(n){return n.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()}function g(n,e,t){return n.includes(e)||t.every(o=>n.includes(o))}const y=new Intl.Collator("en",{sensitivity:"base",numeric:!0}),z=()=>new Promise(n=>setTimeout(n,0));function k(n){let e=null;for(const t of c)t.complete&&n.startsWith(t.query)&&(!e||t.query.length>e.query.length)&&(e=t);return e}function C(n,e,t){const o=c.findIndex(r=>r.query===n);o!==-1&&c.splice(o,1),c.unshift({query:n,results:e,complete:t}),c.length>q&&c.pop()}function E(){c.length=0}async function L(n,e,t){const o=S(n),r=o.split(/\s+/),s=[];let h=0;const m=c.find(i=>i.query===o);if(m){u===t&&f(m.results,n,e,t,!0);return}const N=k(o);if(N){for(const i of N.results)g(i.haystack,o,r)&&s.push(i);C(o,s,!0),u===t&&f(s,n,e,t,!0);return}const p=500;for(let i=0;i<l.length&&s.length<a;i+=p){if(u!==t)return;const T=Math.min(i+p,l.length);for(let d=i;d<T&&s.length<a;d++){const b=l[d];g(b.haystack,o,r)&&s.push(b)}s.length>h&&u===t&&(h=s.length,f(s,n,e,t,!1)),i+p<l.length&&s.length<a&&await z()}C(o,s,s.length<a),u===t&&f(s,n,e,t,!0)}function f(n,e,t,o,r){const s=R(n,e,t);postMessage({type:"results",docs:s.map(({haystack:h,...m})=>m),id:o,done:r})}function R(n,e,t){const o=t+"/";return[...n].sort((r,s)=>+(s.loc===t)-+(r.loc===t)||Number(s.loc.startsWith(o))-Number(r.loc.startsWith(o))||y.compare(r.loc,s.loc)||Number(s.dir)-Number(r.dir)||Number(s.name.includes(e))-Number(r.name.includes(e))||y.compare(r.name,s.name))}self.onmessage=async n=>{const e=n.data;e.type==="update"?(l=e.documents.map(t=>({...t,haystack:M(t.name)})).sort((t,o)=>o.mtime-t.mtime),E()):e.type==="search"&&(u=e.id,e.query?await L(e.query,e.loc,e.id):postMessage({type:"results",docs:[],id:e.id,done:!0}))}})();
@@ -7,8 +7,8 @@
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono&family=Roboto:wght@400;700&display=swap" rel="stylesheet">
10
- <script type="module" crossorigin src="/assets/index-D2oWGW3J.js"></script>
11
- <link rel="modulepreload" crossorigin href="/assets/icons-DMD182WZ.js">
12
- <link rel="stylesheet" crossorigin href="/assets/index-DEDFmpD8.css">
10
+ <script type="module" crossorigin src="/assets/index-sCu5kWtw.js"></script>
11
+ <link rel="modulepreload" crossorigin href="/assets/icons-lBBdjRTZ.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/index-CfkzSOky.css">
13
13
 
14
14
  <body id="app">
cista/protocol.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import shutil
4
+ from pathlib import PurePosixPath
4
5
  from typing import Any
5
6
 
6
7
  import msgspec
@@ -16,6 +17,10 @@ class ControlBase(msgspec.Struct, tag_field="op", tag=str.lower):
16
17
  def __call__(self):
17
18
  raise NotImplementedError
18
19
 
20
+ def affected_paths(self) -> list[str]:
21
+ """Return list of paths affected by this operation for change notification."""
22
+ return []
23
+
19
24
 
20
25
  class MkDir(ControlBase):
21
26
  path: str
@@ -24,6 +29,9 @@ class MkDir(ControlBase):
24
29
  path = config.config.path / filename.sanitize(self.path)
25
30
  path.mkdir(parents=True, exist_ok=False)
26
31
 
32
+ def affected_paths(self) -> list[str]:
33
+ return [filename.sanitize(self.path)]
34
+
27
35
 
28
36
  class Rename(ControlBase):
29
37
  path: str
@@ -36,6 +44,11 @@ class Rename(ControlBase):
36
44
  path = config.config.path / filename.sanitize(self.path)
37
45
  path.rename(path.with_name(to))
38
46
 
47
+ def affected_paths(self) -> list[str]:
48
+ sanitized = filename.sanitize(self.path)
49
+ new_path = str(PurePosixPath(sanitized).with_name(filename.sanitize(self.to)))
50
+ return [sanitized, new_path]
51
+
39
52
 
40
53
  class Rm(ControlBase):
41
54
  sel: list[str]
@@ -49,6 +62,9 @@ class Rm(ControlBase):
49
62
  else:
50
63
  p.unlink()
51
64
 
65
+ def affected_paths(self) -> list[str]:
66
+ return [filename.sanitize(p) for p in self.sel]
67
+
52
68
 
53
69
  class Mv(ControlBase):
54
70
  sel: list[str]
@@ -63,6 +79,13 @@ class Mv(ControlBase):
63
79
  for p in sel:
64
80
  shutil.move(p, dst)
65
81
 
82
+ def affected_paths(self) -> list[str]:
83
+ dst = filename.sanitize(self.dst)
84
+ paths = [filename.sanitize(p) for p in self.sel]
85
+ # Include new locations in dst
86
+ paths.extend(f"{dst}/{PurePosixPath(p).name}" for p in self.sel)
87
+ return paths
88
+
66
89
 
67
90
  class Cp(ControlBase):
68
91
  sel: list[str]
@@ -86,6 +109,11 @@ class Cp(ControlBase):
86
109
  else:
87
110
  shutil.copy2(p, dst)
88
111
 
112
+ def affected_paths(self) -> list[str]:
113
+ dst = filename.sanitize(self.dst)
114
+ # Only destinations are new (sources unchanged)
115
+ return [f"{dst}/{PurePosixPath(filename.sanitize(p)).name}" for p in self.sel]
116
+
89
117
 
90
118
  ControlTypes = MkDir | Rename | Rm | Mv | Cp
91
119
 
cista/serve.py CHANGED
@@ -2,6 +2,7 @@ import os
2
2
  import re
3
3
  from pathlib import Path
4
4
 
5
+ from fastapi_vue.hostutil import parse_endpoint
5
6
  from sanic import Sanic
6
7
 
7
8
  from cista import config, server80
@@ -44,18 +45,28 @@ def check_cert(certdir, domain):
44
45
 
45
46
 
46
47
  def parse_listen(listen):
47
- if listen.startswith("/"):
48
- unix = Path(listen).resolve()
48
+ # Domain name (e.g. example.com) -> HTTPS with LetsEncrypt
49
+ if re.fullmatch(r"(\w+(-\w+)*\.)+\w{2,}", listen, re.UNICODE):
50
+ return f"https://{listen}", {"host": listen, "port": 443, "ssl": True}
51
+
52
+ # Use fastapi_vue's parse_endpoint for everything else
53
+ endpoints = parse_endpoint(listen, default_port=8989)
54
+ ep = endpoints[0]
55
+
56
+ if "uds" in ep:
57
+ unix = Path(ep["uds"]).resolve()
49
58
  if not unix.parent.exists():
50
59
  raise ValueError(
51
60
  f"Directory for unix socket does not exist: {unix.parent}/",
52
61
  )
53
62
  return "http://localhost", {"unix": unix.as_posix()}
54
- if re.fullmatch(r"(\w+(-\w+)*\.)+\w{2,}", listen, re.UNICODE):
55
- return f"https://{listen}", {"host": listen, "port": 443, "ssl": True}
56
- try:
57
- addr, _port = listen.split(":", 1)
58
- port = int(_port)
59
- except Exception:
60
- raise ValueError(f"Invalid listen address: {listen}") from None
61
- return f"http://localhost:{port}", {"host": addr, "port": port}
63
+
64
+ host, port = ep["host"], ep["port"]
65
+ # When binding all interfaces, use single_listener=False for Sanic
66
+ if len(endpoints) > 1:
67
+ return f"http://localhost:{port}", {
68
+ "host": host,
69
+ "port": port,
70
+ "single_listener": False,
71
+ }
72
+ return f"http://{host}:{port}", {"host": host, "port": port}